【问题标题】:Fixing audio drop outs of an HLS stream修复 HLS 流的音频丢失
【发布时间】:2016-05-05 11:52:11
【问题描述】:

我有一个 HLS 流在 Android 和 iOS 上退出,但在 Web 浏览器(闪存)中可以正常播放。

编码器: Wirecast Pro 5.0.3

编码器设置:输出格式 -(视频)Flash,h.264 480x270 24fps,365 kbps,每 48 个关键帧(音频)AAC 单声道 96kbps 44.1hz

直播地址:http://pablogott.videocdn.scaleengine.net/pablogott-iphone/play/ooftv1/playlist.m3u8

症状:在 iOS/Android 中,首先音频丢失,视频继续播放。然后视频可能会丢失。最终情况会变得更糟。

我的尝试:我降低了编码器的比特率并升级了硬件。我已经进行了速度测试和 ping 测试,以验证带宽不是问题。我还验证了我的编码器日志,以确保我的流流畅。我还试验了 CBR 与 VBR,结果没有变化。

我的 CDN 是 scaleengine。

由于网络浏览器可以正常播放,这似乎是 Flash 播放器无法解决的问题,只有 iOS 播放器才能解决。

【问题讨论】:

  • 您能否添加有关您使用的编码器型号、版本和设置的详细信息?你能给我们看一下直播吗?
  • 我更新了问题以包含这些详细信息。

标签: video-streaming http-live-streaming


【解决方案1】:

我注意到的唯一奇怪之处是您的媒体播放列表中仅引用了 3 个最新片段。三通常被认为是绝对下限,可能会导致某些播放器出现问题的播放行为。我建议您将媒体播放列表的大小增加到至少 10 个片段。

我的媒体播放列表,我指的是“chunklist”文件,内容如下:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:12
#EXT-X-MEDIA-SEQUENCE:560
#EXTINF:10.367,
media_w958035845_560.ts
#EXTINF:10.033,
media_w958035845_561.ts
#EXTINF:10.134,
media_w958035845_562.ts

您需要在其中引用至少 10 个 .ts 文件。您应该如何实现这一点取决于您使用的打包软件 - 在这一点上我不熟悉 Wirecast 功能。

这可能是不相关的,但我还应该指出,您实际上并不是每 48 帧都有关键帧 - 检查片段表明关键帧模式似乎改为“自动”,这让编码器决定并产生相当随机的关键帧距离(可能 48 被认为是最大距离?)。不过,这不太可能是您遇到问题的原因。

我使用各种工具从不同角度分析流,但例如,可以通过以下步骤查看关键帧的位置:

  1. 使用 FFmpeg 将片段转换为 MP4 并删除音频:FFmpeg.exe -i segment.ts -an -vcodec copy -segment.mp4
  2. 使用来自Bento4 的mp4info 转储帧列表:mp4info.exe --show-layout segment.mp4

这将创建片段中所有帧的列表,以及它们的大小、时间和类型。在输出帧中,类型为“I”的表示关键帧。

【讨论】:

  • 谢谢你。我的 CDN 从我的 RTMP 流创建 HLS,所以我会联系他们。请问您是用什么工具来分析流的?
  • @screamingdrills 我已经更新了我的答案,以反映我用来分析框架的工具。
【解决方案2】:

如果这对任何人都有帮助,我的设置存在很多问题,但影响最大的问题与我的火线源有关。

我所有的视频都是 24fps,但因为我是通过火线摄取的,它实际上是以 60 个隔行扫描帧的形式出现的。我在源头进行了去隔行扫描(这是 Wirecast 中的一个复选框),性能大大提高。

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 2021-04-08
    • 2018-12-18
    • 2023-04-06
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多