2014-04-15 140 views
1

我正在使用phonegap媒體將音頻錄製爲mp3。錄製後,它在我的Android上播放良好,並在Windows Media Player上播放良好。但是,當我在瀏覽器中嘗試它時,它說該文件已損壞。Phonegap媒體記錄mp3文件損壞

精確的錯誤:

鉻: 「我們現在不能播放音頻文件。」

火狐:「視頻無法播放,因爲文件已損壞」

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播放,但不是瀏覽器。

+1

你有你把瀏覽器和不起作用的MP3的樣本網址?你如何主持? –

+0

這是一個mp3文件的例子。這不會在我的瀏覽器中播放,但它將在WMP和VLC中播放。 http://blrbrdev.azurewebsites.net/voice/blrbr_130419951008830874.mp3 – Matt

回答

2

首先感謝@ Forestan06指着我在正確的方向。

對於那些你爲.amr格式的Android設備上的記錄,並在需要使用的.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); 
    } 
    
2

您提供的作爲MP3並不似乎是一個mp3文件的文件。 我附上了下面的文件的細節。正如你可以看到的是AMR編解碼器打包在一個MPEG-4/3GPP容器中。我會說目前的瀏覽器本身就不能解碼(但像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 
+0

哇。謝謝@ Florestan06的偉大答案。 phonegap文檔有點誤導,因爲它在例子中顯示它在mp3中記錄,但是每個設備都有一個'quirk',它不會記錄mp3。無論如何。你在這裏給出的規格真的顯示了這裏發生的事情。這是什麼程序?我發現了一個我將嘗試的nuget包。 http://www.nuget.org/packages/xmediaencoding/我會讓你知道它是怎麼回事。 – Matt

+1

感謝您的評論 - 檢查媒體文件信息我使用[mediainfo](http://mediaarea.net/en/MediaInfo) - 這是免費的,也可以作爲CLI –