日常开发中会用到FFmpeg进行编解码和视频呈现、视频推流,现将平时工作中用到的几个命令做一下记录,以备不时之需:

1.选定网卡,接受组播

// 【命令行】指定本地ip为192.168.70.61的网卡用来接收数据
ffmpeg -localaddr 192.168.70.61

// 【代码】方法如下
av_dict_set(&opts, "localaddr", "192.168.70.61", 0);
多网卡下接收udp组播,往往会接收失败,因为用错了网卡,例如电脑有:有线网、wifi
在window下可以这样:

route add 226.0.1.101 mask 255.255.255.255 192.168.70.61
即接收udp://226.0.1.101这路流,使用70网段192.168.70.61是本机70网段的IP

2.使用ffmpeg进行本地视频的rtmp推流 

// 使用ffmpeg将本地mp4文件推流到搭建的ZLM流媒体服务器上
./ffmpeg.exe -re -i E:/test.mp4 -c:v copy -c:a copy -f flv rtmp://127.0.0.1/live/video/123456

// 指定视频格式为libx264
./ffmpeg.exe -re -i E:/test.mp4 -c:v libx264 -c:a copy -bf 0 -f flv rtmp://127.0.0.1/live/video/123456

3.使用ffmpeg进行udp组播视频裸码的rtmp推流 

// -localaddr 指定网卡
// -bf 0 去掉B帧
// -s 640x480 指定分辨率
// -r 20 指定帧率
// -b:v 2000k 指定码率
// -preset ultrafast -tune film 指定整体解码速度
// -bufsize 10M 指定缓冲区大小
// -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 加入静音音频
./ffmpeg.exe -localaddr 192.168.70.61 -i udp://226.0.1.101:8000 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -c:v libx264 -c:a aac -bf 0 -s 640x480 -r 20 -b:v 2000k -preset ultrafast -tune film -bufsize 10M  -f flv rtmp://127.0.0.1/live/video/123456

4.使用ffmpeg进行本地摄像头图像的udp推流 

// 直推本地摄像头到ZLM流媒体服务器
./ffmpeg.exe -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f h264 -max_delay 1 -g 5 -b 7000000 udp://127.0.0.1:6666

 5.使用ffplay进行rtsp流的播放测试

// ffplay播放rtsp流命令
ffplay -i -rtsp_transport tcp rtsp://222.209.92.239:5545/live/O_j30EGIg
02-02 14:32