【问题标题】:Phonegap Media record mp3 file corruptPhonegap 媒体记录 mp3 文件损坏
【发布时间】:2014-04-15 22:35:35
【问题描述】:

我正在使用 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 中播放,但不在浏览器中。

【问题讨论】:

标签: android cordova mp3 media


【解决方案1】:

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

如果您尝试在浏览器中播放音频文件(比如说 HTML5 音频),您需要提供兼容的格式。在这里查看compatibility table

这是stated here 的预期行为:

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

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

文件规格:

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 

【讨论】:

  • 哇。感谢@Florestan06 的出色回答。该 phonegap 文档有点误导,因为它在示例中显示它以 mp3 录制,但是每个设备都有一个不会录制 mp3 的“怪癖”。反正。您在此处提供的规格确实显示了这里发生的情况。这是什么程序?我找到了一个我要尝试的 nuget 包。 nuget.org/packages/xmediaencoding我会告诉你进展如何。
  • 感谢您的评论 - 检查我使用的媒体文件信息 mediainfo - 这是免费的,也可以作为 CLI 使用
【解决方案2】:

首先感谢@Forestan06 为我指明了正确的方向。

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

  1. 安装包 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);
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多