首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法只用ffmpeg将RTSP音频流传输到stdout?

有没有办法只用ffmpeg将RTSP音频流传输到stdout?
EN

Stack Overflow用户
提问于 2021-10-29 08:57:14
回答 1查看 186关注 0票数 1

我有一个网络摄像头,可以通过rtsp传输视频/音频。我想做一个小程序,只检测音频流,并进行房间响度检测。

我的计划是使用ffmpeg将音频流仅作为整数/浮点流获取到标准输出。这样我就可以在Python中读取流,或者作为回调,分析和分解。

我找到了一个例子:

ffmpeg -i rtsp://some_url -c:a aac -c:v copy -hls_list_size 65535 -hls_time 2 "./live.m3u8"

但这会将整个视频写入文件。有什么建议可以改变这一点吗?

我也对任何其他语言的解决方案/包持开放态度,我可以这样做

代码语言:javascript
复制
connection = RTSP('rtsp://url')
signal_array = connection.read_audio_frame()

敬请指教

EN

回答 1

Stack Overflow用户

发布于 2021-10-29 09:12:31

通过添加pipe:,可以使ffmpeg输出到标准输出。根据文档:

可接受的语法为:

管道:编号

number是与管道的文件描述符相对应的编号(例如,0代表stdin,1代表stdout,2代表stderr)。如果未指定number,则默认情况下将使用stdout文件描述符进行写入,使用stdin进行读取。

http://ffmpeg.org/ffmpeg-all.html#pipe

就我个人而言,我会将其与命名管道(FIFO)结合使用:

代码语言:javascript
复制
mkfifo /tmp/videofifo
ffmpeg -i myfile.mp4 -f avi pipe: > /tmp/videofifo
代码语言:javascript
复制
with open("/tmp/videofifo", "rb") as f:
    ...

当然,对于您的用例,您可以使用ffmpeg命令,并以"r"而不是"rb"模式打开先进先出。

与直接捕获标准输出相比,使用先进先出的优势可能微乎其微(在您的情况下(ascii数据行)),但在二进制数据的情况下似乎更清晰。在任何情况下,我更喜欢将数据与我如何获得的数据分开。如果只想直接处理标准输出,请使用p = subprocess.Popen(cmd, stdout=subprocess.PIPE),然后使用p.stdout,它是一个类似文件的对象。

毫无疑问,在Go中有相同的方式启动子进程,但让我感到遗憾的是,我现在根本不知道Go。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69766148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档