【发布时间】:2019-11-09 07:39:42
【问题描述】:
尝试通过以下链流式传输视频:本地实例存储 (AWS) 上的 h264/mp4 文件->ffmpeg->rtp->同一实例上的 Janus->WebRTC 播放 (Chrome/mac)。即使没有任何资源似乎超载(所涉及的任何系统上的 CPU/内存/网络带宽),生成的视频也会断断续续。我也用 Coturn TURN 服务器,它也完全没有加载,带宽很充足。
尝试切换编解码器,但除了 vp8 之外没有任何帮助(有点 - 波动仍然存在,但非常罕见且可以接受),导致 CPU 消耗如此之高,实际上它是不可接受的。
ffmpeg -re -stream_loop -1 -i ./short.mp4 -s 426x240 -c:v libx264 -profile:v baseline -b:v 1M -r 24 -g 60 -an -f rtp rtp://127.0.0.1:5004
产生的 SDP 是:
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 58.20.100
m=video 5004 RTP/AVP 96
b=AS:1000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1
流是使用 Janus API 设置的
"janus" : "message",
"transaction" : 'Transaction',
"body": {
"request" : "create",
"type" : "rtp",
"id" : newId,
"name": streamId+newId,
"audio": false,
"video": true,
"description" : streamId+newId,
"videoport" : 5000+newId*4,
"videopt" : 96,
"videortpmap": "H264/90000",
"secret" : "adminpwd"
}
}
尝试了 bw 的各种选项,根本没有帮助。将 -g(GOP 大小)更改为较低的值可以使波动持续时间更短但更频繁。在 -g 3 或 4 时,这是可以接受的,但可以预见的是,可容忍质量的比特率变得疯狂。
预期结果:视频播放时没有断断续续。
我的理论是它可能是以下之一:
要么 ffmpeg 以缓冲区太小的方式提供数据,所以有时 Janus 需要在它还没有准备好时发送下一个数据包,使缓冲区饥饿并导致中断 - 所以也许有一种方法可以让 ffmpeg 编码成某种短暂的(半秒左右?缓冲来调节流量)。怎么样?
或者 H264 在 UDP 上的工作效果太差,我无能为力。然后我不得不切换到 TCP,但到目前为止尝试这样做没有成功。
【问题讨论】:
标签: video-streaming webrtc h.264 janus-gateway