[android] アセットのフォルダや生のフォルダからアンドロイドで動画を再生するには?


5 Answers

試してください:

AssetFileDescriptor afd = getAssets().openFd(fileName);
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
Question

私はアンドロイドエミュレータでビデオを再生しようとしています私は自分の資産フォルダと生のフォルダにビデオを持っているしかし、まだいくつかの研究をした後私は私のエミュレータでビデオを再生することはできません私はアンドロイド2.1で働いています私のビデオフォーマットはMP4ですそれは問題になるはずだと思いません誰かが私にもう少し理解できるようにサンプルコードを教えてもらえますか?

問題は、私がビデオを表示する必要があるVideoViewがURIまたはファイルパスをビデオに向けることだけであるということです。

Rawまたはassetsフォルダにビデオを保存すると、入力ストリームまたはファイル記述子しか取得できず、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

起動時にファイルをsdcardにコピーする方法は他にありません。それは時間とメモリの浪費のようです。




  1. MediaPlayer APIとサンプルコードを使用してください。

  2. メディアファイルをrawフォルダに入れます。

  3. file descriptorfile descriptor取得しfile descriptor

  4. mediaplayer.setDataSource(fd,offset,length); - その3つの引数のコンストラクタ。

  5. その後、 onPrearedmediaplayer.start();




あなたと同じ問題があるように思えるかもしれません。 MP4を使用する代わりに、3GPPは可能ですか? 私は、ビデオコンバータとしてHandBrakeのようなものを使っていたと思います...あなたは、H.264xのような正しいエンコーダを持っているかどうかを確認する必要があります。 少し漠然として申し訳ありませんが、それはしばらくありました。 また、可能であれば、アンドロイド2.1についてもう気にしないでください。また、何か物事はエミュレータではうまくいかないでしょう。 だから、それが多くのデバイスで動作するならば、それがうまく動作すると仮定します(特に異なる製造元で)

ここで、あなたは私の問題を読むことができ、どのように問題を解決したのですか(長い間、誰も答えを得ていません)。 私はここでもっと詳しく説明しました: アンドロイドメディアプレーヤーが動作していません




あなたは手動でSDCardにビデオを入れて、SDCardでビデオストアを再生しようとしましたか?

動作している場合は、RawからSDcardにコピーする方法をここで見つけることができます:

android-copy-rawfile-to-sdcard-video-mp4




私はあなたがこれを見る必要があると思う - それはあなたが望むすべてを持っている必要があります。

編集:あなたがリンクを見たくない場合 - これはかなりあなたが好きなことを要約します。

MediaPlayer mp = MediaPlayer.create(コンテキスト、R.raw.sound_file_1); mp.start();

しかし、私はまだリンクの情報を読むことをお勧めします。




PlayVideoActivity.java:

public class PlayVideoActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play_video);

        VideoView videoView = (VideoView) findViewById(R.id.video_view);
        MediaController mediaController = new MediaController(this);
        mediaController.setAnchorView(videoView);
        videoView.setMediaController(mediaController);
        videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.documentariesandyou));
        videoView.start();
    }
}

activity_play_video.xml:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >

    <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </VideoView>

</LinearLayout>



Related