【问题标题】:Is it possible using FFMPEG to replace one ".ts" file in a HLS ts file collection with another ".ts" file?是否可以使用 FFMPEG 将 HLS ts 文件集中的一个“.ts”文件替换为另一个“.ts”文件?
【发布时间】:2019-12-04 22:32:45
【问题描述】:

有一个视频,其实是一个HLS流(TS文件的序列) 我想取出一个 TS 块并用另一个替换它。 另一个块将使用相同的 FFMPEG 编码设置进行编码。

如果你想知道我为什么需要这个: 有五个小时的 HLS 流。其中一位 TS 的视频标题错误。我需要在不重新编码整个 HLS 流的情况下更改该 TS。

目前我尝试过:

  1. 获取 TS 并使用 FFMPEG 将其转换为 mp4
  2. 编辑 mp4 视频(更改标题)并另存为新的 mp4
  3. 将新的 mp4 转换为新的 TS(使用 FFMPEG,与用于原始视频的设置相同)
  4. 用新的 TS 替换原来的 TS。

但它不起作用,播放器显示正在加载图标。 (在网络控制台中我看到这个新的 TS 加载正常,状态为 200)

当我用原来的TS替换新的TS后,播放器就可以正常播放了。

两个 TS 文件都以 I-frame 开头,都有音频。 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”标志。还尝试使用所有 3 个选项 -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 文件(旧的和新的)都有视频和音频流。

看起来应该做点别的事情。我认为解决方案类似于广告插入。

【问题讨论】:

    标签: encoding ffmpeg streaming


    【解决方案1】:

    您还需要匹配时间戳。转换为 mp4 时,您将丢失时间戳数据。您必须将其保留为 ts 并使用 -copy ts。即使这样,您也可能会丢失连续性计数器,并且需要在 m3u8 中放置不连续性标签。您正在尝试做的事情并没有得到真正的支持,并且很难获得仪式。我在工作中也做过类似的事情,但我们必须编写自定义软件来实现无缝过渡。

    【讨论】:

    • 谢谢你。我尝试了 -copyts、-copytb -1、-copytb 0、-copytb 1,但它仍然无法播放。在 m3u8 中放置不连续标签是否有任何细节?再次感谢您的快速回复。周末愉快。
    • szatmary,在你的工作中,你使用你的定制软件,你有没有设法让新的 TS 在旧的之间工作?
    • -copyts 仅在您编码的文件具有相同时间戳时才有效。在你的情况下,它听起来不像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2018-08-09
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多