【问题标题】:Streaming videos in iOS 4 using MPMoviePlayerViewController?使用 MPMoviePlayerViewController 在 iOS 4 中流式传输视频?
【发布时间】:2011-06-26 18:09:46
【问题描述】:

我想在 iPhone 中通过 http 流传输 *.m3U8 视频文件。在 iOS 3.2 之前,它曾经在 iPhone 上完美播放。
但随着 MoviePlayer API 的最新更改,我无法在 iOS4 设备上流式传输此文件。

我现在使用 MPMoviePlayerViewController 对象播放此文件,但每次我收到错误“错误代码 = 2。无法播放文件”。
错误描述非常不充分,Apple 的 MPMoviePlayerViewController 示例代码已过时。
请帮助我解决解决方案或提供一些示例代码或工作解决方案的参考。

【问题讨论】:

    标签: iphone ios ios4 video-streaming mpmovieplayercontroller


    【解决方案1】:

    控制器:

    #import <AVFoundation/AVFoundation.h>
    
    @property (nonatomic, retain) AVPlayer *avPlayer;
    @property (nonatomic, retain) IBOutlet PlayerView *playerView;
    @property (nonatomic, retain) AVPlayerItem *playerItem;
    
    // Use a HTTP URL, example: http://192.168.2.103/video.m3u8
    -(void) setUpPlayer:(NSURL*) url {
        AVURLAsset *anAssest= [[AVURLAsset alloc]initWithURL:url options:nil];
        [anAssest loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{
            NSError *error = nil;
            AVKeyValueStatus status = [anAssest statusOfValueForKey:@"tracks" error:&error];
            if (status == AVKeyValueStatusLoaded) {
                self.playerItem = [AVPlayerItem playerItemWithAsset:anAssest];
                self.avPlayer = [AVPlayer playerWithPlayerItem:self.playerItem];
                self.playerView.player=self.avPlayer;
                [self.avPlayer play];
            } else {
                NSLog(@"The asset's tracks were not loaded:\n%@", [error localizedDescription]);
            }
        }];
    }
    

    观点:

    #import <AVFoundation/AVFoundation.h>
    #import <UIKit/UIKit.h>
    @interface PlayerView : UIView
    @property (nonatomic, retain) AVPlayer* player;
    @end
    
    #import "PlayerView.h"
    @implementation PlayerView
    + (Class)layerClass {
        return [AVPlayerLayer class];
    }
    - (AVPlayer*)player {
        return [(AVPlayerLayer*)[self layer] player];
    }
    - (void)setPlayer:(AVPlayer*)player {
        [(AVPlayerLayer*)[self layer] setPlayer:player];
    }
    @end
    

    类似的东西 :P 你应该使用 Apple 的 mediafilesegmenter 命令创建 m3u8,但它可能仍然可以工作。

    【讨论】:

    • 它只播放音频,不播放视频。而且它不提供播放器界面。音频在后台继续播放。 MPMoviePlayerController不能用于http流吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2014-06-15
    • 1970-01-01
    相关资源
    最近更新 更多