我目前面临的问题是我可以自行解决。
我的Android应用程序(为4.2和4.4构建)充当VideoPlayer。我已将一些视频放入我的应用程序的文件目录中,没有限制访问权限(MODE_WORLD_READABLE),播放器逐个读取它们,直到我关闭设备或应用程序。
有时,当我尝试使用VideoView阅读本地视频时 视频无法启动,日志会打印此警告:
03-24 12:10:50.493: W/MediaPlayer(12894): info/warning (701, 0)
有时,媒体播放器在我杀死我的应用程序(或重启设备)之前不会离开此状态。
有时,日志会在上一次警告之后继续:
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().....
作为第一个日志,在此之后,在我杀死我的应用程序(或重启设备)之前没有任何内容。
另外,我已经提供了一些日志记录信息,以便知道是否触发了onPrepared Callback,这是正常的。
我发现再次播放视频的唯一方法是在问题发生时重启设备。
以下是我的播放器的一些代码:
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();
}
});
我的问题是:为什么我的视频观看次数不能正常播放?有时在执行2或3小时后或有时在我的应用程序启动时出现问题。
答案 0 :(得分:1)
代码701
表示媒体播放器正在缓冲更多数据并暂时暂停播放,这是正常的
public static final int MEDIA_INFO_BUFFERING_START
MediaPlayer暂时暂停内部播放 缓冲更多数据。
Constant Value: 701 (0x000002bd)
主要问题是错误代码950
info/warning (950, 0)
I/MediaPlayer(9652): Info (950,0)
E/ERROR : INFO MEDIAPLAYER(9652): what:950, extra:0
错误代码950
属于错误代码的9xx
分支,如下所述:
What does MediaPlayer info/warning (973, 0) mean?
错误可能与您尝试播放的文件有关,而不是设备或您的代码。此SO question中有更多信息。
还尝试将其报告为this one的错误,因为似乎没有适当的文档和具体步骤来解决错误。