android – 视频视频可以播放存储在内部存储上的视频吗?

我正在努力为我的用户提供使用外部或内部存储的能力。我正在显示图像和视频(科学性质)。将介质存储在SD卡上时,一切正常。但是当我内部存储媒体时,只会显示图像。无论我尝试加载并显示存储在applicationcontext.getFilesDir()下的媒体,我都会遇到各种错误。

将videoview的内容设置为这样一个文件有没有办法?

ContentResolver能帮助我吗?

在相关的说明中,假设存在外部存储是否被认为是坏的形式?

提前致谢,

希德

以下是“无法播放视频”的一个版本,对不起,此视频无法播放。但我有很多其他的失败模式。我可以将内部视频复制到临时存储(外部)并播放,因此将其复制到内部确实创建了一个有效的电影。当我尝试从内部存储器直接播放它时,它才失败。

videoFile = new File(this.getFilesDir() + File.separator + "test.mp4");


InputStream data = res.openRawResource(R.raw.moviegood);


try {
    OutputStream myOutputStream = new FileOutputStream(videoFile);


    byte[] buffer = new byte[8192];
    int length;
    while ( (length = data.read(buffer)) > 0 ) {
        myOutputStream.write(buffer);
    }

    //Close the streams
    myOutputStream.flush();
    myOutputStream.close();
    data.close();
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}




vview.setKeepScreenOn(true);
vview.setVideoPath(videoFile.getAbsolutePath());
vview.start();
最佳答案
MediaPlayer要求正在播放的文件具有世界可读权限。您可以在adb shell中使用以下命令查看文件的权限:

ls -al /data/data/com.mypackage/myfile

您可能会看到“-rw ——”,这意味着只有所有者(您的应用程序,而不是MediaPlayer)具有读/写权限。

注意:您的手机必须扎根才能使用ls命令而不指定文件(在内部存储器中)。

如果您的手机已扎根,则可以使用以下命令在adb shell中添加世界读取权限:

chmod o+r /data/data/com.mypackage/myfile

如果您需要以编程方式修改这些权限(需要rooted手机!),则可以在应用程序代码中使用以下命令:

Runtime.getRuntime().exec("chmod o+r /data/data/com.mypackage/myfile");

这基本上是一个linux命令。有关chmod的更多信息,请参阅https://help.ubuntu.com/community/FilePermissions

编辑:找到另一个简单的方法here(对没有根手机的人有用)。由于应用程序拥有该文件,它可以创建一个文件描述符并传递给mediaPlayer.setDataSource():

FileInputStream fileInputStream = new FileInputStream("/data/data/com.mypackage/myfile");
mediaPlayer.setDataSource(fileInputStream.getFD());

这种方法完全避免了权限问题。

转载注明原文:android – 视频视频可以播放存储在内部存储上的视频吗? - 代码日志