ubuntu22.10 ffmpeg-webrtc推拉流srs环境搭建

news/2024/8/19 19:17:40

一、编译ffmpeg-webrtc
二、openssl,opus,x264配置
三、编译srs
四、测试
4.1推流端
4.2拉流端
五、交互与sdp

最近看到杨大佬发的动态,尝鲜体验一下。

一、编译ffmpeg-webrtc
ffmpeg-webrtc官网:https://github.com/ossrs/ffmpeg-webrtc
拉取ffmpeg-webrtc代码:

git clone -b feature/rtc-muxer https://github.com/winlinvip/ffmpeg-webrtc.git

这里配置需要openssl,opus,x264见下

./configure --enable-muxer=rtc --enable-openssl --enable-version3 --enable-libx264 --enable-gpl --enable-libopus
make -j10

二、openss,opus,x264配置
配置openssl

sudo apt update
sudo apt install build-essential checkinstall zlib1g-dev
wget https://www.openssl.org/source/openssl-3.0.7.tar.gz
tar -xf openssl-3.0.7.tar.gz
cd openssl-3.0.7
./config --prefix=/usr/ --openssldir=/usr/ shared zlib
make
make test
make install
cd /etc/ld.so.conf.d/
nano openssl-3.0.7.conf

编译ffmpeg-webrtc会报错openss < 3.0其实详细查看日志,发现没有找到openssl,这样配置官方的ffmpeg就已经能找到了,这里需要特别配置一下:
把/usr/lib64/pkgconfig/的三个libcrypto.pc libssl.pc openssl.pc这三个文件拷贝到/usr/lib/pkgconfig/下,

