修复HLS流的音频丢失

时间:2016-01-28 08:03:27

标签: video-streaming http-live-streaming hls

我有一个在Android和iOS上退出的HLS流,但在网络浏览器(flash)中播放效果很好。

编码器: Wirecast Pro 5.0.3

编码器设置:输出格式 - (视频)闪光灯,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。

由于网络浏览器的播放效果很好,因此它似乎是一个不被闪存播放器(仅限iOS播放器)拾取的问题。

2 个答案:

答案 0 :(得分: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帧都有一个关键帧 - 对段的检查表明关键帧模式似乎是" auto"这让编码器决定并产生相当随机的关键帧距离(可能48被认为是最大距离?)。但这不太可能是您遇到问题的原因。

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

  1. 使用FFmpeg将段转换为MP4并删除音频:FFmpeg.exe -i segment.ts -an -vcodec copy -segment.mp4
  2. 使用Bento4中的mp4info转储帧列表:mp4info.exe --show-layout segment.mp4
  3. 这将创建段中所有帧的列表,以及它们的大小,时间和类型。在输出帧中,类型为" I"表示关键帧。

答案 1 :(得分:0)

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

我的所有视频都是24fps,但由于我是通过firewire摄取的,所以它实际上是60个隔行扫描帧。我在源头解除隔行扫描(它是Wirecast中的一个复选框),性能大大提高。