iOS ijkplayer 视频渲染(显示)

来源:互联网 发布:node模块化的优缺点 编辑:程序博客网 时间:2024/05/20 22:35


iOS ijkplayer 视频渲染(显示)static int video_refresh_thread(void *arg){    FFPlayer *ffp = arg;    VideoState *is = ffp->is;    double remaining_time = 0.0;    while (!is->abort_request) {        if (remaining_time > 0.0)            //休眠等待            av_usleep((int)(int64_t)(remaining_time * 1000000.0));        remaining_time = REFRESH_RATE;        if (is->show_mode != SHOW_MODE_NONE && (!is->paused || is->force_refresh))            //remaining_time的计算在video_refresh中            //调用video_refresh方法,刷新视频帧            video_refresh(ffp, &remaining_time);    }    return 0;}音视频同步的重点是在video_refresh中/* called to display each frame */static void video_refresh(FFPlayer *opaque, double *remaining_time){     ……            /* dequeue the picture */            lastvp = frame_queue_peek_last(&is->pictq);            vp = frame_queue_peek(&is->pictq);            /* compute nominal last_duration */            last_duration = vp_duration(is, lastvp, vp);            delay = compute_target_delay(ffp, last_duration, is);            time= av_gettime_relative()/1000000.0;            if (isnan(is->frame_timer) || time < is->frame_timer)                is->frame_timer = time;            if (time < is->frame_timer + delay) {                *remaining_time = FFMIN(is->frame_timer + delay - time, *remaining_time);                goto display;            }            is->frame_timer += delay;            if (delay > 0 && time - is->frame_timer > AV_SYNC_THRESHOLD_MAX)                is->frame_timer = time;}


原创粉丝点击