我有一个网络摄像头,可以通过rtsp传输视频/音频。我想做一个小程序,只检测音频流,并进行房间响度检测。
我的计划是使用ffmpeg将音频流仅作为整数/浮点流获取到标准输出。这样我就可以在Python中读取流,或者作为回调,分析和分解。
我找到了一个例子:
ffmpeg -i rtsp://some_url -c:a aac -c:v copy -hls_list_size 65535 -hls_time 2 "./live.m3u8"
但这会将整个视频写入文件。有什么建议可以改变这一点吗?
我也对任何其他语言的解决方案/包持开放态度,我可以这样做
connection = RTSP('rtsp://url')
signal_array = connection.read_audio_frame()敬请指教
发布于 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)结合使用:
mkfifo /tmp/videofifo
ffmpeg -i myfile.mp4 -f avi pipe: > /tmp/videofifowith open("/tmp/videofifo", "rb") as f:
...当然,对于您的用例,您可以使用ffmpeg命令,并以"r"而不是"rb"模式打开先进先出。
与直接捕获标准输出相比,使用先进先出的优势可能微乎其微(在您的情况下(ascii数据行)),但在二进制数据的情况下似乎更清晰。在任何情况下,我更喜欢将数据与我如何获得的数据分开。如果只想直接处理标准输出,请使用p = subprocess.Popen(cmd, stdout=subprocess.PIPE),然后使用p.stdout,它是一个类似文件的对象。
毫无疑问,在Go中有相同的方式启动子进程,但让我感到遗憾的是,我现在根本不知道Go。
https://stackoverflow.com/questions/69766148
复制相似问题