繁体   English   中英

AVPlayer和AWS服务流

[英]AVPlayer and AWS Services Streaming

我正在尝试从AWS S3存储桶流式传输视频。 我上传了几份具有“让每个人都拥有”权限的文件。

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

在我的项目中,我启动了一个AVPlayer,该AVPlayer从表视图获取路径(就像iTunes一样,但用于电影)。 每行的文件与在我的网络浏览器中测试的文件相同: http : //distribution.cloudfront.net/movie1.mov for row1 distribution.cloudfront.net/movie2.mov for row2 ...

玩家沿路径前进并开始游戏,但总是同时冻结。 我必须暂停或前进/后退才能继续播放视频。

因此,这似乎是一个缓冲问题。

我想知道我是否使用得当,以及如何解决缓冲区问题。

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

谢谢您的帮助。

问候

您是否在Cloudfront上设置了地理限制,以便它使用离您最近的区域中的服务器?

我的第一句话是在Web和RMTP之间。 您需要网络,以便正确。

现在仅限法国使用,请再次测试您的视频,看看它们的效果是否更好。

随着使用范围的扩大,您将希望允许其他区域。 请记住,不同地区的Cloudfront价格不同。 欧盟和美国一样,但是其他地区的价格可能是其两倍甚至更高。

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

流长视频时,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
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM