ijkplayer阅读笔记02-创建音视频读取,解码,播放线程

来源:互联网 发布:使命召唤高级战争优化 编辑:程序博客网 时间:2024/06/08 20:01

本节主要介绍音视频读取和解码线程的创建及启动,代码流程如下:

IjkMediaPlayer_prepareAsync{   ijkmp_prepare_async_l{     ijkmp_change_state_l(mp, MP_STATE_ASYNC_PREPARING);     msg_queue_start(&mp->ffplayer->msg_queue);     SDL_CreateThreadEx(&mp->_msg_thread, mp->msg_loop, mp, "ff_msg_loop");     ffp_prepare_async_l(mp->ffplayer, mp->data_source);     stream_open{        frame_queue_init(&is->pictq, &is->videoq, ffp->pictq_size, 1)        frame_queue_init(&is->sampq, &is->audioq, SAMPLE_QUEUE_SIZE, 1)        packet_queue_init(&is->videoq);        packet_queue_init(&is->audioq);        SDL_CreateThreadEx(&is->_video_refresh_tid, video_refresh_thread, ffp, "ff_vout") //视频显示线程创建        SDL_CreateThreadEx(&is->_read_tid, read_thread, ffp, "ff_read"){ //读取线程创建            read_thread { //读取线程               stream_component_open(ffp, st_index[AVMEDIA_TYPE_AUDIO]);{ //音频读取和解码                  SDL_CreateThreadEx(&is->_audio_tid, audio_thread, ffp, "ff_audio_dec");               }               stream_component_open(ffp, st_index[AVMEDIA_TYPE_VIDEO]);{ //视频读取和解码                  ffp->node_vdec = ffpipeline_open_video_decoder(ffp->pipeline, ffp);                  SDL_CreateThreadEx(&is->_video_tid, video_thread, ffp, "ff_video_dec");               }               for (;;) {                  if (is->seek_req) {                       avformat_seek_file();                  }                   ret = av_read_frame(ic, pkt);                  packet_queue_put(&is->audioq, pkt); or packet_queue_put(&is->videoq, pkt);                 }            }        }     }   }}



0 0
原创粉丝点击