Androidでアセットフォルダまたはrawフォルダからビデオを再生するにはどうすればいいですか? 質問する

Androidでアセットフォルダまたはrawフォルダからビデオを再生するにはどうすればいいですか? 質問する

Android エミュレーターでビデオを再生しようとしています。ビデオはアセット フォルダーと Raw フォルダーに保存されていますが、調査した後もエミュレーターでビデオを再生できません。Android 2.1 を使用しています。ビデオ形式は mp4 なので、問題はないと思います。もう少し理解できるように、サンプル コードを教えていただけませんか。

問題は、ビデオを表示するために必要な VideoView が、ビデオを指す URI またはファイル パスのみを取得することです。

ビデオを raw または asset フォルダーに保存すると、入力ストリームまたはファイル記述子しか取得できず、VideoView の初期化に使用できるものは何もないようです。

アップデート

MediaPlayer の例を詳しく調べ、以下のコードのようにアセット ファイルへの FileDescriptor を使用して MediaPlayer を起動しようとしました。

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 カードにコピーする以外に方法はないようで、時間とメモリの無駄のように思えます。

ベストアンサー1

## Android 1.6 以降で完璧に動作 ##

getWindow().setFormat(PixelFormat.TRANSLUCENT);
VideoView videoHolder = new VideoView(this);
//if you want the controls to appear
videoHolder.setMediaController(new MediaController(this));
Uri video = getUriFromRawFile(context, R.raw.your_raw_file);
//if your file is named sherif.mp4 and placed in /raw
//use R.raw.sherif
videoHolder.setVideoURI(video);
setContentView(videoHolder);
videoHolder.start();

その後

public static Uri getUriFromRawFile(Context context, @ResRaw int rawResourceId) {
    return Uri.Builder()
        .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
        .authority(context.getPackageName())
        .path(String.valueOf(rawResourceId))
        .build();
}

## 完全なチュートリアルを確認する ##

おすすめ記事