Android:视频搜索错误
我有一个带视频播放器的应用程序。我实现了一种在视频中存储当前位置的方法,以便下次用户播放同一视频时,从用户离开的位置播放。但是,我无法从视频离开的位置加载视频。日志cat连续显示此错误Android:视频搜索错误,android,video,seek,Android,Video,Seek,我有一个带视频播放器的应用程序。我实现了一种在视频中存储当前位置的方法,以便下次用户播放同一视频时,从用户离开的位置播放。但是,我无法从视频离开的位置加载视频。日志cat连续显示此错误 10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1 10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x2b59c8 0(int#
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x2b59c8 0(int# 0/0)
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x4a2ad0 0(int# 0/0)
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x2b5a20 0(int# 0/0)
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x1c09a0 0(int# 0/0)
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.699: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x3dafa0 0(int# 0/0)
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Unknown event: 1
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x2b59c8 0(int# 0/0)
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x1c4028 0(int# 0/0)
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x2b5a20 0(int# 0/0)
10-23 21:23:23.707: ERROR/TI_Video_Decoder(1250): Corrupted Data in buffer 0x4a2ad0 0(int# 0/0)
这是我播放视频的代码。有人能告诉我为什么我会犯这个错误吗。谢谢这是密码
公共类玩家扩展活动{
private static Context mContext;
private int mStartTime = 0;
private int sliderPosition;
private int setTime;
private String uriString;
private MediaPlayer player;
private class ErrorListener implements OnErrorListener {
private class CompletionListener implements OnCompletionListener {
// FIXME: @Override
public void onCompletion(MediaPlayer mp) {
mContext = null;
mStartTime = 0;
System.exit(-1);
}
}
private static Context getContext() {
return mContext;
}
private static void setContext(Context context) {
mContext = context;
}
@Override
public void onCreate(Bundle savedInstanceState) {
System.gc();
super.onCreate(savedInstanceState);
setContext(this);
Intent intent = getIntent();
Uri uri = intent.getData();
uriString = intent.getStringExtra("filename" );
if (uri != null) {
setContentView(R.layout.videoview);
VideoView videoView = (VideoView) findViewById(R.id.videoview);
videoView.setVideoURI(uri);
videoView.setMediaController(new MediaController(this));
videoView.setOnErrorListener(new ErrorListener());
videoView.setOnCompletionListener(new CompletionListener());
videoView.setKeepScreenOn(true);
videoView.requestFocus();
}
}//onCreate Method Ends
public void onStart(){
super.onStart();
VideoView videoView = (VideoView) findViewById(R.id.videoview);
SharedPreferences Settings = getSharedPreferences("MyStoragePreferences", MODE_PRIVATE);
if(Settings.contains(uriString))
{
setTime= Settings.getInt(uriString, 0);
videoView.seekTo(setTime);
videoView.start();
}
else
{
videoView.seekTo(mStartTime);
videoView.seekTo(0);
if (mStartTime == 0){
videoView.start();
}
}
}
public void onSaveInstanceState(Bundle outState){
VideoView videoView = (VideoView) findViewById(R.id.videoview);
mStartTime = videoView.getCurrentPosition();
outState.putInt("restartTime", mStartTime);
super.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
mContext = null;
super.onDestroy();
}
@Override
protected void onStop(){
super.onStop();
VideoView videoView = (VideoView) findViewById(R.id.videoview);
videoView.stopPlayback();
}
@Override
protected void onPause(){
super.onPause();
VideoView videoView = (VideoView) findViewById(R.id.videoview);
sliderPosition= videoView.getCurrentPosition();
SharedPreferences Settings = getSharedPreferences("MyStoragePreferences", MODE_PRIVATE);
SharedPreferences.Editor prefEditor = Settings.edit();
prefEditor.putInt(uriString, sliderPosition);
prefEditor.commit();
}
}来自文档: 虽然异步的
seekTo(int)
调用返回正确的方式,但实际的seek操作可能需要一段时间才能完成,尤其是对于流式传输的音频/视频。当实际搜索操作完成时,如果通过setOnSeekCompleteListener(OnSeekCompleteListener)
预先注册了一个OnSeekCompleteListener
,内部播放器引擎将调用用户提供的OnSeekComplete.OnSeekComplete()
您可能会出现此错误的原因是媒体播放器搜索速度较慢,因此当您开始播放视频时,尚未完成搜索。因此它读取的缓冲区已损坏事实上,先生,我等待了几分钟,但它没有工作,同时logcat不断生成错误,我在问题中显示了这些错误。您不应该等待,您应该使用
OnSeekCompleteListener
进行等待。在SeekCompleteListener上的中调用videoView.start()
,先生,谢谢您的回答。你能评论一下我为什么会出现“缓冲区中的数据损坏”错误吗??谢谢你最后的建议,先生。我应该使用videoview还是mediaplayer?请继续查看本页的评论。你的帮助可能会解决我的问题。很多人不叫我“先生”,我还没有被封为爵士。然而为了回答您的问题,我建议您使用的媒体框架,他们有。它是免费的。