![](/img/trans.png)
[英]How to Play Video in Android in Videoview or WebView from Internal Storage
[英]Play video file from internal storage android using VideoView
我正在尝试播放存储在 Android 内部存储中的视频。 但是,无论我做什么,它都会返回 -1 错误或 -38 错误。 两者似乎都是相当普遍的错误,因此不太容易理解。
我想知道是否可以使用 VideoView 而不是 MediaPlayer 实例来播放本地存储中的视频文件。
我的应用程序中涉及的步骤包括,
将文件存储在内部存储中(注意我使用约定来确保它具有全局读取权限。即
openFileOutput(file_name, Context.MODE_WORLD_READABLE);
稍后从该位置读回媒体文件,并在 videoView 中播放。
String filePath = "file://" + getFilesDir()+File.separator+file_name; Uri videoUri = Uri.parse(filePath); Log.d("Video Player", filePath); videoPlayer.setVideoURI(videoUri);
我还浏览了 StackOverflow 中的其他链接,这些链接指出我需要实现一个 CustomContentProvider 才能读取这些文件。 是否有一种直接访问文件 uri 并将其设置为 videoView 的方法,而不必求助于创建自定义内容提供程序并使用 mediaPlayer 而不是 videoView。
使用的其他 StackOverflow 参考
我遇到了和你一样的问题,在播放之前只是简单地将文件临时复制到外部存储,然后删除临时文件。
这是我用来执行此操作的一些示例代码:
try {
// Copy file to temporary file in order to view it.
temporaryFile = generateTemporaryFile(file.getName());
FileUtils.copyFile(file, temporaryFile);
previewVideo(temporaryFile, videoView);
} catch (IOException e) {
e.printStackTrace();
}
# Helpers
protected File generateTemporaryFile(String filename) throws IOException {
String tempFileName = "20130318_010530_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File tempFile = File.createTempFile(
tempFileName, /* prefix "20130318_010530" */
filename, /* filename "video.3gp" */
storageDir /* directory "/data/sdcard/..." */
);
return tempFile;
}
protected void previewVideo(File file, VideoView videoView) {
videoView.setVideoPath(file.getAbsolutePath());
MediaController mediaController = new MediaController(this);
videoView.setMediaController(mediaController);
mediaController.setMediaPlayer(videoView);
videoView.setVisibility(View.VISIBLE);
videoView.start();
}
请试试这个。 我已经在此链接上解释了从原始文件夹播放视频的程序: 视频播放器不起作用! . 在这一点上,如果你修改
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/"+R.raw.VideoName);
和
Uri uri = Uri.parse(Environment.getExternalStorageDirectory()+"<path to your video>");
例如:
Uri uri = Uri.parse(Environment.getExternalStorageDirectory()+"/dcim/camera/2012-05-15_17-50-39_319.3gp");
我想会解决你的问题。 请记住在清单上授予必要的权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这里的游戏有点晚了,但是如果您将FileProvider添加到您的应用程序,您就可以创建 VideoView 可以使用的 URI。
这实际上非常简单,完成后,您可以访问您的文件,例如:
Uri video = FileProvider.getUriForFile(context, context.getPackageName(), new File(myAbsoluteVideoPath));
myVideoView.setVideoURI(video);
这可用于播放您在应用中生成并保存在设备上的视频。
将targetSdkVersion
更改为 27。
安卓
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig
{
applicationId "com.naved.playonmp3"
minSdkVersion 18
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.