通过 ffmpeg 串流对接 OBS 等直播软件

我们要将设备通过私有通道输出到 H264 流,传给 OBS 等直播软件使用。为此,设计了上图所示的串流工具。

设计思路

私有通道通过 API 接口提供 H264 流,要传给 ffmpeg ,最简单的方法是通过进程间管道传输数据。这里 Dump 工具直接输出一帧帧符合 H264 ES(Annex B)格式的数据。

然后 ffmpeg 要输出标准协议的视频流给 OBS,最简单的协议是 RTP 组播,这样不需要安排服务器。比如 RTSP、RTMP 都需要配置 ffserver ,增加了系统的复杂性。用流文件格式,比如 FLV、TS,也需要 HTTP 服务器。

串流的工作(从裸的 H264 转换为 RTP/UDP)就交给 ffmpeg 完成了。下面来看看如何配置 ffmpeg。

串流配置

-fflags nobuffer

不缓冲数据减少延迟

-flags low_delay

低延迟编码减少延迟

-analyzeduration 10

分析输入最大时长减少延迟

-probesize 3200

分析输入最大字节减少延迟

-f h264

输入格式h264 裸流

-i pipe:

输入源从管道输入

-vcodec copy

视频格式仅拷贝输入,不转换格式

-f rtp

输出格式RTP 协议封装
rtp://127.0.0.1:1234输出目标本地 udp 1234 端口

RTP 协议一般使用组播地址(224.0.2.0~238.255.255.255),但是我们的串流使用本地回环地址(127.0.0.1)单播就足够了,只有同一个设备的程序能够收到RTP数据。

ffmpeg 正常启动 RTP 串流后,会输出串流 RTP 的描述信息(称为 SDP),比如:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat LIBAVFORMAT_VERSION
m=video 1234 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z0LAH42NUCSC2TZAAAADAEAAAA8jwiEagA==,aM4xsgA=; profile-level-id=42C01F

将这段信息保存到一个 sdp 文件中 (如:ffmpeg.sdp ),以备后用。

OBS 配置

在 OBS 中使用 RTP 流有两种方式:使用 VLC 视频源,使用媒体视频源。

VLC 视频源

使用 VLC 视频源需要先安装 VLC(Video Lan) 软件。另外,这种方式只在 OBS Windows 版本中支持。

媒体视频源

使用媒体视频源,本质上就是使用 OBS 内部集成的 ffmpeg 解码,因此 ffmpeg 支持的视频流,都能够用作 OBS 的视频源。

添加“媒体视频源”:

配置“媒体视频源”:

  • 取消选择“本地文件”
  • 输入 sdp URL(file:C:/ffmpeg.sdp)
  • 输入 ffmpeg 选项:“protocol_whitelist=file,udp,rtp”(ffmpeg 默认不支持 file sdp,需要通过选项参数打开)

配置完成后,稍等一会儿就可以看到视频内容了。 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting Horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值