欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

ZLMediaKit教程(五)支持webrtc

ZLMediaKit 迷途小书童 3年前 (2021-10-27) 3990次浏览 3个评论

环境

  • ubuntu 18.04 64bit
  • ZLMediaKit 20210924
  • ffmpeg 3.4.8

webrtc是什么

WebRTCWeb Real Time Communication 的缩写,也被称为网络实时通信,是由 Google 和其他一些大公司推动的一个开源项目,它通过 Javascript API 来实现无插件的实时通信。WebRTC 促进了浏览器到浏览器的语音呼叫、视频聊天和文件共享应用的大力发展。目前大多数浏览器已经支持了 webRTC

下图是 WebRTC 的架构图

zlmediakit webrtc

  • 最上层的 web app,是 Web 开发者自己开发的程序,主要利用的是 javascriptweb api
  • web apiWebRTC 标准的 API (javascript 版),由 w3c 来维护
  • 媒体层,这里就笼统来讲,它是 WebRTC 的底层核心部分,包括了音频和视频数据的采集、编码、传输,除此之外,还有会话的管理、点对点的链接等,采用的 C++ 语言编写

实践

安装 opensslubuntu 18.04 对应的 openssl 版本是 1.1.1

sudo apt-get install libssl-dev

如果你的操作系统版本比较老的话,也可以从源码开始安装 openssl,命令如下

git clone https://github.com/openssl/openssl.git
cd openssl
./config
make 
sudo make install

然后是安装 libsrtp,即 Secure Realtime Transport Protocol,方法还是熟悉的老三样 configuremakemake install

git clone https://github.com/cisco/libsrtp.git
cd libsrtp
./configure --enable-openssl
make
sudo make install

最后来编译 ZLMediaKit

cd ZLMediaKit
mkdir build
cd build

# 加入webrtc的编译选项
cmake .. -DENABLE_WEBRTC=on
make

cmake 的时候注意看看输出信息,确保 webrtc 功能已开启

zlmediakit webrtc

编译成功后,生成的可执行文件在 release/linux/MediaServer

接下来,就可以启动服务了

sudo ./MediaServer -d

然后,使用 ffmpeg 推送一个本地视频文件到服务器

ffmpeg -re -i test.mp4 -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test

完成后,我们打开 chrome 浏览器,输入 http://192.168.1.140,这个 ip 地址是 MediaServer 服务器的地址

zlmediakit webrtc

选择 6 webrtc,这里我们没有证书,所以忽略掉 https 的警告

zlmediakit webrtc

设置下分辨率,点击开始,上方的播放器就开始播放推送的视频了

zlmediakit webrtc

zlmediakit webrtc

关联阅读

  1. ZLMediaKit教程(一)编译安装
  2. ZLMediaKit教程(二)主程序和配置文件
  3. ZLMediaKit教程(三)URL规则
  4. ZLMediaKit教程(四)HTTP API
喜欢 (0)

您必须 登录 才能发表评论!

(3)个小伙伴在吐槽
  1. 楼主推这个流的时候播放不卡吗?测试中直接用ffmpeg推流,webrtc播放时候10s才能有一帧数据,后来,看了github issue,才知道webrtc不支持B帧,所以ffmpeg要过滤B帧,命令修改如下:ffmpeg -re -i test.mp4 -vcodec h264 -bf 0 -acodec aac -f flv rtmp://127.0.0.1/live/test。参考 https://github.com/ZLMediaKit/ZLMediaKit/issues/1277
    匿名2022-02-10 08:54
  2. 楼主推这个流的时候播放不卡吗?测试中直接用ffmpeg推流,webrtc播放时候10s才能有一帧数据,后来,看了github issue,才知道webrtc不支持B帧,所以ffmpeg要过滤B帧,命令修改如下:ffmpeg -re -i test.mp4 -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test
    匿名2022-02-10 08:53