为了账号安全,请及时绑定邮箱和手机立即绑定

视频工作时音频流被切断

视频工作时音频流被切断

Go
慕尼黑的夜晚无繁华 2022-09-19 17:19:34
我正在尝试通过熊威网络交易系统将MP4视频发送到浏览器。使用 FFmpeg,我将其拆分为 Opus OGG 流和附件 B H.264 视频流。虽然视频工作正常,但音频不断切入和切出。它播放正常几秒钟,然后停止一秒钟,然后继续。这是我用于音频的 FFmpeg 命令:ffmpeg -i demo.mp4 -c:a libopus -vn -page_duration 20000 demo.ogg这是我的发射器(缩短):var lastGranule uint64for {    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)}我尝试将延迟硬编码为15ms,这解决了它被切断的问题,但随后它随机播放得太快或开始跳过。由于我在更新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.这可能是剪切的原因,尽管我无法弄清楚为什么它会收到格式不正确的数据。
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

最后的问题是Go本身的问题#44343引起的睡眠时间不准确。它导致样本不是以恒定速率发送,而是以随机在5到15ms之间的速率发送,从而导致波涛汹涌的流。

肖恩·杜波依斯(Sean DuBois)和我通过在 Pion 存储库中的最新示例中修复了此问题,方法是将 -loop 和 替换为 更准确的 。play-from-diskplay-from-disk-h264forSleep()Ticker


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信