ubuntu20.04使用webrtc协议拉流显示步骤

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的要慢。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值