2013-07-03 72 views
1

我試圖從已安裝的Google Play APK擴展OBB文件中的文件加載電影。MediaPlayer的setDataSource爲expansionFilePath不起作用

mMediaPlayer = new MediaPlayer(); 

StorageManager storageManager = (StorageManager)mParentActivity.getSystemService(Context.STORAGE_SERVICE); 

String obbPath = ExpansionHelper.getExpansionFilePath(mParentActivity); 
File movie = new File(storageManager.getMountedObbPath(obbPath), filename); 

Log.d(Constants.TAG, "Movie exists is " + movie.exists()); 

mMediaPlayer.setDataSource(obbPath); 

注:電影存在日誌 '真'

E/MediaPlayer的(27155):錯誤(1,-2147483648)錯誤,同時打開 文件。卸載媒體播放器(未指定的媒體播放器錯誤, -2147483648)E/MediaPlayer的(27155)時,停止所謂的狀態0 E/MediaPlayer的(27155):錯誤(-38,0)

我怎樣才能玩來自APK OBB擴展文件的電影(不是zip類型)?

+0

上了車2.3.x版本Android版本相同的問題但它在更新的版本上運行良好。你在哪個Android版本中遇到過這個問題? – Gros

回答

1

我不完全確定爲什麼這個方法可以工作,但是如果你從FileInputStream提供FileDescriptor就像魅力一樣工作!

FileInputStream fis = new FileInputStream(movie); 
mMediaPlayer.setDataSource(fis.getFD()); 
fis.close(); 
0

哦,只是看到了這個問題對於非壓縮文件,以及在這裏被壓縮版本反正:

private static void setMediaPlayerDataSourceFromZip(MediaPlayer mediaPlayer, 
     String zipFileName, String fileNameInZip) throws IOException, 
     FileNotFoundException { 
    ZipResourceFile zip = new ZipResourceFile(zipFileName); 
    FileInputStream fis = new FileInputStream(zipFileName); 
    try { 
     FileDescriptor zipfd = fis.getFD(); 

     ZipEntryRO entry = zipFindFile(zip, fileNameInZip); 
     mediaPlayer.setDataSource(zipfd, entry.mOffset, 
       entry.mUncompressedLength); 
    } finally { 
     fis.close(); 
    } 
} 

private static ZipEntryRO zipFindFile(ZipResourceFile zip, String fileNameInZip) { 
    for (ZipEntryRO entry : zip.getAllEntries()) { 
     if (entry.mFileName.equals(fileNameInZip)) 
      return entry; 
    } 
    throw new RuntimeException(String.format("File \"%s\"not found in zip", fileNameInZip)); 
} 

用法:

setMediaPlayerDataSourceFromZip(mediaPlayer, 
    "/Some/zip/obb/withoutCompression.zip", 
    "path/within/zip/mymovie.mp4"); 
相關問題