BUG分析:
2018-05-11 本文已影响0人
小磊长江大
问题4:每次进入播放时上报的本次播放视频ID均为0,期望每次进入播放显示的ID不同
MediaPlayer.java
private void setDataSource(String path, String[] keys, String[] values)
throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
disableProxyListener();
getSubtitleService();
final Uri uri = Uri.parse(path);
if ("file".equals(uri.getScheme())) {
path = uri.getPath();
}
final File file = new File(path);
mPath = path;
if (file.exists()) {
FileInputStream is = new FileInputStream(file);
FileDescriptor fd = is.getFD();
setDataSource(fd);
is.close();
} else {
_setDataSource(path, keys, values);
}
String mMesg = new String("setDataSource,url:");
mMesg = mMesg + path ;
final String tmpPath = path;
save_log_in_file(PRINT_LOG_SETPLAYER_SOURCE,mMesg);
cmd = null;
cmd = new Intent("MEDIA_PLAY_MONITOR_MESSAGE");
Looper looper = Looper.getMainLooper();
Handler xHandler = new Handler(looper) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0x2f:
Context tmpContetx = ActivityThread.currentApplication()
.getApplicationContext();
if (!mSendPrepareEvent) {
long start = System.currentTimeMillis();
Log.d(TAG, "MEDIA_SET_DATASOURCE : "
+ mSetDataSourceTime);
cmd.putExtra("TYPE", "PLAY_PREPARE");
cmd.putExtra("START_TIME", start);
cmd.putExtra("URL", tmpPath);
//setDataSource时并没有ID,ID在prepare后才产生,因此必须拿上一次的ID+1,或者jni层prepare后拿ID
int next_id = SystemProperties.getInt("sys.next.player_id",1);
cmd.putExtra("ID", next_id);
tmpContetx.sendBroadcast(cmd);
mSendPrepareEvent = true;
}
return;
}
super.handleMessage(msg);
}
};
Message message = xHandler.obtainMessage(0x2f);
xHandler.sendMessage(message);
}
在play start时更新一次ID
case MEDIA_GET_FIRST_PCR:
if(mContext != null){
long start = System.currentTimeMillis();
int starttime = getCurrentPosition();
cmd.putExtra("TYPE", "PLAY_START");
cmd.putExtra("PLAY_TIME", starttime/1000);
cmd.putExtra("END_TIME", System.currentTimeMillis());
info = getMediaInfo();
cmd.putExtra("ID", info.player_id);
cmd.putExtra("BITRATE", info.bitrate);
cmd.putExtra("DURATION", info.duration);
SystemProperties.set("sys.next.player_id",String.valueOf(info.player_id + 1));
if(info.total_video_num>=1){
cmd.putExtra("WIDTH", info.videoInfo[0].width);
cmd.putExtra("HEIGHT", info.videoInfo[0].height);
}
mContext.sendBroadcast(cmd);
}
return;
AmlogicPlayer.cpp
mPlayer_id = player_start(&mPlay_ctl, (unsigned long)this);
if (mPlayer_id >= 0) {
LOGV("Start player,pid=%d\n", mPlayer_id);
char str_id[10];
sprintf(str_id, "%d", mPlayer_id);
property_set("sys.next.player_id",str_id);
if (fastNotifyMode || (PropIsEnable("media.amplayer.fast_prepare",0) && mPlay_ctl.auto_buffing_enable == 1)) {
sendEvent(MEDIA_PREPARED);
prepare_complete = bufferGettime();//added for record prepare time
ALOGE("PRINT_LOG_PREPARED,time=%d\n", (int)(prepare_complete-prepare_start)/1000);
sendEvent(PRINT_LOG_PREPARED,(int)(prepare_complete-prepare_start)/1000);
}
return NO_ERROR;
}