我的应用程序使用HLS播放视频,它在大多数设备上都能正常工作。 当试图在三星Galaxy S3或三星Galaxy Note 2上运行它时,我遇到了问题。
如果我有一个不错的Wifi连接播放将运行没有任何问题。 当我将连接限制在相当低的比特率(大约300-400)并等到大约10秒后,当玩家切换图层时,播放将停止并显示以下消息:
I/avc_utils(1929): found AVC codec config (320 x 180, Baseline-profile level 3.0)
I/ESQueue(1929): DRC : Change Resolution. [720x404] -> [320x180]
E/ACodec(1929): [OMX.SEC.aac.dec] ERROR(0x8000100b)
E/NuPlayer(1929): Received error from audio decoder, aborting playback.
E/NuPlayer(1929): audio track encountered an error (-2147483648)
E/MediaPlayer(15859): error (1, -2147483648)
有没有人知道为什么会这样,为什么只有某些三星设备?例如,Galaxy Nexus运行良好。
以下是m3u8播放列表外观的示例:
http://hiddenserver.com/layer_2.m3u8
http://hiddenserver.com/layer_4.m3u8
答案 0 :(得分:1)
三星S3的问题是不支持HLS流中的MP3音频。 开发人员页面显示不够明确,mpeg-ts仅支持AAC。
我有完全相同的问题。
答案 1 :(得分:0)
对于android 4.0.x和4.1.x,HLS实现至少可以说是错误的。当播放器在各层之间切换时,似乎没有使用新参数重新初始化音频和视频解码器。我为4.2和4.3尝试了相同的HLS流,它工作得很好。
我还检查了4.1,4.2和4.3的调试日志。 4.2和4.3记录的“重新初始化解码器”和4.1只是给出了很多解码器错误并且崩溃了。
当我使用相同的音频参数编码所有图层时,音频4.1上的问题也被消除了。视频却冻结了。
所有这些观察都表明解码器没有被初始化,并且它实际上是Android播放器中的一个错误。
答案 2 :(得分:0)
E / MediaPlayer(15859):错误(1,-2147483648)表示播放器从服务器发送的文件的音轨中收到错误。他们需要检查是否存在问题在服务器端制作块文件。
因此播放器可以忽略此错误,并且流媒体可以流畅播放。
public boolean onError(MediaPlayer arg0, int what, int extra) {
if (what != 1 || extra != -2147483648) {
//Show error
}else {
//Skip error
}
}