2012-01-09 10 views
26

AndroidのアクティビティでVideoViewで読み込む必要がある.MP4ビデオファイルがあります。これらの動画には、ユーザーの言語(英語、フランス語、日本語...など)に対応する複数のオーディオトラックが含まれています。
このような機能を提供するためのヘルプやドキュメントを見つけるのに予期せぬトラブルが発生しました。私は現在、ビデオを読み込んでMediaControllerでVideoViewで再生できますが、オーディオトラックは変更できません。

Android SDKがこれを行う簡単な方法を提供しているかどうかはわかりません。私の問題を解決する方法はわかりません。私は、すべてのオーディオトラックを抽出し、言語に応じてMediaPlayerに必要なオーディオをロードしてから、オーディオとビデオを一緒に再生することを考えていました。しかし、私はいくつかの同期の問題が発生する可能性があり、私がこれを行うのを防ぐ恐れがあります。

手掛かりがある場合は、この問題を開始するのに役立つアドバイスがあれば、歓迎するよりも大事です。Android:VideoViewの複数のオーディオトラック?

+0

これに関する進捗状況はありますか? – runor49

+0

あなたは、選択したソリューションのコメントに基づいて進捗したようです。あなたは、あなたが上記の仕事をどのように達成したかを分かち合えますか – LostPuppy

+0

これは古い疑問ですが、この問題に対する簡単な解決策があります。私の答えを見てください。 –

答えて

3

まだ自分自身をテストしていませんが、Vitamioライブラリは、(他の興味深い機能の中でも)複数のオーディオトラックをサポートしているようです。 AndroidのVideoViewクラスとAPI互換です。

おそらくVitamioVideoView.setAudioTrack()を使用して(たとえば、ロケールに基づいて)設定する必要があります。詳細については、Vitamio API docsを参照してください。

+0

私は最後に、私が提案したことを正確に行いました。私はビデオとオーディオのデータを分離し、ユーザーの言語に応じてMediaPlayerにオーディオをロードし、両方のストリームを同期させました。それはかなり汚い解決策でしたが、私が仕事をしなければならなかった時には受け入れられました。 私はあなたのソリューションをテストしていませんが、それが私が必要としていたものとまったく同じであるように私はそれを受け入れます。とにかくありがとうございました ! – Vahron

-1

VideoViewクラスはrequire.Uをサポートしていないため、オーディオストリームデータをJavaレイヤーのAudioTrackクラスで再生する必要があります。

+0

は真ではありません。私の答えを見てください。 –

3

不要サードパーティのライブラリ:私の知る限り

mVideoView.setVideoURI(Uri.parse("")); // set video source  

mVideoView.setOnInfoListener(new MediaPlayer.OnInfoListener() { 
    @Override 
    public boolean onInfo(MediaPlayer mp, int what, int extra) { 
     MediaPlayer.TrackInfo[] trackInfoArray = mp.getTrackInfo(); 
     for (int i = 0; i < trackInfoArray.length; i++) { 
      // you can switch out the language comparison logic to whatever works for you 
      if (trackInfoArray[i].getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_AUDIO 
       && trackInfoArray[i].getLanguage().equals(Locale.getDefault().getISO3Language()) { 
       mp.selectTrack(i); 
       break; 
      } 
     } 
     return true; 
    } 
}); 

- オーディオトラックが正しく認識させるために3文字のISO 639-2でエンコードする必要があります。

+0

あなたはそれらのオーディオトラックをエンコードする方法を教えてください –

+0

ffmpegは良い場所です –

+0

あなたはオーディオトラックが3文字のiso 639-2でエンコードされるべきだと書いています。それが何であるか説明できますか? –

関連する問題