2013-07-03 35 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"); 
相关问题