更具体:我正在尝试使用jcodec的FrameGrab从res / raw加载视频。
FrameGrab需要一个SeekableBiteChannel,因此文件可以正常工作。
如何从资源中获取视频文件作为文件?
我无法将视频放在SD卡或类似的东西上,我正在为Android Wear开发。
编辑:
String videoPath = "android.resource://" + getPackageName() + "/" + R.raw.hyperlapse2;
mVideoTestUri = Uri.parse(videoPath);
Log.d("VideoPlayer", "Video uri is " + mVideoTestUri);
File file = new File(videoPath);
Log.d("VideoPlayer", "Video file is " + file+", "+file.getName()+", "+file.getAbsolutePath()+", "+file.length());
答案 0 :(得分:3)
最后我做到了。我不知道这是Android Wear特有的还是一个bug,但事实证明
String path = "android.resource://" + getPackageName() + "/" + R.raw.video_file;
File file = new File(path);
不允许访问Android Wear设备上的文件。
而是必须首先将文件转换为临时文件:
InputStream ins = MainActivityBackup.this.getResources().openRawResource (R.raw.hyperlapse2);
File tmpFile = null;
OutputStream output;
try {
tmpFile = File.createTempFile("video","mov");
output = new FileOutputStream(tmpFile);
final byte[] buffer = new byte[102400];
int read;
while ((read = ins.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
output.flush();
output.close();
ins.close();
} catch (IOException e) {
e.printStackTrace();
}
然后可以将其加载到videoView
中mVideoView.setVideoPath(tmpFile.getPath());
如果您使用自己的视频解码器或ffmpeg或vitamio等库,则Android Wear不支持原生视频播放。
答案 1 :(得分:0)
将视频放在名为raw的文件夹下的资源目录中。
String path = "android.resource://" + getPackageName() + "/" + R.raw.video_file;
File file = new File(path);
VideoView view = (VideoView)findViewById(R.id.videoView);
view.setVideoURI(Uri.parse(path));
view.start();