gpt4 book ai didi

go - 视频工作时 Pion WebRTC 音频流中断

转载 作者:行者123 更新时间:2023-12-04 23:11:00 73 4
gpt4 key购买 nike

我正在尝试通过 Pion WebRTC 将 MP4 视频发送到浏览器。
使用 FFmpeg,我将其拆分为 Opus OGG 流和 Annex-B H.264 视频流。虽然视频工作正常,但音频不断进出。它可以正常播放几秒钟,然后停止一秒钟,然后继续。
这是我用于音频的 FFmpeg 命令:

ffmpeg -i demo.mp4 -c:a libopus -vn -page_duration 20000 demo.ogg
这是我的发射器(缩短):
var lastGranule uint64
for {
pageData, pageHeader, err := ogg.ParseNextPage() // Uses Pion OggReader

// Taken from the play-from-disk example
sampleCount := float64(pageHeader.GranulePosition - lastGranule)
lastGranule = pageHeader.GranulePosition
sampleDuration := time.Duration((sampleCount/48000)*1000) * time.Millisecond

err = audioTrack.WriteSample(media.Sample{Data: pageData, Duration: sampleDuration})
util.HandleError(err)

time.Sleep(sampleDuration)
}
我尝试将延迟硬编码为 15 毫秒,这解决了它被切断的问题,但随后它随机播放太快或开始跳过。由于在更新我的 FFmpeg 命令(添加关键帧和删除 b 帧)之前我的视频出现故障,我认为这也是编码器问题。
这可能是什么原因?
更新:在 Chrome 中使用 WebRTC 日志记录,我发现了以下经常发生的日志行:
[27216:21992:0809/141533.175:WARNING:rtcp_receiver.cc(452)] 30 RTCP blocks were skipped due to being malformed or of unrecognized/unsupported type, during the past 10 second period.
这可能是剪切的原因,尽管我无法弄清楚为什么它会收到格式错误的数据。

最佳答案

最终的问题是问题 #44343 导致的 sleep 时间不准确在 Go 本身中。它导致样本不是以恒定速率发送,而是以随机 5 到 15 毫秒之间的速率发送,从而导致流不连贯。
Sean DuBois 和我在最新的 play-from-disk 中修复了这个问题和 play-from-disk-h264 Pion 存储库中的示例,通过替换 for -循环和Sleep()Ticker ,更准确。

关于go - 视频工作时 Pion WebRTC 音频流中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68710266/

73 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com