【报错记录】FFmpeg在Ubuntu下推流USB麦克风和PCM音频文件

ffmpeg对新手来说可以说是真的难用,太坑了。网上关于推流麦克风设备的多半是Windows环境下的,而Ubuntu下的少之又少,根本没法用,比如Windows下推麦克风的ffmpeg命令是:

ffmpeg -f dshow -i audio="麦克风 (AUDIO 2.0)" -f flv rtmp://192.168.1.***/mylive/test

其中麦克风 (AUDIO 2.0)是设备管理中麦克风的设备名称,但是换到Ubuntu中就说dshow这个命令找不到,这就让人非常爆炸了。幸好群里有大佬告诉我这个链接,才让我找到解决方案。

https://trac.ffmpeg.org/wiki/Capture/ALSA

调试成功的命令行是:

ffmpeg -f alsa -i default -f flv rtmp://192.168.1.***/mylive/test

在Linux中使用alsa来作为输入格式,-i中我最后使用default获取到了USB麦克风设备,当然这个是不一定的,也有可能是其他设备,比如hw:0之类的,我的反正用default就获取到了。之后的-f是输出格式,这里因为要rtmp推流,因此采用了flv,其他格式我试过,推流都报错失败了。最后是rtmp链接参数,指定rtmp服务器的地址。

 

然后是推送PCM文件,PCM文件的来源是我麦克风通过PyAudio录制到本地的,PCM文件是未经压缩过的音频文件,文件体积非常大,比如我把4.3MB的mp3音频文件转为PCM文件,得到的文件足足有51.4MB!我现在要把PCM推送出去,然后文件就出来了,到底用什么编码器,查了很久的资料才知道ffmpeg命令应该这么写:

ffmpeg -f s16le -ac 2 -ar 44100 -acodec pcm_s16le -i /home/dct/Videos/mp3_441.pcm -f flv rtmp://192.168.1.182/mylive/mp3

 

其中第一个-f是使用什么格式读取,这里是s16le,-ac的值2代表有两条音轨。-ar的值44100表示采样率是44100Hz,也就是一秒内采样44100次。-acodec的值表示用什么编码器,这里是pcm_s16le,pcm_s16le中的16表示采样位数为16,也就是声音的值可以是0~65535。第二个-f是输出格式,这里因为要rtmp推流,因此采用了flv,其他格式我试过,推流都报错失败了。最后是rtmp链接参数,指定rtmp服务器的地址。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值