有一个视频,实际上是一个HLS流(TS文件序列) 我想取出一个TS块并将其替换为另一个。 另一个块将使用相同的FFMPEG编码设置进行编码。
如果您想知道为什么我需要这个: 有五个小时的HLS流。 TS之一的视频标题错误。我需要更改TS,而无需重新编码整个HLS流。
当前我尝试过:
但是它不起作用,播放器显示正在加载图标。 (在网络控制台中,我看到此新TS已正常加载,状态为200)
一旦我用原始TS替换了新的TS,播放器就会正常播放。
两个TS文件均以I帧开头,并且都具有音频。 P和B帧的顺序只有一点差异。
old new
I I
P P
B B
B B
P P
B B
B B
B B
P P
B B
B P
B B
P B
P B
B P
如何使新的TS块按原始TS序列工作?
更新:
根据szatmary的建议(下),我尝试在所有ts> mp4> ts转换过程中包括“ -copyts”标志。还尝试了带有所有三个选项-1、0和1的“ -copytb”标志。但是结果仍然相同-播放器无法使用新的TS块播放HLS TS序列(m3u8)。
在M3U8列表中替换TS之后添加“#EXT-X-DISCONTINUITY”标签,无法解决这种情况。
没有“#EXT-X-DISCONTINUITY”标记,播放器会给出错误:
VIDEOJS: ERROR: (CODE:4 MEDIA_ERR_SRC_NOT_SUPPORTED) There appears to be a playback issue.
code: 4
message: "There appears to be a playback issue."
__proto__:
MEDIA_ERR_ABORTED: 1
MEDIA_ERR_CUSTOM: 0
MEDIA_ERR_DECODE: 3
MEDIA_ERR_ENCRYPTED: 5
MEDIA_ERR_NETWORK: 2
MEDIA_ERR_SRC_NOT_SUPPORTED: 4
code: 0
message: ""
status: null
使用“#EXT-X-DISCONTINUITY”标签,播放器给出错误:
VIDEOJS: ERROR: (CODE:3 MEDIA_ERR_DECODE) There appears to be a playback issue.
code: 3
message: "error"
__proto__:
MEDIA_ERR_ABORTED: 1
MEDIA_ERR_CUSTOM: 0
MEDIA_ERR_DECODE: 3
MEDIA_ERR_ENCRYPTED: 5
MEDIA_ERR_NETWORK: 2
MEDIA_ERR_SRC_NOT_SUPPORTED: 4
code: 0
message: ""
status: null
TS文件(旧文件和新文件)都具有视频和音频流。
看起来应该执行其他操作。我认为解决方案将类似于广告插入。
答案 0 :(得分:0)
您还需要匹配时间戳。转换为mp4时,您将丢失时间戳数据。您必须将其保留为ts并使用-copy ts。即使这样,您也可能会丢失连续性计数器,并且需要在m3u8中放置不连续标签。您尝试做的事情并没有得到真正的支持,而且很难得到认可。我在工作中做过类似的事情,但是我们必须编写自定义软件才能使过渡无缝。