我正在寻找一种将TS文件作为无限循环的http流传输的方法。我试过连接文件,但这会导致播放损坏。
我有读取TS数据包标头的基本代码,但我不确定数据包与底层视频流的关系。帧是否与数据包对齐(因此我可以通过重复正确的数据包来循环它)或者我是否必须完全解复用/重新复用原始TS流才能使其工作?
托管http流的服务将在其中一个基于Amlogic S802的Android STB上运行,是否可以通过Java通过Android版本的ffmpeg管道这些数据,或者任何解决方案都必须是纯粹的Java?< / p>
答案 0 :(得分:2)
TS文件包含时间戳(PTS和DTS),某些播放器确实依赖于它们,有些则不依赖它们。
例如,如果您从HLS流中获取.ts
个文件并将它们连接起来,它们通常会正常播放,因为时间戳在块中是连续的。
在您的情况下,您可以尝试使用连接格式或在ffmpeg中过滤 - https://trac.ffmpeg.org/wiki/Concatenate
您也可以手动解析TS数据包,但我建议使用libav
库的解复用器来提取视频和音频数据包。
如果您在Android上运行,那么您可以查看Google的TsExtractor
- https://github.com/google/ExoPlayer/blob/master/library/src/main/java/com/google/android/exoplayer/hls/parser/TsExtractor.java