1. 环境 amd64 ubuntu20.04
2. 安装软件
1) v4l2是内核的usb媒体捕获接口,通过这个命令查看设备号:
v4l2-ctl --list-device
例如:
lyh@frued:~$ v4l2-ctl --list-device
KS12A884: KS12A884 (usb-0000:35:00.4-1):
/dev/video4
/dev/video5
/dev/media2
KS12A884: KS12A884 (usb-0000:35:00.4-2):
/dev/video6
/dev/video7
/dev/media3
2)安装推流工具
安装默认版本的FFmpeg就行:
sudo apt update
sudo apt install ffmpeg
ffmpeg -version
另外一种推流工具Gstreamer(可选)
sudo apt update
sudo apt upgrade
//下载基本的包
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
//查看版本
gst-inspect-1.0 --version
3)安装流媒体服务器srs
下载源码:srs-github
编译srs:
cd trunk
./configure && make
开启srs:
cd /你的srs包下载路径/srs-develop/trunk/
./objs/srs -c conf/srs.conf
查看srs状态:
./etc/init.d/srs status
访问网页:http://localhost:8080/ 查看状态,如果不成功检查端口是否占用
环境安装完毕。
3 操作步骤
1)打开srs服务器
cd /你的srs下载地址/srs-develop/trunk/
//关闭已经开启的srs服务器
./etc/init.d/srs stop
//打开rtmp转rtc流的srs服务器
./objs/srs -c conf/rtmp2rtc.conf
开启这个服务器就可以监听1935端口推过来的rtmp流了
2)推流
查看摄像头的输出格式:
v4l2-ctl -d /dev/video0 --list-formats-ext --all
//video0 是要查看的设备号
----------使用FFmpeg推rtmp流
读取数字摄像头并转成h264编码,(usb摄像头的输出格式一般为mjpeg视频编码,需要转码成h264才能推流) 例如:
ffmpeg -f v4l2 -input_format mjpeg -i /dev/video4 -vcodec libx264 -r 60 -preset ultrafast -tune zerolatency -b:v 3000k -f flv rtmp://127.0.0.1:1935/live/livestream1
// -i /dev/video4 就是设备号
// -r 60 代表推流帧率
// -preset ultrafast -tune zerolatency 代表低延时推送
// -b:v 3000k 代表缓冲区大小,也可以不写,太小容易缓冲区溢出,一般是码率大小
// -f flv 为封装格式,rtmp协议默认封装为flv
----------使用Gstresmer推rtmp流
读取输出格式为YUYV(YUYV为未压缩的原始图像帧,GMSL相机的输出格式一般为YUYV图像帧)摄像头,使用Gstreamer推流:
gst-launch-1.0 -v v4l2src device=/dev/video4 ! video/x-raw, format=YUY2, framerate=30/1 ! videoconvert ! x264enc tune=zerolatency ! flvmux streamable=true ! rtmpsink location='rtmp://127.0.0.1:1935/live/livestream1'
--------直接使用srs网站推送webrtc流
打开 http://localhost:8080/players/rtc_publisher.html
浏览器会访问摄像头并推到目标的地址
!!!但我不知道选择推送那个摄像头的流!!!
--------使用webrtc-streamer这个流媒体框架拉usb数据并直接推送webrtc流
我验证的延时很大,要尝试的话具体可以参考参考
3)播放
--------srs播放器
http://localhost:8080/players/rtc_player.html
播放的url: webrtc://localhost/live/livestream1
url: webrtc://localhost/live/livestream1
//如果推过来的是多个rtmp流:
rtmp://127.0.0.1:1935/live/livestream1
rtmp://127.0.0.1:1935/live/livestream2
rtmp://127.0.0.1:1935/live/livestream3
只需要改变url的推流码即可
------------jswebrtc播放器
源码地址:https://gitee.com/kernelj/jswebrtc (无需编译)
我用的是examples中的player-via-html.html 测试的,把里面的url改成:
webrtc://localhost/live/livestream1
但是播放比srs的要慢。