Jackarain / avplayer

一个基于FFmpeg、libtorrent的P2P播放器实现
421 stars 265 forks source link

开启播放线程后seek_to后,获取curr_play_time()错误 #13

Closed lihaoyxj closed 11 years ago

lihaoyxj commented 11 years ago

开启播放线程后seek_to后,获取curr_play_time()错误,是从0开始而不是seek_to的位置,是打五笔时,不看屏幕也不看键盘,看QQ造成的。

microcai commented 11 years ago

说清楚点,怎么重现。你的报告语法都存在错误, 实在费解。

lihaoyxj commented 11 years ago

bool CVideoParseDlg::StartVideoPlay( string Filename,int nStartTime ) { if (!win.open(Filename.c_str(), MEDIA_TYPE_FILE)) return false;

threadid = AfxBeginThread((AFX_THREADPROC)play_thread,(void*)&win);
double dCurrtime =nStartTime;
double dAlltime = win.duration();
double nProcess = (dCurrtime-10)/dAlltime;
char szTmp[200];
sprintf(szTmp,"%f,c:%f,a:%f",nProcess,dCurrtime,dAlltime);
LOGEX(__FILE__,__LINE__,szTmp);
///Sleep(200);我是在这里加了延时后则可以正常的达到获取进度到预期的位置,如果没有这句,则播放是到了seek_to,但是获取当前播放进度是从0开始
win.seek_to(nProcess);
bPlaying = true;
SetTimer(7,1000,NULL);
return true;

}

microcai commented 11 years ago

seek to 是有延时的。 seek 了立即获得时间是不行的。得等一下。

lihaoyxj commented 11 years ago

seek后,我是在定时器里,每隔一秒获得一次,相当于播放器的进度条,当不sleep直接seek后,获得的播放进度是从0开始,但实际的播放进度是seek的位置

microcai commented 11 years ago

不sleep直接seek是什么意思?从0开始又是什么意思? 麻烦学一下表达。

另外,不要在已经关闭的 issue 上继续回复

Jackarain commented 11 years ago

这个问题好像之前确实存在, 但我已经有过修改, 我将再进一步跟踪这个问题. 3Q

microcai commented 11 years ago

jack,我建议你重新开一个 issue ,然后写上详细的错误描述。

microcai commented 11 years ago

这样有助于追踪 bug

Jackarain commented 11 years ago

CAI, 你说的有道理, 不过这个就算了

lihaoyxj commented 11 years ago

threadid = AfxBeginThread((AFX_THREADPROC)play_thread,(void*)&win); win.seek_to(nProcess); 这个问题的根源我觉得应是线程在创建时相对较慢,而seek_to是调用创建线程时就调用了,从而在win这个对象中变成了类似 pos = nProcess;然后线程又调用了pos = 0;吧

Jackarain commented 11 years ago

此问题应该已修复.