Python使用FFmpeg对RTSP进行音频拉流并录音

最近有项目需要在树莓派上进行录音,由于树莓派3B自身对麦克风录音支持不足,刚好前阵子破解了小蚁摄像头1080p国际版,其中有一个功能是RTSP服务器,正好利用RTSP的音频流进行拉流并保存录音。

Python使用FFmpeg对RTSP进行音频拉流,应该是最好的选择。因为FFmpeg开源,且对音频的解码支持十分广泛。FFmpeg的协议文档在这里:https://ffmpeg.org/ffmpeg-protocols.html#Examples

使用环境

python版本:python3
PC系统:windows10

具体实现方法如下:

1、小蚁破解后的WEB界面有RTSP地址,如下图:

 

2、Python安装FFmpeg-python模块

pip install ffmpeg-python

3、下载win10可用的FFmpeg:http://ffmpeg.org/  ,并放在脚本相同的目录下,我之前有下载了一个可用,链接:https://pan.baidu.com/s/18qIlvpyP1mpVvzc9kFzz4g ,提取码:egud 

 

4、python代码:

# -*- coding:UTF-8 -*-
import ffmpeg

host = '192.168.50.166/ch0_2.h264'

# 子进程
(
    ffmpeg
        .input('rtsp://' + host, allowed_media_types='audio', rtsp_transport='tcp')['a']  
# allowed_media_types='audio' 只读取音频流
        .filter('volume', 5)  # 音量大小控制
        .output('saved_audio.aac', ac=1, ar='16k')  # ac是声道,ar是采样率
        .overwrite_output()
        .run(capture_stdout=True)
)
 
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ffmpeg 是一个强大的音视频处理工具,它可以用来进行各种音视频格式的编解码、转码、剪辑等操作。下面是基于 C++ 使用 ffmpeg 进行 RTSP 拉流和推程: 1. 引入 ffmpeg 库:首先需要在项目中引入 ffmpeg 库,可以使用静态库或者动态库,具体方法不再赘述。 2. 初始化 ffmpeg:在使用 ffmpeg 前,需要初始化 ffmpeg,这可以通过调用 av_register_all() 函数实现。 3. 创建 AVFormatContext:创建一个 AVFormatContext 对象,用于存储音视频的相关信息,包括音视频编码格式、的时间基等信息。可以通过调用 avformat_alloc_context() 函数来创建。 4. 打开 RTSP :调用 avformat_open_input() 函数打开 RTSP ,传入 RTSP 地址、AVFormatContext 对象等参数,函数会自动解析出音视频的信息并存储到 AVFormatContext 对象中。 5. 查找音视频:通过调用 avformat_find_stream_info() 函数,可以查找音视频的索引,该函数会自动解析音视频的信息,并将音视频的索引存储到 AVFormatContext 对象中。 6. 获取音视频的信息:可以通过遍历 AVFormatContext 对象的 streams 属性,获取每个音视频的详细信息,包括编码格式、分辨率、码率等等。 7. 打开音视频解码器:对于每个音视频,需要打开相应的解码器,可以通过调用 avcodec_find_decoder() 函数查找对应的解码器,然后调用 avcodec_open2() 函数打开解码器。 8. 创建 AVFrame 和 AVPacket:解码音视频帧需要使用 AVFrame 和 AVPacket 对象,可以通过调用 av_frame_alloc() 和 av_packet_alloc() 函数创建。 9. 读取音视频帧:通过调用 av_read_frame() 函数读取音视频帧,该函数会返回一个 AVPacket 对象,包含了音视频帧的数据和相关信息。 10. 解码音视频帧:根据 AVPacket 对象中的信息,可以调用对应的解码器进行解码,解码后的结果存储在 AVFrame 对象中。 11. 处理音视频帧:可以对解码后的音视频帧进行各种处理,比如转换格式、合并音视频等。 12. 推:可以使用 avformat_new_stream() 函数创建一个新的音视频,并设置相应的参数,然后使用 avio_open() 函数打开一个输出,最后调用 avformat_write_header() 函数开始推。 13. 写入音视频帧:对于每一帧音视频数据,可以调用 av_interleaved_write_frame() 函数写入输出中,该函数会自动进行封装和编码。 14. 关闭和解码器:最后记得关闭输入、输出和解码器,释放相应的资源。 以上是基于 C++ 使用 ffmpeg 进行 RTSP 拉流和推的大致程,具体实现还需要根据具体的需求和情况进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值