使用Android媒体播放器播放m3u8音频文件

3

我正在开发一款适用于安卓4.0及以上版本的安卓应用程序。我有一个以下示例m3u8文件:

#EXTM3U
#EXT-X-TARGETDURATION:56
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:28, no desc
ulr/audio/file.mp3
#EXTINF:28, no desc
ulr/audio/file.mp3
#EXT-X-ENDLIST

我正在尝试使用以下代码播放该文件:

mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnErrorListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try
{
    mMediaPlayer.setDataSource(uri);
} catch (IllegalArgumentException e)
{
    e.printStackTrace();
} catch (SecurityException e)
{
    e.printStackTrace();
} catch (IllegalStateException e)
{
    e.printStackTrace();
} catch (IOException e)
{
    e.printStackTrace();
}
mMediaPlayer.prepareAsync();

我的onPrepared()方法如下:

public void onPrepared(MediaPlayer player)
    {
        player.start();
    }

但代码首先进入onPrepared(),然后立即进入onError()what=1extra=-1010
我知道这个问题已经被问了很多次(例如这里这里这里),我也知道Vitamio,但我想找出我的实现有什么问题。我的m3u8文件有问题吗?我查看了它的文档,一切都正确。
如果有人能在这个问题上提供帮助就太好了。
1个回答

0

错误代码-1010与MEDIA_ERROR_UNSUPPORTED相匹配,这意味着设备没有硬件或软件编解码器来解码播放列表中的MP3文件。

Vitamio在这种情况下可以工作,因为它为媒体添加了软件解码。这比硬件解码慢,使用更多电池。它还会显著增加您的应用程序大小。

然而,这似乎很奇怪,因为MP3一直是Android中支持的媒体格式之一(supported media format)


自从我提出这个问题以来已经很长时间了。然而,正如你所说的,当它们被单独播放时,设备肯定支持MP3格式。 - Antrromet
我一直遇到同样的问题,使用包含AAC-LC格式文件的m3u8流。谷歌说所有安卓设备都应该支持AAC-LC解码,但是我仍然在其中一些设备上持续收到-1010错误。目前我只是捕获这个错误,然后提供一个选项给用户,让他们尝试使用手机上的另一个应用程序(通过意图)打开流。 - Buns of Aluminum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接