sudo cp /usr/lib64/pkgconfig/* /usr/lib/pkgconfig/
pkg-config update
sudo ldconfig

参考:https://www.yundongfang.com/Yun224517.html

编译x264,获取网站
http://www.videolan.org/developers/x264.html
在ubuntu22.10下直接apt-get install x264安装的库,ffmpeg-webrtc找不到,这里下载源码安装发现可以。
打开下载的x264源码,执行

./configure --enable-shared --enable-static --disable-asm 
make
make install

安装opus

sudo apt-get install libopus-dev

三、编译srs
拉取srs代码:
srs,版本要求SRS version 5.0.153 or higher, or 6.0.43 or higher。

https://github.com/ossrs/srs

编译srs后运行:

./objs/srs -c conf/rtc2rtmp.conf

四、测试
运行:
ffmpeg_g -re -i ~/git/srs/trunk/doc/source.flv -vcodec libx264 -profile:v baseline -r 25 -g 50 -acodec libopus -ar 48000 -ac 2 -f rtc “http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream”
以上输入文件是srs包里的测试文件。
也可以使用自己的文件,注意必须是x264库,opens编码,baseline模式,且不能只含视频不含音频,也要主要像素格式,baseline支持的像素格式有限。
4.1推流端:

ffmpeg -re -i westlife.mp4 -vcodec libx264 -pix_fmt yuv420p -profile:v baseline -r 25 -g 50 -acodec libopus -ar 48000 -ac 2 -f rtc "http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream"

其中推流端也可以用网页的WHIP,但这里测试的是ffmpeg-webrtc。
4.2拉流端:
经测试ffmpeg-webrtc的ffplay并不能拉取WHIP流,应该是这部分代码还没完善。受条件限制,后面再测延时,先挖个坑把。
http://localhost:8080/players/whep.html?autostart=true
请添加图片描述五、交互与sdp
看一下ffmpeg推流端与srs的交互过程:

[rtc @ 0x55816580bec0] WHIP: Init ice_arq_max=5, ice_arq_timeout=30, dtls_arq_max=5, dtls_arq_timeout=50 pkt_size=1500
[rtc @ 0x55816580bec0] WHIP: SDP offer=1048B, answer=1040B, ufrag=ods0t720, pwd=32B, transport=udp://192.168.100.245:8000
[rtc @ 0x55816580bec0] WHIP: ICE STUN ok, url=udp://192.168.100.245:8000, username=ods0t720:c2bf2fab, req=80B, res=-11B, arq=5
[rtc @ 0x55816580bec0] WHIP: DTLS handshake done=1, arq=0, srtp_material=60B
[rtc @ 0x55816580bec0] WHIP: SRTP setup done, suite=AES_CM_128_HMAC_SHA1_80, key=30B
[rtc @ 0x55816580bec0] WHIP: Create RTP muxer OK, buffer_size=4096, max_packet_size=1484
Output #0, rtc, to 'http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream':

ffmpeg推流端与srs的sdp交互:

[rtc @ 0x5615e784dec0] WHIP: Init ice_arq_max=5, ice_arq_timeout=30, dtls_arq_max=5, dtls_arq_timeout=50 pkt_size=1500
[rtc @ 0x5615e784dec0] Failed to request url=http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream, offer: v=0
o=FFmpeg 4489045141692799359 2 IN IP4 127.0.0.1
s=FFmpegPublishSession
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=ice-ufrag:1ac08523
a=ice-pwd:fb55f4f4d99d240fa65c2adfec5e7c24
a=fingerprint:sha-256 84:67:F7:27:AE:00:74:71:AA:EF:42:E1:B8:85:78:C9:6D:02:CB:F8:83:07:79:1F:4F:79:F8:1B:0A:5F:7C:C7
a=setup:active
a=mid:0
a=sendonly
a=msid:FFmpeg audio
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=ssrc:492341693 cname:FFmpeg
a=ssrc:492341693 msid:FFmpeg audio
m=video 9 UDP/TLS/RTP/SAVPF 106
c=IN IP4 0.0.0.0
a=ice-ufrag:1ac08523
a=ice-pwd:fb55f4f4d99d240fa65c2adfec5e7c24
a=fingerprint:sha-256 84:67:F7:27:AE:00:74:71:AA:EF:42:E1:B8:85:78:C9:6D:02:CB:F8:83:07:79:1F:4F:79:F8:1B:0A:5F:7C:C7
a=setup:active
a=mid:1
a=sendonly
a=msid:FFmpeg video
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:106 H264/90000
a=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001e
a=ssrc:2806541432 cname:FFmpeg
a=ssrc:2806541432 msid:FFmpeg video


http://lihuaxi.xjx100.cn/news/1142760.html

相关文章

Rocky Linux 9.2 正式版发布 - RHEL 下游免费发行版

Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导。 请访问原文链接&#xff1a;https://sysin.org/blog/rocky-linux-9/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 以社区方式驱动的企业 Linux Rocky Linux 是…

fanruan限制时间选取范围

select p.ORIGINAL_NUMBER,p.CREATE_DATE,p.HANDLE_DATE, --处理日期p.DESTROY_DATE, --销毁日期p.DESTROY_USER,nvl(p.DESTROY_DATE,sysdate) -p.HANDLE_DATE as days from JNETTMS.T_RETURN_PACKAGE p where p.STATUS 5 ${if(len(销毁日期_起始)0,"and p.HANDLE_DA…

入行3年,月薪不足20K,看来是时候跳一次了.....

写在前面的话 不知不觉已经毕业两年半&#xff0c;工作三年了在同一家公司并未跳槽&#xff0c;今年在合适的契机选择了换一家公司&#xff0c;在这里想总结一下三年的工作经验和这次的面试经验。 我毕业于一个本科院校&#xff0c;二本&#xff0c;学习网络工程出来的。到大…

IntelliJ IDEA汉化

IntelliJ IDEA汉化 描述解决办法 描述 在开发过程中&#xff0c;我们想让界面现实为汉语&#xff0c;那么我们就需要对IDEA工具进行汉化&#xff0c;目前版本的IDEA汉化都非常简单&#xff0c;请看下述实现步骤。 解决办法 下述汉化方法&#xff0c;全家桶软件都通用。 打开…

filter、map、reduce 一次性说清楚

filter filter() 方法是 JavaScript 中数组的一个方法&#xff0c;用于筛选数组中符合指定条件的元素&#xff0c;并返回一个新的数组&#xff0c;新数组中包含筛选出的元素。 filter() 方法语法如下&#xff1a; arr.filter(callback(element[, index[, array]])[, thisArg…

第十六章 使用MariaDB数据库管理系统

文章目录 第十六章 使用MariaDB数据库管理系统一、数据库管理系统1、数据库介绍2、数据库管理系统介绍 二、初始化MariaDB服务1、安装MariaDB服务程序2、启动服务并设置开机自启动3、初始化操作&#xff08;1&#xff09;、设置密码&#xff08;2&#xff09;、设置专有密码&am…

单片机:实战练习

目录 【1】GPIO 1.定义 2.应用 I - Input - 输入采集 O - Output - 输出控制 ​编辑​编辑 3.GPIO结构框图 4.功能描述 输入功能 输出功能 5.相关寄存器 【2】点亮一盏LED灯 1.实验步骤 2.编程实现 3.编译下载 4.复位上电 练习&#xff1a;实现LED灯闪烁…

Hyperf使用WebSocket 服务

1.安装服务 composer require hyperf/websocket-server2.配置 Server 修改 config/autoload/server.php&#xff0c;增加以下配置。 <?phpdeclare(strict_types1); /*** This file is part of Hyperf.** link https://www.hyperf.io* document https://hyperf.wiki*…