Android 如何循环MPEG TS流

Android 如何循环MPEG TS流,android,ffmpeg,stream,mpeg,mpeg2-ts,Android,Ffmpeg,Stream,Mpeg,Mpeg2 Ts,我正在寻找一种将TS文件作为无限循环http流传输的方法。我已经尝试连接文件,但这会导致播放损坏 我有读取TS数据包头的基本代码,但我不确定数据包与底层视频流的关系。帧是否与数据包对齐(因此我可以通过重复正确的数据包来循环数据包),或者我是否必须完全解复用/重新复用原始TS流才能工作 承载http流的服务将在其中一个基于Amlogic S802的Android机顶盒上运行,是否可以通过Java通过Android版本的ffmpeg传输这些数据,或者任何解决方案都必须是纯Java的?TS文件包含时间

我正在寻找一种将TS文件作为无限循环http流传输的方法。我已经尝试连接文件,但这会导致播放损坏

我有读取TS数据包头的基本代码,但我不确定数据包与底层视频流的关系。帧是否与数据包对齐(因此我可以通过重复正确的数据包来循环数据包),或者我是否必须完全解复用/重新复用原始TS流才能工作


承载http流的服务将在其中一个基于Amlogic S802的Android机顶盒上运行,是否可以通过Java通过Android版本的ffmpeg传输这些数据,或者任何解决方案都必须是纯Java的?

TS文件包含时间戳(PTS和DTS),有些播放器确实依赖于它们,有些则不依赖

例如,如果您从HLS流中获取
.ts
文件并将它们连接起来,它们通常会正常播放,因为时间戳在块中是连续的

在您的情况下,您可以尝试使用ffmpeg-

您也可以手动解析TS数据包,但我建议使用
libav
library的解复用器来提取视频和音频数据包


如果你在Android上运行,那么你可以看看Google的开源播放器实现的
TsExtractor
-

我花了一些时间玩ffmpeg生成的HLS序列,但不幸的是它们不会循环,取而代之的是,在接近该序列的结尾时,视频会暂停约1秒钟,然后在该序列的开始处开始。在序列的最后一个循环中(我现在只循环几次),它一直播放到最后。我已经多次尝试将ffmpeg生成的单独ts文件连接起来,以及编辑m3u8以包含相同的文件。如果停止,请确保您将
#EXT-X-ENDLIST
放在最后,否则播放器将需要更多数据不是这样,当我有#EXTM3U#EXT-X-VERSION:3#EXT-X-TARGETDURATION:3#EXT-X-MEDIA-SEQUENCE:8 out0.ts out1.ts out2.ts out0.ts out1.ts out2.ts out0.ts out1.ts out2.ts#EXT-X-ENDLIST它总是在out2.ts和out0.ts之间暂停,我没有意识到您将
.ts
文件放入HLS的循环中。然后尝试将
#EXT-X-不连续性
放在
out0.ts
-