在计算时,是按照四舍五入的方式来计算的,即小于500ms的舍去,不计入时长;大于等于500ms的按照1s计入时长。这一点需要特别注意,因为在播放较短的文件时,在更新进度条时滑动块可能移动的不平滑。
计算方法如下:
2. AwesomePlayer取得时长
status_t AwesomePlayer::getDuration(int64_t *durationUs) { Mutex::Autolock autoLock(mMiscStateLock); if (mDurationUs < 0) { return UNKNOWN_ERROR; } *durationUs = mDurationUs; // 文件时长,在播放器界面上显示的总时长 return OK; }如果是视频文件,则video track和audio track中都可以取得各自的时长,但由于是先初始化的video track,所以会先取得video的时长赋给mDurationUs。
再初始化audio track时,又把取得的audio的时长赋给mDurationUs。所以,最后取得的文件时长就是audio track的时长,即播放器界面上显示的文件时长其实是audio track的时长。
所以,无论是播放视频还是音频文件,时长显示的都是audio track的时长。
if (mVideoTrack != NULL && mVideoSource == NULL) {
status_t err = initVideoDecoder();// 可以取得video track的时长赋给文件时长
if (err != OK) {
abortPrepare(err);
return;
}
}
if (mAudioTrack != NULL && mAudioSource == NULL) {
status_t err = initAudioDecoder(); // 可以取得audio track的时长赋给文件时长
if (err != OK) {
abortPrepare(err);
return;
}
}
本文介绍StagefrightPlayer如何通过四舍五入计算播放位置及文件总时长,并指出实际显示的是音频轨时长。
810

被折叠的 条评论
为什么被折叠?



