音频格式转换
ffmpeg.exe -i C:\Users\Even\base\assets\voiced_005.wav -ar 8000 -ac 1 -f s16le start_record.pcm
如上命令中,voiced_005.wav是原文件,该文件的参数如下:
- 采样率:16000
- 位深:32位
- 声道数:2
在公司的音视频项目中,播放声音的播放器使用的参数如下:
- 采样率:8000
- 位深:16位
- 声道数:1
所以需要把音频文件转换为我们需要的参数,而且我们需要的是pcm。
- -ar 8000,把采样率转换为8000
- -ac 1,把声道转换为单声道
- -f s16le,把位深转换为16位
这里没有指定保存的pcm文件的路径,则以当前路径保存。命令中的wav文件也可以替换为mp3等其他格式的文件,目标文件也可以是pcm的其他格式的文件。
mp3转pcm
ffmpeg.exe -i E:\嗨格式录音文件\start.mp3 -channels 1 -sample_rate 48000 -c:a pcm_s16le -f s16le E:\嗨格式录音文件\48000.pcm
接收AAC推流并播放
当前使用的是最新版本,为8月16日编译的版本,如下:
C:\Users\daizh>ffmpeg -version
ffmpeg version N-120750-g30e6956920-20250816 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 15.1.0 (crosstool-NG 1.27.0.79_8f49ec5)
把ffmpeg当服务器,然后在手机端实时推aac过来,ffmpeg接收并播放:
ffplay -f aac -ar 44100 -ch_layout stereo udp://@0.0.0.0:1234
-f aac
强制指定输入数据的格式为 AAC 音频流。UDP 传输的原始 AAC 数据无容器封装(如 MP4/FLV),需明确告知 ffplay 按 AAC 裸流解析,否则可能因无法自动识别格式而报错。-ar 44100
设置音频采样率为 44.1kHz。-ch_layout stereo
指定音频声道布局为 立体声(双声道),如果是单声道,用-ch_layout mono
。udp://@0.0.0.0:1234
定义输入源为 UDP 网络流,@0.0.0.0
监听所有网络接口(适用于多网卡环境),1234
为UDP 端口号。
刚刚试了播放本地文件,指定参数也行,不指定也行,因为aac文件里面有adts头包含了音频的各种信息,所以可以简单的命令行如下:
ffplay -f aac hello.aac
甚至这样也能播:
ffplay hello.aac
所以对于播放网络流,如果aac的网络流包含有adts头信息,也可以简化为:
ffplay -f aac udp://@0.0.0.0:1234
接收H264推流并播放
ffplay -f h264 -fflags nobuffer -max_delay 100000 udp://@0.0.0.0:1234
-f h264
强制指定输入数据为 H.264 裸流(无容器封装),H.264 裸流无文件头信息(如 MP4 的 moov盒),需显式声明格式,否则 ffplay无法自动识别。-fflags nobuffer
禁用输入缓冲区,显著降低延迟(从 500ms 降至 100ms 内)。适用于实时监控、视频通话等对延迟敏感的场景。-max_delay 100000
设置最大解封装延迟为 100 毫秒(单位:微秒)。避免因网络抖动导致卡顿,超出延迟阈值的数据包会被丢弃,确保实时性。udp://@0.0.0.0:1234
监听所有网卡(0.0.0.0)的 UDP 端口 1234,接收 H.264 数据。
播放本地H264文件:
ffplay -f h264 test.h264