在 Android 上播放音频

Play Audio on Android

关于这个主题的许多问题的答案对我没有帮助!这不是音频需要首先通过点击或任何其他类型的操作启动的问题。

我想在我的网站上播放一些不同的短 mp3。我发现的最佳方法如下。它适用于 Internet Explorer 和 Chrome(其他未测试的桌面浏览器)以及 iOS 的移动设备。但不是 Android.

在我的 html 中,我初始化了一个音频设备:

<audio id="mp3play" src=""></audio>

仅用于定义名称"mp3play"。

在 html 的 header 我有以下 javascript:

<SCRIPT language=JavaScript> 
<!--
function play(name) {
        var oAudio = document.getElementById("mp3play");
        oAudio.stop;
        oAudio.src = name;
        oAudio.play();
}

//-->

现在我可以使用以下命令调用播放器 link:

<a href="javascript:play('stuff/voc/WAVvow/011001.MP3');"

即使在 Android 上也能正常工作。

但出于特殊要求,我不使用 mp3 的文件名。我制作了一个 Perl 脚本来根据计算传递 pm3 数据。为此,我使用以下 link:

<a href="javascript:play('../cgi-bin/playmp3.pl?185004');"

此 Perl 代码 "playmp3.pl" 发送 header 然后是完整的 mp3 数据:

    ($entry[0] has a pointer to the desired data, $entry[1] the length)
    open(DAT, "<../wbtde/DictData/dv8.dat");
    binmode DAT;
    seek(DAT, $entry[0], 0);
    read(DAT, $mp3, $entry[1]);       # Lesen des Eintrages
    close DAT;
    print "Content-type: audio/mpeg\n\n"; 
    print $mp3;

这在 IE、Chrome 和 iOS 浏览器上也能正常工作,但在 Android 上不行。

我也可以直接用

调用脚本
www.mysite.com/cgi-bin/playmp3.pl?185004

这在 IE、Chrome 和 iOS 浏览器上也能正常工作,但在 Android 上不行。 Android 告诉我它不能播放这种类型的内容。但是内容类型 audio/mpeg3 也没有播放。

这是 Android 错误日志,当我只点击一个 link 时:

            D/CDX_Player( 2402): >>>>>>>> CedarX Player Version: 00010707
            I/CedarPlayerWrapper( 2402): setDataSource('http://www.example.com/cgi-bin/playmp3.pl?062013')
            I/ChromiumHTTPDataSource( 2402): connect to http://www.example.com/cgi-bin/playmp3.pl?062013 @0
            W/MediaPlayer(  967): info/warning (701, 0)
            I/MediaPlayer(  967): Info (701,0)
            D/sft_http_stream( 2402): reset stream
            I/NuCachedSource2( 2402): ERROR_END_OF_STREAM
            W/demux_http( 2402): unknown file format!
            E/demux_http( 2402): open error, destroy stream handle
            E/DemuxSftNetwork_Component( 2402): cedar demuxer open error
            E/CedarXPlayer( 2402): CedarXPlayer:prepare error!
            E/MediaPlayer(  967): error (1, -2147483648)
            E/MediaPlayer(  967): Error (1,-2147483648)
            I/CDX_Player( 2402): cancel prepare!
            D/CDX_Player( 2402): >>>>>>>> CedarX Player Version: 00010707
            I/CedarPlayerWrapper( 2402): setDataSource('http://www.example.com/cgi-bin/playmp3.pl?062013')
            W/MediaPlayer(  967): info/warning (701, 0)
            I/ChromiumHTTPDataSource( 2402): connect to http://www.example.com/cgi-bin/playmp3.pl?062013 @0
            I/MediaPlayer(  967): Info (701,0)
            D/sft_http_stream( 2402): reset stream
            I/NuCachedSource2( 2402): ERROR_END_OF_STREAM
            W/demux_http( 2402): unknown file format!
            E/demux_http( 2402): open error, destroy stream handle
            E/DemuxSftNetwork_Component( 2402): cedar demuxer open error
            E/CedarXPlayer( 2402): CedarXPlayer:prepare error!
            E/MediaPlayer(  967): error (1, -2147483648)
            E/MediaPlayer(  967): Error (1,-2147483648)
            I/CDX_Player( 2402): cancel prepare!

再试一次: 我已将 Perl 脚本的输出保存到名称为 "test.MP3" 的文件中。然后我在我的 html 中准备了一个 link as

<a href="javascript:play('stuff/test.MP3');"

这适用于 Android!所以我可以假设 Perl 脚本的输出是正确的。

是内容类型的问题吗?

是不是文件名的问题(.pl 而不是 mp3)?

是文件名!

幸运的是 Android 接受向 Perl 调用添加“.mp3”:

www.mysite.com/cgi-bin/playmp3.pl?185004.mp3

我已经更改了 Perl 脚本以删除该添加项,现在它适用于所有平台。