gpt4 book ai didi

linux - 将经过处理的视频从 OpenCV 传递到 FFmpeg 以进行 HLS 流式传输 (Raspberry PI)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:38 24 4
gpt4 key购买 nike

您好,我有一个问题,我在 Raspberry Pi 上安装了 openCV 和 ffmpeg,我正在尝试从 raspberry pi 流式传输实时视频。目前我将 openCV 的输出保存为 .avi 文件,我有一个 ffmpeg 命令ffmpeg -i out.avi -hls_segment_filename '%03d.ts' stream.m3u8此命令采用输出创建播放列表 (.m3u8) 和片段 (.ts)。

目前我有用 C++ 编写的 openCV(这不能更改)我有一个由此编写的可执行文件,我在 Bash 脚本中同时拥有可执行 C++ 和上述 ffmpeg。

#!/bin/bash

while true; do
./OpenCV
ffmpeg -i out.avi -hls_segment_filename '%03d.ts' stream.m3u8
done

这确实允许我流式传输处理过的 openCV 视频 我的问题是因为 Bash 脚本处于 while 循环中,它不断重置播放列表和 .ts 文件,所以我必须不断地在客户端连接上按下播放。

有什么办法吗?

我尝试包含一个会递增每个循环的变量,但如果我用它替换“%03d”,我会收到错误消息。

最佳答案

如果你坚持使用你的程序(OpenCV)和ffmpeg在循环中,您可以为 stream.m3u8 指定初始 hls 序列号使用 start_number .像这样:

... as before ...
ffmpeg -i out.avi -hls_segment_filename '%03d.ts' --start_number $I stream.m3u8

哪里I是每次循环运行时都必须递增的变量。但这种方法非常脆弱,可能会导致不正确的流,因为它假定 ffmpeg 只会生成一个片段,但实际上它可能会生成多个片段。

更好的方法是运行 OpenCVffmpeg并行并让他们互相交谈。这样就不需要写入临时文件 out.avi然后运行 ​​OpenCVffmpeg在序列中并保持媒体序列同步。

我认为你可以像这样破解它。请注意,您可能需要更改 OpenCV以便它不断写入 out.avi一段时间后不返回:

./OpenCV &
tail -n +0 -f out.avi | ffmpeg -i pipe:0 -hls_segment_filename '%03d.ts' stream.m3u8

更好的方法是将程序更改为写入标准输出或命名管道并像这样运行它:

./OpenCV | ffmpeg -i pipe:0 -hls_segment_filename '%03d.ts' stream.m3u8

关于linux - 将经过处理的视频从 OpenCV 传递到 FFmpeg 以进行 HLS 流式传输 (Raspberry PI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34978351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com