Как воспроизводить видео в Android из папки активов или сырой папки? - PullRequest
67 голосов
/ 12 июня 2010

Я пытаюсь воспроизвести видео в эмуляторе Android. У меня есть видео в папке с активами, а также в папке raw. Но после некоторых исследований я не могу воспроизвести видео в моем эмуляторе, я работаю на Android 2.1. Мой формат видеоmp4, так что я не думаю, что это должно быть проблемой. Может ли кто-нибудь просто дать мне пример кода, чтобы я мог понять немного больше?

Проблема в том, что VideoView, который мне нужен для отображения видео, будет приниматьтолько URI или путь к файлу, указывающий на видео.

Если я сохраняю видео в папке raw или assets, я могу получить только входной поток или дескриптор файла, и, похоже, ничего этого нельзя использовать для инициализации VideoView.

Обновление

Я более внимательно посмотрел пример MediaPlayer и попытался запустить MediaPlayer с FileDescriptor для файлов ресурсов, как показано в коде ниже:

SurfaceView videoView = (SurfaceView) findViewById(gettingStarted)
SurfaceHolder holder = videoView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
final MediaPlayer player = new MediaPlayer();
player.setDisplay(holder);

player.setDataSource(getAssets().openFd(fileName).getFileDescriptor());
player.prepareAsync();
player.setOnPreparedListener(new OnPreparedListener() {

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

Теперь яполучите следующее исключение:

java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed

Кажется, нет другого способа, кроме как скопировать файл на SD-карту при запуске, и это кажется пустой тратой времени и памяти.

Ответы [ 13 ]

0 голосов
/ 10 декабря 2011

В fileName необходимо указать относительный путь к файлу (без /asset), например:

player.setDataSource(
    getAssets().openFd(**"media/video.mp4"**).getFileDescriptor()
);
0 голосов
/ 01 июля 2010

MainCode

Uri raw_uri=Uri.parse("android.resource://<package_name>/+R.raw.<video_file_name>);

myVideoView=(VideoView)findViewbyID(R.idV.Video_view);

myVideoView.setVideoURI(raw_uri);
myVideoView.setMediaController(new MediaController(this));
myVideoView.start();
myVideoView.requestFocus();

XML

<?xml version="1.0" encoding="utf-8" ?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <VideoView
            android:id="+@/Video_View"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
        />
</LinearLayout>
0 голосов
/ 13 июня 2010
  1. Используйте API MediaPlayer и пример кода.

  2. Поместите файл мультимедиа в папку raw.

  3. Получить file descriptor в файл.

  4. mediaplayer.setDataSource(fd,offset,length); - это конструктор с тремя аргументами.

  5. Тогда когда onPreared, mediaplayer.start();

...