2016-03-24 11 views
7

私は現在自分で解決できる問題に直面しています。私のビデオビューが再生されないのはなぜですか?

My Androidアプリケーション(4.2および4.4向け)は、VideoPlayerとして動作します。私は制限アクセス(MODE_WORLD_READABLE)なしで私のアプリのファイルディレクトリにいくつかのビデオを入れて、プレイヤーは、デバイスやアプリケーションをシャットダウンするまで、それらを一つずつ読み取った。

時々、私はローカルビデオを読み込むしようとしているときの映像は、この警告を開始し、ログ印刷しないVideoView を使用して:たまに

03-24 12:10:50.493: W/MediaPlayer(12894): info/warning (701, 0) 

を、メディアプレーヤは、この状態を残しません私のアプリを殺す(またはデバイスを再起動する)まで。

そして、時には、ログが付き、前の警告後も継続:私は私のアプリを殺す(またはデバイスをリブートする)まで、第1のログとして

03-24 14:07:07.775: E/FFMpegMediaPlayer(100): start in mCurrentState in 
03-24 14:07:07.775: I/FFMpegMediaPlayer(100): ****************************************** 
03-24 14:07:07.775: E/FFMpegMediaPlayer(100): start in mCurrentState = 8 
03-24 14:07:07.775: I/FFMpegMediaPlayer(100): starting main player thread:2013-11-20 
03-24 14:07:07.775: I/RkAudioPlayer(100): mAudioSink->open in mSampleRate = 48000 channels = 2 
03-24 14:07:07.775: I/FFMpegMediaPlayer(100): ****************************************** 
03-24 14:07:07.775: I/FFMpegMediaPlayer(100): mCurrentState = 8 
03-24 14:07:07.775: I/(100): starting thread 
03-24 14:07:07.775: D/AUDIO_DECOE(100): prepare() 
03-24 14:07:07.785: I/AudioHardwareALSA(100): Audio exiting sandby will open audio device 
03-24 14:07:07.895: E/ALSAModule(100): audio type flag: 0 

03-24 14:07:13.465: D/FFMpegMediaPlayer(100): url_feof=1,err=0 
03-24 14:07:13.465: I/FFMpegMediaPlayer(100): av_read_frame end of stream ret = -541478725 
03-24 14:07:13.465: W/MediaPlayer(9652): info/warning (950, 0) 
03-24 14:07:13.475: I/MediaPlayer(9652): Info (950,0) 
03-24 14:07:13.475: E/ERROR : INFO MEDIAPLAYER(9652): what:950, extra:0 
03-24 14:07:17.695: D/AudioHardwareALSA(100): AudioStreamOutALSA::standby()..... 

、この1の後、何もappenedません。

また、私はonPrepared Callbackが起動したかどうかを知るためにいくつかのログ情報を入れました。これはOKです。

ビデオを再生する唯一の方法は、問題が発生したときにデバイスを再起動することです。ここで

が私のプレーヤーのいくつかのコードです:

audioManager = (AudioManager) applicationContext.getSystemService(Context.AUDIO_SERVICE); //this is in the constructor of my singleton player 

    //all the following code are encapsulated in a method which is called every time a new video must be play. 
    setCompletionListener(); //in here I call videoview.stopPlayback(); and I recall this method to start another video 
    setErrorListener(); //here too I call videoview.stopPlayback(); 

    videoview.setVideoPath(applicationContext.getFilesDir() + "/" + myVideoFile.getFileName()); 

    videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(final MediaPlayer mediaPlayer) { 
      audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
      audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 90, 0); 
      mediaPlayer.setVolume(12.0f, 12.0f); 
      audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0)   
      mediaPlayer.start(); 
     } 
    }); 

私の質問は:私のvideoviewが正しく、すべての時間を再生していないのはなぜ?問題は、実行の2〜3時間後に、時には自分のアプリの起動時に表示されることがあります。

+0

これは他の携帯電話でも起こりますか? –

+0

これまでは専用ソリューションのために1種類のデバイスしか使用していませんでしたが、現在はタブレットを使用しています。私はあなたに数時間のフィードバックをお届けします。あなたの興味に感謝します。 – naike

+0

VideoViewの実装自体に問題があると思っています。http://www.piterwilson.com/blog/2014/03/11/android-mediaplayer-not-quite-there-yet/もし私があなただったらsdkを最新バージョンに変更するいくつかのより多くの研究。たぶんGoogleはこれをすでに修正しています。 –

答えて

1

コード701は、メディアプレーヤは、より多くのデータをバッファリングし、一時的に再生を一時停止し、これが正常であることを意味

のpublic static final MEDIA_INFO_BUFFERING_START

MediaPlayerの一時的 バッファするために内部で再生を一時停止され、INTより多くのデータ。

Constant Value: 701 (0x000002bd)

主な問題は、エラーコード950

info/warning (950, 0) 
I/MediaPlayer(9652): Info (950,0) 
E/ERROR : INFO MEDIAPLAYER(9652): what:950, extra:0 

、ここで説明したように、エラー・コードの9xx枝に該当950エラーコードです: What does MediaPlayer info/warning (973, 0) mean?

エラーは可能性がありあなたが再生しようとしているファイルではなく、dev氷またはあなたのコード。このSO questionにはさらに詳しい情報があります。

また、エラーを解決するための適切な文書と具体的な手順がないように思われるので、this oneというバグとして報告してください。