【问题标题】:How to add new video files to HLS?如何将新的视频文件添加到 HLS?
【发布时间】:2022-12-03 14:28:13
【问题描述】:

我在直播使用 HLS 不断更新的视频文件时遇到问题。

客户端通过POST方式录制的视频文件被发送到服务器端。

服务器将接收到的视频转换为 HLS (.m3u8 .ts)。

您可以使用以下代码转换为 .m3u8 和 .ts。

def to_m3u8(movie_path: Path):
    """
    Convert mp4 to m3u8.
    :param movie_path:
    :return: m3u8 file path
    """
    m3u8_path = movie_path.parent/f"{movie_path.stem}.m3u8"
    command=f"ffmpeg -i {movie_path}" \
              f"-c copy -map 0" \
              f" -f segment -segment_time_delta 0 " \
              f"-segment_list_type hls" \
              f"-mov flags +faststart" \
              f"-preset veryfast" \
              f"-hls_playlist_type event" \
              f"-segment_list_size 0" \
              f"-segment_list {m3u8_path}" \
              f"-segment_format mpegts" \
              f "{movie_path.parent}/segment_%03d.ts"

    logger.info(f"command: {command}")
    subprocess.run(command, shell=True)
    return m3u8_path

每次收到 POST 数据时,我都可以看到 .m3u8 .ts 文件被覆盖。

但是当我在 VLC 中打开 .m3u8 时,它会播放几秒钟的视频然后停止。

如何随时读取新添加的文件?

可以通过更改 FFmpege 选项来处理吗?

【问题讨论】:

    标签: python ffmpeg http-live-streaming


    【解决方案1】:

    为确保 HLS 流不断更新,您可以在用于创建 HLS 流的 ffmpeg 命令中使用 -hls_flags append_list 选项。此选项将确保 HLS 播放列表在添加新片段时不断更新,以便流始终是最新的。

    以下是如何在 ffmpeg 命令中使用此选项的示例:

    command = f"ffmpeg -i {movie_path}" 
              f"-c copy -map 0" 
              f"-f segment -segment_time_delta 0 " 
              f"-segment_list_type hls" 
              f"-mov flags +faststart" 
              f"-preset veryfast" 
              f"-hls_playlist_type event" 
              f"-hls_flags append_list" 
              f"-segment_list_size 0" 
              f"-segment_list {m3u8_path}" 
              f"-segment_format mpegts" 
              f"{movie_path.parent}/segment_%03d.ts"
    

    您还可以使用 -hls_list_size 选项来控制在任何给定时间 HLS 播放列表中包含多少片段。如果您想限制播放列表的大小以防止它变得太大,这会很有用。例如,您可以使用 -hls_list_size 10 选项来确保播放列表中只包含最近的 10 个片段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2021-04-04
      相关资源
      最近更新 更多