2012-05-17 114 views
1

我試圖讓媒體播放器播放存儲在本地/外部存儲中的媒體文件。Android MediaPlayer無法播放本地存儲中的媒體文件

媒體文件使用單獨的活動下載並存儲在本地/外部存儲器中。請參閱下面的示例代碼以進行存儲。

FileOutputStream fos = openFileOutput("myfile.mp4" , Context.MODE_WORLD_WRITEABLE); 
    fos.write(byteArrayBuf.toByteArray()); 
    fos.close(); 

對於播放相同的文件,我使用。

mMediaPlayer = new MediaPlayer(); 
    ParcelFileDescriptor parcel = ParcelFileDescriptor.open(new File(URI.create("file:///data/data/com.mypackage/files/myfile.mp4")),ParcelFileDescriptor.MODE_READ_WRITE); 
mMediaPlayer.setDataSource(parcel.getFileDescriptor()); 
    mMediaPlayer.setDisplay(mHolder); 
    mMediaPlayer.prepare(); 
    mMediaPlayer.setOnPreparedListener(this); 

    /** On Prepared Implementation **/ 
    public void onPrepared(MediaPlayer mp) { 
     mMediaPlayer.start(); 
    } 

但是,媒體播放器拒絕播放該文件並始終失敗並顯示錯誤(1,)。我真的非常想知道如何讓這個媒體播放器運行,因爲我似乎已經完成了與代碼示例內聯的所有內容,以便從本地/外部存儲中讀取文件。

注意:當我用res/raw文件夾中的文件替換本地文件時,這似乎很好。這是否與應用程序或媒體播放器無法讀取的文件有關?幫助將非常感激,使這件作品。

更新1

@克里斯: 我暫時取得的文件WORLD_WRITEABLE,一旦我得到的媒體播放器的工作實際上會寫入文件作爲WORLD_READABLE。 對路徑進行硬編碼是故意的,因爲我只是想最初確保文件的讀取沒有任何歧義。事實上,我已經通過adb shell和DDMS檢查了該文件是否存在。一旦我讀取文件,實際上我可能會使用像getFilesDir()這樣更明智的東西。 Logcat輸出如下。

surfaceCreated 
    I/AwesomePlayer( 34): reset 
    I/AwesomePlayer( 34): cancel player events 
    I/AwesomePlayer( 34): cancel player events 
    I/SampleTable( 34): There are reordered frames present. 
    D/MyPlayerActivity( 460): surfaceChanged 
    I/ActivityManager( 82): Displayed com.mypackage/.MyPlayerActivity: +1s997ms 
    D/MyPlayerActivity( 460): Video Prepared 
    D/AudioSink( 34): bufferCount (4) is too small and increased to 12 
    E/MediaPlayer( 460): error (1, -2147483648) 
    E/MediaPlayer( 460): Error (1,-2147483648) 
+1

您不應該在/ data下硬編碼路徑,而應該在運行時動態確定它。另外,你是否真的想讓其他應用可以寫入文件?發佈logcat將是一個好主意。 –

回答

0

正如Chris Stratton所評論的,不要硬編碼到內部或外部存儲器的路徑。他們可能在某些系統上工作,但不能保證每個系統。使用getFilesDir()找到目錄的路徑。從文檔...

公共文件getFilesDir()

返回在其中具有openFileOutput(字符串,整數)創建的文件都存儲在文件系統中的絕對路徑的目錄。

返回存放應用程序文件的目錄的路徑。

你可以調用返回的FilegetAbsolutePath()並追加/myfile.mp4它並使用它來setDataSource(...)Mediaplayer

相關問題