4

我似乎无法在 iOS 6 中播放任何视频。无论是在设备 (iP4) 上还是在模拟器上。

我拥有的是 IB 中的 UIWebView 设置。然后在我的viewDidLoad我有以下代码:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://domain.com/app/player.php?vid=%@", [videoDetails objectForKey:@"vid"]]];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[videoWebView loadRequest:requestObj];

解释一下,vimeo上的视频设置是只允许托管在特定域上,否则会显示错误消息。所以我在 player.php 中设置了一些简单的 HTML,只调用 vimeo 嵌入代码。

当我转到上面有 UIWebView 的视图,并且视频已经加载并且您在 vimeo 视频中看到“播放”图标时,我单击它,然后视频显示一个加载图标,然后大约 5-10秒,控制台输出下面和 UIWebView 只是变白。

控制台输出:

2013-01-30 16:50:11.809 My App[2807:907] [MPAVController] Autoplay: Enabling autoplay
2013-01-30 16:50:11.821 My App[2807:907] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1)
2013-01-30 16:50:11.831 My App[2807:907] [MPAVController] Autoplay: Enabling autoplay
2013-01-30 16:50:12.042 My App[2807:907] [MPCloudAssetDownloadController] Prioritization requested for media item ID: 0
2013-01-30 16:50:21.254 My App[2807:907] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1)
2013-01-30 16:50:22.000 My App[2807:907] [MPAVController] Autoplay: Enabling autoplay
2013-01-30 16:50:22.244 My App[2807:907] [MPAVController] Autoplay: Disabling autoplay for pause
2013-01-30 16:50:22.246 My App[2807:907] [MPAVController] Autoplay: Disabling autoplay
2013-01-30 16:50:22.354 My App[2807:907] [MPAVController] Autoplay: Disabling autoplay
2013-01-30 16:50:22.591 My App[2807:907] [MPAVController] Autoplay: Enabling autoplay
2013-01-30 16:50:22.593 My App[2807:907] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1)
2013-01-30 16:50:22.655 My App[2807:907] [MPAVController] Autoplay: Enabling autoplay
2013-01-30 16:50:22.973 My App[2807:907] [MPAVController] Autoplay: Enabling autoplay
2013-01-30 16:50:23.057 My App[2807:907] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1)

在 iOS 5 上,视频按预期播放。问题是,这不仅仅与 vimeo 有关。我尝试了以下方法:

Vimeo 随机公共视频(未嵌入在 domain.com 上托管的文件中)

NSString *htmlStringToLoad = [NSString stringWithFormat:@"http://player.vimeo.com/video/32424117?title=0&byline=0&portrait=0&width=320&height=181&frameborder=0"];
[videoWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:htmlStringToLoad]]];

然后再次使用 YouTube:

[videoWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=dABo_DCIdpM"]]];

我唯一关心的是让它与 Vimeo 视频一起使用,因为这是它们都存储的地方。但我看不出 vimeo 是这里的问题,因为它在 YT 上也不起作用,所以一定是我做错了什么才能让 iOS 6 开心吗?我用谷歌搜索了一下,我似乎根本找不到任何解决方案,即使我不认为只有我发生了这种情况。

提前致谢。

4

2 回答 2

9

为此,我不得不完全放弃 UIWebView。

我不知道您是否在免费 vimeo 帐户上获得此功能,但在我们的 PRO 帐户上,视频设置中有一个“视频文件”选项卡,底部有一个标有“HTTP Live Streaming”的字段,实际上有一个直接链接到您的视频。

然后我使用 MPMoviePlayerViewController 代替 UIWebView 来播放视频。

将 MediaPlayer.framework 添加到“Link Binary With Libraries”设置中。在具有 UIImageView、几个标签和一个播放按钮的视图控制器的 .h 文件中,我导入#import <MediaPlayer/MediaPlayer.h>并设置了一个属性@property(nonatomic, readonly) MPMoviePlayerViewController *player;

然后,在 .m 文件中:

-(IBAction)playVideo:(id)sender{
    NSString *videoString = @"http://player.vimeo.com/external/THE_VIDEO_ID.m3u8?p=standard,mobile&s=UNIQUE_VALUE_FOR_EACH_VIDEO";
    player = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:videoString]];
    [player.moviePlayer prepareToPlay];
    [player.view setFrame: self.view.bounds];
    [self.view addSubview: player.view];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerDidExitFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerDidExitFullscreen:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
    [player.moviePlayer play];
}

- (void)MPMoviePlayerDidExitFullscreen:(NSNotification *)notification{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
    [player.moviePlayer stop];
    [player.moviePlayer.view removeFromSuperview];
}

我确实尝试将 HTTP Live Stream URL 加载到 UIWebView 中,但它似乎不起作用。黑屏短暂出现,中间有 vimeo 播放按钮。然后在一秒钟内全屏播放器打开大约一秒钟,然后关闭,然后 UIWebView 变白。

我仍在对此进行测试,到目前为止,我已经成功地在 iOS 6 和 5.1 上通过 WiFi 播放了我们最长的视频,1 小时 45 分钟,没有问题。但希望这将帮助其他人作为一个开始。

于 2013-02-01T09:55:06.913 回答
1

您仍然可以通过从 UIMoviePlayerController 注册通知并处理相应的事件来使用 UIWebview...

-(void)viewDidLoad
{

...

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoStarted:)   name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoFinished:) name:@"UIMoviePlayerControllerDidExitFullscreenNotification" object:nil];
}

-(void)videoStarted:(NSNotification *)notification{
// your code here
}

-(void)videoFinished:(NSNotification *)notification{
// your code here
}
于 2013-05-13T14:22:35.677 回答