6

我有一个客户对需要两个 AVPlayer 同步的应用程序有一个非常具体的请求。一个视频是针对某些内容的,另一个是针对演讲者谈论内容的。使用 AVMutableComposition 将它们组合成一个视频不是一种选择,因为演示者视频必须能够响应用户生成的事件(例如,他们希望具有显示/隐藏演示者的功能)并且我不相信有一种对特定 AVMutableCompositionTrack 进行控制的方法。

所以,我要弄清楚如何确保两个 AVPlayer 保持同步,我想知道是否有人有这方面的经验或建议其他工具来实现这一点。

谢谢

4

1 回答 1

1

以下方法是使用的方法

- (void)setRate:(float)rate 
           time:(CMTime)itemTime 
     atHostTime:(CMTime)hostClockTime;

- (void)prerollAtRate:(float)rate 
    completionHandler:(void (^)(BOOL finished))completionHandler;

注意事项

重要 HTTP Live Streaming 当前不支持此方法,或者当 automaticallyWaitsToMinimizeStalling 为 YES 时不支持此方法。对于链接到 iOS 10.0 及更高版本或 macOS 10.12 及更高版本的客户端,当 automaticWaitsToMinimizeStalling 为 YES 时调用此方法将引发 NSInvalidArgument 异常。

这是一种预期的行为,因为“实时”是“存在的”并且不能向前搜索并将速率设置为小于 1.0,这将导致额外缓冲流(第二点是猜测)。

文档

https://developer.apple.com/documentation/avfoundation/avplayer/1386591-setrate?language=objc

https://developer.apple.com/documentation/avfoundation/avplayer/1389712-prerollat​​rate?language=objc

作为旁注,考虑到 HLS 流不是真正的实时流,“当前时刻”在使用流的客户端之间可能会发生几秒钟的变化,这与 WebRTC 相反,例如,发布者和消费者之间的延迟是有保证的最多 1 秒.

于 2017-09-22T18:18:59.267 回答