linux FFMPEG 摄像头采集数据推流
环境vmware14 Ubuntu14
1)搭建推流服务器Nginx-rtmp(主要参考:https://www.cnblogs.com/cocoajin/p/4353767.html)
下载源码
mkdir /home/ffmpeg
cd /home/ffmpeg
wget http://nginx.org/download/nginx-1.7.5.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
解压两个源码包
cd nginx-1.7.5
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
make
make install
wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
chmod +x /etc/init.d/nginx
update-rc.d nginx defaults
推流:ffmpeg -re -i /home/ffmpe
配置 nginx-rtmp 服务器
打开 /usr/local/nginx/conf/nginx.conf
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
exec ffmpeg -i rtmp://localhost/live/$name -threads 1 -c:v libx264 -profile:v baseline -b:v 350K -s 640x360 -f flv -c:a aac -ac 1 -strict -2 -b:a 56k rtmp://localhost/live360p/$name;
}
application live360p {
live on;
record off;
}
}
}
到这里服务器安装成功
2)安装ffmpeg
下载源码
wget http://ffmpeg.org/releases/ffmpeg-3.4.4.tar.bz2
关于这个的安装教程很多暂且略过
安装VLC media player
在虚拟机准备一个MP4文件然后进行推流
推流命令:ffmpeg -re -i /home/ffmpeg/test1.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/test1"
后面尝试外接摄像头进行推流,发现ffmpeg一些功能还未编译进去,在虚拟机启用v4l2的时候报错误
重新配置编译
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-shared --enable-nonfree --enable-libx264 --enable-libxcb --enable-libv4l2
使能libx264 libv4l2等功能,
在执行上面这个配置命令可能会报not found x264 v4l2等错误
(具体可参考https://blog.csdn.net/fgf00/article/details/78203399?locationNum=5&fps=1)
apt-get install libx264-dev
apt-get install libv4l-dev
即可解决
make
make install
到安装目录下执行推流命令
./ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -f flv rtmp://127.0.0.1:1935/live/live (通过拉流发现画面非常卡顿,应该是参数配置问题)
在执行的时候可能会报未找到某一个库
ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file:
为 Ffmpeg 加入环境变量
vi /etc/profile
加入以下内容:
export PATH="/usr/local/ffmpeg/bin:$PATH"
然后保存并运行source /etc/profile
我又陆续增加如下几个参数,感觉效果不大,后面再研究这些参数含义
./ffmpeg -f video4linux2 -r 12 -s 640x480 -i /dev/video0 -f flv rtmp://127.0.0.1:1935/live/live
./ffmpeg -f video4linux2 -r 12 -s 640x480 -i /dev/video0 -vcodec libx264 -f flv rtmp://127.0.0.1:1935/live/live
(ffmpeg -f video4linux2 -qscale 10 -r 12 -s 640x480 -i /dev/video0 -f alsa -i hw:1 -ab 16 -ar 22050 -ac 1 -f mp3 -f flv rtmp://127.0.0.1/rtmpsvr/rtmp1)这个命令是在 http://www.cnblogs.com/lidabo/p/7099546.html 这个博客找到的,应该是可以实现的,可能缺少某些功能未编译进去
打开vlc(可以下载windows也可以在虚拟机下载vlc)
输入地址进行拉流,如果在windwos就使用虚拟机ip地址
拉流:rtmp://127.0.0.1:1935/live/test1
附上常用命令
ffmpeg常用命令
-f 强迫采用格式fmt
-i filename 输入文件
-s size 设置帧大小 默认是160x128
-r 设置帧频,默认25 (待验证,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)
-qscale:v n(q:v n) n表示视频质量级别1-31(待验证值越小,质量越好)
-ab bitrate设置音频码率
-ar freq 设置音频采样率
-ac channels设置通道,默认为1
-vd device 设置视频捕获设备 eg:/dev/video0
-av device 设置音频设备 eg:/dev/dsp
-vcodec
上一篇: ffmpeg--yuv数据采集
下一篇: js数组、对象解构,对象解构赋值
推荐阅读
-
Android 音视频深入 十六 FFmpeg 推流手机摄像头,实现直播 (附源码下载)
-
在Android上使用FFmpeg将摄像头采集的YUV裸流编码为h264。
-
Android采集摄像头的视频流数据并使用MediaCodec编码为H264格式
-
OpenCv + ffmpeg + rtmp 实现摄像头采集数据直播功能
-
ffmpeg windows从内置摄像头采集数据写成yuv文件(最简单的)
-
FFMPEG对摄像头进行RTP推流,以及RTP转发服务
-
ffmpeg 采集摄像头yuv数据
-
ffmpeg实现屏幕录制、摄像头录制、录音和RTMP推流
-
关于FFMPEG采集摄像头推流方法说明
-
ffmpeg 读取摄像头并通过rtmp推流同时在本地显示(新版ffmpeg接口+SDL2)