博客
关于我
ijkplayer 消息循环处理过程分析
阅读量:201 次
发布时间:2019-02-28

本文共 1437 字,大约阅读时间需要 4 分钟。

ijkplayer的消息队列事件处理流程

ijkplayer是一个基于FFPlay二次开发的轻量级Android/iOS视频播放器,实现了跨平台功能。底层播放控制的C代码和上层的iOS平台操作控制的OC代码通信都依赖于消息队列进行交互。理解这个消息队列的处理流程对于掌握ijkplayer的工作原理至关重要。

一、消息队列初始化

  • initWithContentURLString函数 在IJKMediaPlayerIJKFFMoviePlayerController.m中,调用ijkmp_ios_create函数初始化IjkMediaPlayer结构时,传入了一个消息循环函数指针。这个函数负责创建IjkMediaPlayer的结构,并将消息循环函数指针赋值给msg_loop成员变量。

  • ijkmp_ios_create函数 在ijkplayer_ios.m文件中,调用ijkmp_create(msg_loop)函数。这个函数负责创建IjkMediaPlayer结构,并将消息循环函数指针赋值给msg_loop成员变量。

  • ijkmp_create函数 在ijkplayer.c文件中,创建IjkMediaPlayer结构后,将消息循环函数指针赋值给msg_loop成员变量,并准备好运行消息循环处理线程。

  • 二、消息队列的消息循环处理函数启动

  • prepareToPlay函数 在IJKFFMoviePlayerController.m中,调用ijkmp_prepare_async(_mediaPlayer);函数,触发准备播放操作。

  • ijkmp_prepare_async函数 在ijkplayer.c中,进入加锁操作后调用ijkmp_prepare_async_l(mp);函数,准备播放操作。

  • ijkmp_prepare_async_l函数 在ijkplayer.c中,调用mp->msg_thread = SDL_CreateThreadEx(&mp->_msg_thread, ijkmp_msg_loop, mp, "ff_msg_loop");创建消息循环处理线程,并运行消息循环函数。

  • ijkmp_msg_loop函数 在ijkplayer.c中,调用mp->msg_loop(arg);,启动消息循环处理函数。

  • 三、消息循环处理

  • media_player_msg_loop消息循环函数 在IJKFFMoviePlayerController.m中,调用ijkmp_get_msg(mp, &msg->_msg, 1);获取消息队列中的消息。然后调用[ffpController performSelectorOnMainThread:@selector(postEvent:) withObject:msg waitUntilDone:NO]将消息传递给OC层处理。

  • ijkmp_get_msg函数 在ijkplayer.c中,从消息队列中获取消息,并返回给上层处理。

  • postEvent函数 在IJKFFMoviePlayerController.m中,处理OC层的消息事件,调用相应的事件处理方法。

  • 整个流程分为三个部分:初始化、启动消息循环和消息处理。初始化阶段设置好结构和指针,启动阶段通过准备播放触发线程运行循环,处理阶段确保消息在不同层次被正确传递和执行。这样,iOS和FFPlayer之间的通信就得以高效完成,实现了跨平台的视频播放功能。

    转载地址:http://siqn.baihongyu.com/

    你可能感兴趣的文章
    Nginx 动静分离与负载均衡的实现
    查看>>
    Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
    查看>>
    nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    Nginx 反向代理配置去除前缀
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 多端口配置和访问异常问题的排查与优化
    查看>>
    Nginx 如何代理转发传递真实 ip 地址?
    查看>>
    Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 学习(一):Nginx 下载和启动
    查看>>
    nginx 常用指令配置总结
    查看>>
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    nginx 开启ssl模块 [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 结合 consul 实现动态负载均衡
    查看>>
    Nginx 负载均衡与权重配置解析
    查看>>