在Android上播放音频

时间:2015-01-15 06:28:54

标签: android audio mp3

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

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

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

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

仅用于定义名称&#34; mp3play&#34;。

在html的标题中,我有以下javascript:

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

//-->

现在我可以使用以下链接调用播放器:

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

即使在Android上也能正常使用。

但是对于特殊要求,我不使用mp3的文件名。我已经制作了一个Perl脚本来根据计算提供pm3数据。为此,我使用以下链接:

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

这个Perl代码&#34; playmp3.pl&#34;发送标题,然后发送完整的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错误日志:

            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脚本的输出保存到名为&#34; test.MP3&#34;的文件中。然后我在我的html中准备了一个链接

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

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

这是内容类型的问题吗?

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

1 个答案:

答案 0 :(得分:0)

这是文件名!

幸运的是,Android接受了Perl调用的附加“.mp3”:

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

我已经更改了Perl脚本以删除该添加,现在它可以在所有平台上运行。