Как загрузить видео из папки с активами? (чтобы воспроизвести их с помощью VideoView)

Мне нужно открыть видео mp4 из папки с ресурсами и воспроизвести его с помощью VideoView.

Я пробовал с этими двумя вариантами, но ни один из них не работает....

mVideoView.setVideoPath("file:///android_asset/videos.mp4");
mVideoView.requestFocus();
mVideoView.start();

и...

String uriPath = "file:///android_asset/videos.mp4";
Uri uri = Uri.parse(uriPath);
mVideoView.setVideoURI(uri);
mVideoView.requestFocus();
mVideoView.start();

Эти параметры не работают, но если я пытаюсь открыть видео с SDCARD, оно работает отлично, тогда проблема заключается в том, что я пытаюсь загрузить видео из папки ресурсов.

Что я делаю неправильно?

Благодарность


person NullPointerException    schedule 25.11.2011    source источник


Ответы (3)


Я не знаю, как загрузить видео из папки с ресурсами. Но я знаю, как загрузить их из папки /res/raw/:

String uriPath = "android.resource://yourapplicationpackage/raw/videofilenamewithoutextension";
Uri uri = Uri.parse(uriPath);
video.setVideoURI(uri);
person js-    schedule 25.11.2011
comment
я не использую необработанную папку, я использую активы - person NullPointerException; 25.11.2011
comment
Просто измените часть raw на **assets** .... поздно, но может быть полезно для тех, кто просматривает это сейчас - person Nitin Bansal; 30.01.2013
comment
Здравствуйте, я использовал VideoView для воспроизведения видео из необработанной папки, но видео не воспроизводится в более низкой версии ниже 2.3. Он показывает мне ошибку. Видео не может быть воспроизведено, пожалуйста, подскажите, в чем проблема, так как видео воспроизводится в других версиях. - person Dory; 30.09.2013
comment
@NidhiGondhia попробуйте это: String uriPath = android.resource:// + getPackageName() + / + R.raw.my_video_file; - person BoJIHa npocmombI; 15.10.2013
comment
указано ли имя пакета как com.abc.xyz или что-то вроде com/abc/xyz? - person Illegal Argument; 12.11.2013
comment
Это не работает. Я пробовал android.resource://${packageName}/assets/videoname - person c-an; 01.11.2019

Воспроизведение файла .mp4 из \assets невозможно, его необходимо загрузить из папки \raw.

Пример:

если у вас есть файл с именем video.mp4 внутри папки /raw:

String fileName = "android.resource://"+  getPackageName() + "/raw/video";
VideoView vv = (VideoView) this.findViewById(R.id.surface);
vv.setVideoURI(Uri.parse(fileName));
vv.start();
person Jorgesys    schedule 07.02.2014
comment
После часов, потраченных на поиски, это был единственный ответ, который решил мою проблему! Большое спасибо! - person Joe Aspara; 09.10.2016
comment
Вопрос касается assets. Не raw. - person c-an; 01.11.2019
comment
Это невозможно, поэтому я предлагаю другой вариант. - person Jorgesys; 04.11.2019
comment
возможно ! только что дал актив:///youvideo.mp4 - person zeus; 22.05.2020

ОТРЕДАКТИРОВАНО

Пытаться:

this.setContentView(R.layout.videoview);        
mVideoView = (VideoView) this.findViewById(R.id.surface_view);        
SurfaceHolder holder = mVideoView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
MediaPlayer player = new MediaPlayer();
player.setDisplay(holder);        
AssetFileDescriptor afd;
try {
    afd = getAssets().openFd("v.mp4");        
    player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
    player.prepareAsync();
    player.setOnPreparedListener(new OnPreparedListener() {

     @Override
     public void onPrepared(MediaPlayer mp) {
        mp.start();
     }
  });

} catch (Exception e) { e.printStackTrace();}   
person Caner    schedule 25.11.2011
comment
я не использую MediaController, потому что мне нужно скрыть элементы управления видеопросмотром... тогда я не знаю, как назначить файловый дескриптор объекту видеопросмотра. - person NullPointerException; 25.11.2011
comment
также.... Метод setDataSource(FileDescriptor, long, long) не определен для типа MediaController - person NullPointerException; 25.11.2011
comment
Когда вы впервые задали вопрос, там было MediaController. Теперь я запутался, на что на самом деле похож ваш код - person Caner; 25.11.2011
comment
Я попробовал с MC сейчас и... Метод setDataSource(FileDescriptor, long, long) не определен для типа MediaController - person NullPointerException; 25.11.2011
comment
Я пытаюсь заставить работать ваш код, но я не могу, я не понимаю, как найти ваш код с моим кодом .... я не знаю, что я делаю неправильно. Я отредактировал свой вопрос, проверьте его. - person NullPointerException; 25.11.2011
comment
Попробуйте заменить mVideoView.start(); на player.start(); - person Caner; 25.11.2011
comment
если я изменю эту строку, я получу эту ошибку: ERROR/MediaPlayer(2878): start вызывается в состоянии 2 - person NullPointerException; 25.11.2011
comment
и: ОШИБКА/MediaPlayer(2878): Ошибка (-38,0) - person NullPointerException; 25.11.2011