Воспроизведение видео из res/raw на Android Wear

Более конкретно: я пытаюсь загрузить видео из res/raw с помощью jcodec's FrameGrab.

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());

2 ответа

Решение

Наконец-то я заставил это работать. Я не знаю, является ли это чем-то специфическим для Android Wear или багом, но оказывается, что

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 пока не поддерживает воспроизведение собственного видео.

Поместите видео в каталог ресурсов в папке с именем 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();
Другие вопросы по тегам