1. 暫停觸發(fā)流程
1.通過SDL觸發(fā)事件調(diào)用toggle_pause
2.toggle_pause調(diào)用stream_toggle_pause
3.stream_toggle_pause修改暫停變量
2. toggle_pause
static void toggle_pause(VideoState *is)
{
stream_toggle_pause(is);
is->step = 0;
}
3. stream_toggle_pause
static void stream_toggle_pause(VideoState *is)
{
// 如果當(dāng)前是暫停 -> 恢復(fù)播放
// 正常播放 -> 暫停
if (is->paused) {// 當(dāng)前是暫停,那這個時候進來這個函數(shù)就是要恢復(fù)播放
/* 恢復(fù)暫停狀態(tài)時也需要恢復(fù)時鐘,需要更新vidclk */
// 加上 暫停->恢復(fù) 經(jīng)過的時間
is->frame_timer += av_gettime_relative() / 1000000.0 - is->vidclk.last_updated;
if (is->read_pause_return != AVERROR(ENOSYS)) {
is->vidclk.paused = 0;
}
// 設(shè)置時鐘的意義,暫停狀態(tài)下讀取的是單純pts
// 重新矯正video時鐘
set_clock(&is->vidclk, get_clock(&is->vidclk), is->vidclk.serial);
}
set_clock(&is->extclk, get_clock(&is->extclk), is->extclk.serial);
// 切換 pause/resume 兩種狀態(tài)
is->paused = is->audclk.paused = is->vidclk.paused = is->extclk.paused = !is->paused;
printf("is->step = %d; stream_toggle_pause\n", is->step);
}
這個函數(shù)可以知道,如果當(dāng)前狀態(tài)是暫停的話,那么就會進入if函數(shù)
看一下if函數(shù)流程,首先我們知道我們
is->frame_timer += av_gettime_relative() / 1000000.0 - is->vidclk.last_updated;
這個就是在之前的基礎(chǔ)上加上暫停到開始的時間
set_clock(&is->vidclk, get_clock(&is->vidclk), is->vidclk.serial);
get_clock當(dāng)是暫停狀態(tài)時就是獲取時鐘的pts
set_clock(&is->extclk, get_clock(&is->extclk), is->extclk.serial);
同理是設(shè)置外部時鐘的
is->paused = is->audclk.paused = is->vidclk.paused = is->extclk.paused = !is->paused;
就是將paused取反文章來源:http://www.zghlxwxcb.cn/news/detail-604103.html
看一下這4個pause會影響那些函數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-604103.html
- video_refresh 如果是暫停并且沒有強制刷新的話就不會調(diào)用該函數(shù),什么時候強制刷新之前有說過,比如修改ffplay窗口大小
- read_thread中的pause只會對網(wǎng)絡(luò)流有效,而其他情況下pause并不會對read_thread有影響,而是繼續(xù)讀數(shù)據(jù)寫入到隊列中
- get_master_clock中會調(diào)用get_clock,而get_clock中如果是paused狀態(tài)的話就會直接返回pts
- audio_decode_frame函數(shù)會受到paused影響,會直接返回-1,然后sdl_audio_callback接受到會進行判斷,然后輸出靜音數(shù)據(jù),并未有暫停
到了這里,關(guān)于ffplay播放器剖析(7)----音視頻暫停模塊分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!