ijkplayer 进度计算
时间: 2023-08-01 22:14:22 浏览: 56
ijkplayer 的进度计算主要是基于音视频时钟的时间戳计算得出的。具体流程如下:
1. 通过 AVSyncClock 计算音视频时钟的当前时间戳,即当前播放时间。
2. 计算当前视频的播放进度,即已经播放的时间除以视频总时长。视频总时长可以通过 AVFormatContext 中的 duration 获取,单位是微秒。
```
int64_t currentVideoTime = av_rescale_q(avSyncClock->pts, avSyncClock->time_base, AV_TIME_BASE_Q);
int64_t videoDuration = formatCtx->duration;
double videoProgress = (double)currentVideoTime / (double)videoDuration;
```
3. 计算当前音频的播放进度,即已经播放的时间除以音频总时长。音频总时长可以通过 AVStream 中的 duration 获取,单位是微秒。
```
int64_t audioDuration = av_rescale_q(stream->duration, stream->time_base, AV_TIME_BASE_Q);
double audioProgress = (double)currentVideoTime / (double)audioDuration;
```
4. 取视频播放进度和音频播放进度中更小的一个作为当前的播放进度,因为音视频播放时是同步的。
```
double currentProgress = videoProgress < audioProgress ? videoProgress : audioProgress;
```
5. 将当前播放进度转换成百分比的形式,即乘以 100。
```
double currentProgressPercent = currentProgress * 100;
```
这样,就可以得到当前的播放进度了。需要注意的是,进度计算的精度会受到时钟计算和时间戳精度的影响,因此可能会存在一定的误差。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)