簡體   English   中英

Android MediaPlayer無法播放本地存儲中的媒體文件

[英]Android MediaPlayer unable to play media file from local storage

我試圖使媒體播放器播放存儲在本地/外部存儲中的媒體文件。

媒體文件是使用單獨的活動下載的,並存儲在本地/外部存儲中。有關存儲的示例代碼,請參見下文。

    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();
    }

但是,媒體播放器拒絕播放文件,並且始終失敗並顯示error(1,)。 我真的想盡辦法使此媒體播放器運行,因為我似乎已經完成了所有與代碼示例一致的工作,以使其從本地/外部存儲中讀取文件。

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

更新1

@Chris:我暫時制作了文件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)

正如克里斯·斯特拉頓(Chris Stratton)所說,請勿對內部或外部存儲的路徑進行硬編碼。 它們可能在某些系統上工作,但不能保證每個系統都可以。

使用getFilesDir()查找目錄的路徑。 從文檔...

公共文件getFilesDir()

返回到使用openFileOutput(String,int)創建的文件存儲在文件系統上目錄的絕對路徑。

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

您可以在返回的File上調用getAbsolutePath() ,並將/myfile.mp4附加到該File然后將其用於Mediaplayer上的setDataSource(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM