ubuntu 安装Gstreamer 并拉webrtc流

1 安装gstreamer

gstreamer的编译较麻烦,要安装gstreamer的源码包和插件包
网上有的方法直接使用apt包安装,但是安装的版本比较低是1.14 后面编译webrtc插件时要求gstreamer要求>1.19 所以使用源码编译的方式

1.1 编译gstreamer和插件

参考链接
gstreamer源码编译参考 !!!
glib编译升级链接
编译ffmpeg在编译源码包之前

编译完gstreamer后
在这里插入图片描述

1.2 编译gstreamer-example

2 简便安装与使用gstreamer

2.1安装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

安装参考:安装参考链接

2.2 显示v4l2摄像头

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! jpegdec ! videoconvert ! xvimagesink

显示参考链接

------- 先查看摄像头的配置信息

v4l2-ctl --list-formats-ext -d /dev/video0 

!!! 一定要满足摄像头的格式、帧率和分辨率

------ YUYV USB摄像头

gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=(string)YUY2, width=640, height=480, framerate=30/1" ! videoconvert ! autovideosink

------- mjpg USB摄像头

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1920,height=1080,framerate=60/1 ! jpegparse ! jpegdec ! videoconvert ! autovideosink

// jpeg 的格式为压缩过的图像编码,需要解码成YUYV或nv12

------- 自适应 USB摄像头

gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink

2.3 使用gstreamer推送rtmp流

gst-launch-1.0 -v v4l2src device=/dev/video4 ! video/x-raw, format=YUY2, width=640, height=480, framerate=30/1 ! videoconvert ! x264enc tune=zerolatency ! flvmux streamable=true ! rtmpsink location='rtmp://127.0.0.1:1935/live/livestream'

format = YUY2表示v4l2摄像头的输出数据格式,一般为 YUY2(未压缩的年YUYV图像帧)或mjpeg(视频编码)。因此要推rtmp需要转码或编码为h264。推rtmp到srs参考

----- 使用GPU进行推流

2.4 使用gstreamer webrtc-bin推送webrtc流

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GStreamer中,可以使用`rtph264pay`元素将H.264视频封装为RTP协议,同时可以使用`rtph264depay`元素将RTP协议解析为H.264视频。在WebRTC中,需要将SPS和PPS信息插入到关键帧(I帧)之前,以便服务器正确解析视频。 以下是使用GStreamerWebRTC中插入SPS和PPS信息的示例命令: ``` gst-launch-1.0 -v \ webrtcbin name=sendrecv \ ! videoconvert \ ! x264enc \ ! rtph264pay \ ! application/x-rtp,media=video,encoding-name=H264,payload=96 \ ! sendrecv. \ v4l2src device=/dev/video0 \ ! video/x-raw,width=640,height=480 \ ! videoconvert \ ! x264enc \ ! rtph264pay \ ! application/x-rtp,media=video,encoding-name=H264,payload=97 \ ! sendrecv. \ audiotestsrc \ ! opusenc \ ! rtpopuspay \ ! application/x-rtp,media=audio,encoding-name=OPUS,payload=98 \ ! sendrecv. ``` 在这个例子中,使用`x264enc`将原始的H.264视频编码为带有SPS和PPS信息的视频,并使用`rtph264pay`将其封装为RTP协议,同时指定参数`pt=96`,表示这是视频。然后将其连接到`webrtcbin`元素中的`sendrecv`端口,这个端口用于WebRTC。同样的,对于音频,可以使用`opusenc`将原始音频编码为OPUS格式,并使用`rtpopuspay`将其封装为RTP协议。 需要注意的是,在关键帧(I帧)之前,需要将SPS和PPS信息插入到视频中。可以通过设置`x264enc`元素的`key-int-max`参数,控制关键帧(I帧)的间隔。例如,设置`key-int-max=30`表示在每30帧之内,一定会插入一个关键帧(I帧),这样就可以保证SPS和PPS信息在关键帧之前发送。 ``` x264enc key-int-max=30 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值