我正在寻找一种方法来流式传输一个TS文件作为一个无限循环的http流。我尝试只连接文件,但这会导致播放损坏。
我有读取TS包报头的基本代码,但我不确定包与底层视频流的关系。帧是否与数据包对齐(因此我可以通过重复正确的数据包来循环它),或者我是否必须完全解复用/重新复用原始TS流才能工作?
托管http流的服务将在基于逻辑S802的安卓机顶盒上运行,有没有可能通过Java通过安卓版本的ffmpeg来传输这些数据,或者是否有任何解决方案必须是纯Java的?
发布于 2015-02-17 23:29:22
TS文件包含时间戳(PTS和DTS),有些播放器依赖它们,有些则不依赖。
例如,如果您从HLS流中获取.ts文件并将其连接起来,它们通常会正常播放,因为时间戳在块中是连续的。
在您的情况下,您可以尝试在ffmpeg - https://trac.ffmpeg.org/wiki/Concatenate中使用连接格式或过滤器
您也可以手动解析TS数据包,但我建议您使用libav库的解复用器来提取视频和音频数据包。
如果你运行的是安卓系统,那么你可以看看谷歌的开源播放器TsExtractor - https://github.com/google/ExoPlayer/blob/master/library/src/main/java/com/google/android/exoplayer/hls/parser/TsExtractor.java的实现
https://stackoverflow.com/questions/28562894
复制相似问题