如何在Exoplayer中顺序播放视频块

时间:2016-05-30 13:45:58

标签: android video video-streaming exoplayer

我正在尝试开发一款Android应用,用于读取来自服务器或其他拥有该视频的同行的视频。对于这个用例,我必须将我的视频分成更小的片段以优化传输时间,每个片段可以由中央服务器或另一个对等体提供。

我想知道exoplayer是否能够不间断地读取一系列视频片段? 我可以自由地在分裂过程中做任何我想做的事,例如使用linux命令split拆分视频。

1 个答案:

答案 0 :(得分:1)

大多数自适应比特率流格式的工作方式类似于您的描述 - 它们将视频分成多个块,视频播放器一次请求一个。自适应速率流传输协议的示例是HLS,MPEG-DASH,SmoothStreaming。

如果符合您的需要,可以将视频路径的下一个“块”的网址发送到“中央”服务器,该服务器可以将请求代理到另一个“对等方”。

值得注意的是,许多视频都是通过CDN传送的,这可能会影响您想要的方法(或者实际上可能会匹配您想要的内容,具体取决于您的基本要求),因此您可能也想检查一下。

<强>更新

假设您的意思是某些块将来自服务器以及来自网络上对等设备的一些块,那么上述服务器代理方法将无效。

您可以这样做的一种方法是将所有块从任何来源传递到设备最适合每个块,然后根据需要将它们放在一起,并将结果从“localhost”流式传输到您的设备上设备到播放器。

这听起来像是一个巨大的开销和一些永远不会工作的东西,但我相信它实际上是一种应用程序中使用的技术,从一种流式格式转换为另一种格式(不能提供示例 - 抱歉......)。

Android上可能有用的'localhost'服务器的一个示例是:

另一种方法是,如果您要在设备上的网页中使用HTML5,则可以使用媒体源扩展机制从不同来源加载视频块,然后再将其传递给播放器。这确实需要Chrome,而不是标准的Android浏览器,因为后者在撰写本文时不支持MSE扩展。

在所有这些方法中,您显然需要确保提前加载以保持视频管道和缓冲区已满,以避免暂停。