有一个视频,实际上是一个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的建议(下面),我试图在所有的-copyts转换过程中包括“ts>mp4>ts”标志。也尝试了"-copytb“标志的所有3个选项- 1,0,和1。然而,结果仍然一样-玩家不播放新的TS块的HLS TS序列(m3u8)。
在M3U8列表中替换TS后添加“#EXT-X-间断”标记,并不能解决这种情况。
如果没有“#EXT-X-间断”标记,player会给出错误:
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-间断”标记下,player给出了错误:
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文件(旧的和新的)都有视频和音频流。
看来还得做点别的。我认为解决方案将类似于广告插入。
发布于 2019-07-26 15:05:53
您还需要匹配时间戳。当转换为mp4时,您将丢失时间戳数据。您必须将其保留为ts,并使用-copy ts。即使这样,您也可能会丢失连续性计数器,并且需要在m3u8中放置不连续标记。你想做的事情没有得到真正的支持,而且很难得到仪式的认可。我在工作中做了一些类似的事情,但我们不得不编写定制的软件来实现无缝过渡。
https://stackoverflow.com/questions/57222423
复制相似问题