欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux FFMPEG 摄像头采集数据推流

程序员文章站 2022-03-04 23:41:11
...

环境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