Phonegap Media记录mp3文件损坏

时间:2014-04-15 22:35:35

标签: android cordova mp3 media

我正在使用phonegap媒体将音频录制为mp3。录制后,它在我的Android上播放正常,并在Windows Media Player上正常播放。但是,当我在浏览器中尝试它时,它说该文件已损坏。

确切错误:

  

Chrome:“我们现在无法播放此音频文件。”

     

Firefox:“由于文件已损坏,无法播放视频。”

     

IE:在WMP中打开文件并播放。

我使用了示例中的代码。 http://docs.phonegap.com/en/2.6.0/cordova_media_media.md.html#media.startRecord

// Record audio
// 
function recordAudio() {
    var src = "myrecording.mp3";
    var mediaRec = new Media(src,
        // success callback
        function() {
            console.log("recordAudio():Audio Success");
        },

        // error callback
        function(err) {
            console.log("recordAudio():Audio Error: "+ err.code);
        });

    // Record audio
    mediaRec.startRecord();
}

提前致谢。

编辑:

这是一个例子。 http://blrbrdev.azurewebsites.net/voice/blrbr_130419951008830874.mp3 这在WMP中播放,但不在浏览器中播放。

2 个答案:

答案 0 :(得分:2)

您作为mp3提供的文件似乎不是mp3文件。 我在下面附上了文件的详细信息。如您所见,它是在MPEG-4 / 3GPP容器中打包的AMR编解码器。我想说当前没有浏览器可以解码本机(但像VLC这样的软件可以播放它)。

如果您尝试在浏览器中播放音频文件 - 无论是HTML5音频 - 您需要提供兼容的格式。在这里查看compatibility table

预期行为为stated here

  

Android设备以自适应多速率格式录制音频。指定的文件应以.amr扩展名结尾。

如果您想在浏览器/ HTML5音频标签中播放,则需要对文件进行后处理以将其转换为有效的mp3文件(为完整的浏览器覆盖添加ogg音频)。服务器端可以使用名为ffmpeg的程序来完成。我不是Phonegap开发的专家,所以我不能指向一个有效的lib来做那个客户端,但也许这已经被问过了。

文件规格:

General 
Complete name : C:\wamp\www\stack\sample\thisTest.mp3  
Format : MPEG-4 
Format profile : 3GPP Media Release 4 
Codec ID : 3gp4 
File size : 10.5 KiB 
Duration : 4s 780ms 
Overall bit rate mode : Constant 
Overall bit rate : 18.0 Kbps 
Performer : LGE 
Encoded date : UTC 2014-04-15 00:24:57 
Tagged date : UTC 2014-04-15 00:24:57 

Audio 
ID : 1 
Format : AMR 
Format/Info : Adaptive Multi-Rate 
Format profile : Narrow band 
Codec ID : samr 
Duration : 4s 780ms 
Bit rate mode : Constant 
Bit rate : 12.8 Kbps 
Channel(s) : 1 channel 
Sampling rate : 8 000 Hz 
Bit depth : 13 bits 
Stream size : 7.47 KiB (71%) 
Title : SoundHandle 
Writing library :  
Language : English 
Encoded date : UTC 2014-04-15 00:24:57 
Tagged date : UTC 2014-04-15 00:24:57 

答案 1 :(得分:2)

首先感谢@ Forestan06指出我正确的方向。

对于那些以.amr格式在Android设备上录制并且需要使用.Net C#在您的服务器上录制.mp3格式的录制内容的人,这就是我的做法。

  1. Install-Package MediaToolkit - > http://www.nuget.org/packages/MediaToolkit/
  2. 编写此代码:

    var fileName ="myVoice.mp3";
    string fileNameWithPath = Server.MapPath("~/Voice/" + fileName);
    
    if (request.FileName.EndsWith(".amr"))
    {
        var amrFileName = "myVoice.amr";
        string amrFileNameWithPath = Server.MapPath("~/Voice/Amr/" + amrFileName);
        request.SaveAs(amrFileNameWithPath);
    
        var inputFile = new MediaFile { Filename = amrFileNameWithPath };
        var outputFile = new MediaFile { Filename = fileNameWithPath };
    
        using (var engine = new Engine())
        {
            engine.Convert(inputFile, outputFile);
        }
    
    }
    else
    {
        request.SaveAs(fileNameWithPath);
    }