2015-04-22 92 views
0

我试图从AWS S3存储桶中流式传输视频。 我上传了“为所有人”权限的几个fils。AVPlayer和AWS Services Streaming

我也创建了一个CloudFront分配(我只是选择了我的存储桶,并让其他所有选项默认)。 在网络浏览器中,我可以下载文件/阅读地址http://distribution.cloudfront.net/movie1.mov

在我的项目中,我启动了一个AVPlayer,它从一个tableview(如itune但是用于电影)中获取路径。 文件的每一行是一样的在我的网页浏览器进行测试: http://distribution.cloudfront.net/movie1.mov为ROW1 distribution.cloudfront.net/movie2.mov为2行...

玩家扮演很好的路径,并开始播放,但它总是在同一时间冻结。我必须暂停或前进/后退才能继续播放视频。

所以它似乎是一个缓冲区问题。

我想知道我是否使用AWS Cloud Front以及如何解决缓冲区问题。

我没有找到任何关于此的好教程或答案。

谢谢你的帮助。

问候

+1

的Cloudfront有分布设置,如果该文件是为“下载”或“流”的默认是下载。你可以验证你是否转换为流媒体?您是否还在云端设置了地理限制,以便使用距离您最近的服务器? –

+0

谢谢你的回答。 对于你的第一个问题:当我创建发行版时,我没有选择下载或流媒体。 或者也许这是Web和RMTP之间的选择。 如果我选择Web。 - >我必须换成RMTP? 我没有受到地域限制。我在哪里可以找到它? – Jojo

+0

我发现了地理限制,并仅为法国(现在)设置了它。所以如果我想扩大我的申请到欧盟或美国,我必须增加更多的国家。而已 ? – Jojo

回答

0

你设置CloudFront的地理限制,以便它使用的服务器在离你最近的区域?

我的意思是在我的第一条评论中,网络和RMTP之间。你想要网页是正确的。

现在,它只限于法国,再次测试您的视频,看看他们的表现是否更好。

随着用途的扩展,您将需要允许其他区域。请记住,不同地区的云端价格不同。欧盟和美国是相同的,但其他地区可能是两倍或更多。

http://aws.amazon.com/cloudfront/pricing/

+0

谢谢你的细节。 我与限制测试,但是影片几秒钟后:(仍然冻结 选择RMTP不会帮助 – Jojo

+0

我也试图打开链接: http://distribution.cloudfront.net/movie1.mov 在vlc中,但它仍然缓慢并在同一时间冻结。任何想法? – Jojo

+0

它在你的本地计算机上的VLC中也失败了吗?你确定文件没有被损坏吗?尝试把文件放到你的常规web服务器上s3)并观看电影的方式进行测试 –

0

而流长视频AVPlayer可以熄火。

您需要的钥匙登记观察家playbackBufferEmpty和playbackLikelyToKeepUp

[playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil]; 
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil]; 

上。然后,

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
         change:(NSDictionary *)change context:(void *)context { 
    if (!player) { 
     return; 
    } 

    else if (object == playerItem && [keyPath isEqualToString:@"playbackBufferEmpty"]) { 
     if (playerItem.playbackBufferEmpty) { 
      //Other relevant code here, like adding spinner 
     } 
    } 

    else if (object == playerItem && [keyPath isEqualToString:@"playbackLikelyToKeepUp"]) { 
     if (playerItem.playbackLikelyToKeepUp) { 
      [player play]; 
      //Other relevant code here, like removing spinner 
     } 
    } 
} 
+0

它已经实现为我从这里使用的播放器: https://github.com/piemonte/Player 但它始终定格在同一时间 任何其他的想法 – Jojo

+0

然后我不认为这是?与应用程序端部分有关。 – Xcoder