ijkplayer源码---FFPlayer结构体1_qq_15255121的专栏-CSDN博客

ijkplayer源码---FFPlayer结构体2_qq_15255121的专栏-CSDN博客

ijkplayer源码---FFPlayer结构体3 SDL_Vout_qq_15255121的专栏-CSDN博客

SDL_Aout *aout;

aout是音频渲染

aout在那里赋值呢?

 IjkPlayer.java
@Override
public void prepareAsync() {try {mMediaPlayer.prepareAsync();} catch (IllegalStateException e) {mPlayerEventListener.onError();}
}IjkMediaPlayer.javapublic void prepareAsync() throws IllegalStateException {_prepareAsync();
}{ "_prepareAsync",          "()V",      (void *) IjkMediaPlayer_prepareAsync },static void
IjkMediaPlayer_prepareAsync(JNIEnv *env, jobject thiz)
{MPTRACE("%s\n", __func__);int retval = 0;IjkMediaPlayer *mp = jni_get_media_player(env, thiz);JNI_CHECK_GOTO(mp, env, "java/lang/IllegalStateException", "mpjni: prepareAsync: null mp", LABEL_RETURN);retval = ijkmp_prepare_async(mp);IJK_CHECK_MPRET_GOTO(retval, env, LABEL_RETURN);LABEL_RETURN:ijkmp_dec_ref_p(&mp);
}int ijkmp_prepare_async(IjkMediaPlayer *mp)
{assert(mp);MPTRACE("ijkmp_prepare_async()\n");pthread_mutex_lock(&mp->mutex);int retval = ijkmp_prepare_async_l(mp);pthread_mutex_unlock(&mp->mutex);MPTRACE("ijkmp_prepare_async()=%d\n", retval);return retval;
}static int ijkmp_prepare_async_l(IjkMediaPlayer *mp){......int retval = ffp_prepare_async_l(mp->ffplayer, mp->data_source);if (retval < 0) {ijkmp_change_state_l(mp, MP_STATE_ERROR);return retval;}......}int ffp_prepare_async_l(FFPlayer *ffp, const char *file_name){if (!ffp->aout) {ffp->aout = ffpipeline_open_audio_output(ffp->pipeline, ffp);if (!ffp->aout)return -1;}     }    

通过上面的路径可以知道SDL_Aout在设置url后,异步prepare时赋值

我们在

IjkMediaPlayer *ijkmp_android_create(int(*msg_loop)(void*)){mp->ffplayer->pipeline = ffpipeline_create_from_android(mp->ffplayer);}IJKFF_Pipeline *ffpipeline_create_from_android(FFPlayer *ffp)
{pipeline->func_open_audio_output    = func_open_audio_output;return pipeline;
fail:ffpipeline_free_p(&pipeline);return NULL;
}

我们又知道

SDL_Aout *ffpipeline_open_audio_output(IJKFF_Pipeline *pipeline, FFPlayer *ffp)
{return pipeline->func_open_audio_output(pipeline, ffp);
}

所以创建SDL_Aout的函数在

static SDL_Aout *func_open_audio_output(IJKFF_Pipeline *pipeline, FFPlayer *ffp)
{SDL_Aout *aout = NULL;if (ffp->opensles) {aout = SDL_AoutAndroid_CreateForOpenSLES();} else {aout = SDL_AoutAndroid_CreateForAudioTrack();}if (aout)SDL_AoutSetStereoVolume(aout, pipeline->opaque->left_volume, pipeline->opaque->right_volume);return aout;
}

可以看到有两种音频的方式opensles和AudioTrack

ijkplayer源码---FFPlayer结构体4 SDL_Aout相关推荐

  1. ijkplayer源码---FFPlayer结构体3 SDL_Vout

    SDL_Vout顾名思义应该和图像输出有关 SDL_Vout *vout; 我们看下vout那里进行的赋值 IjkMediaPlayer *ijkmp_android_create(int(*msg_ ...

  2. 【Linux 内核】实时调度类 ⑤ ( 实时调度类 rt_sched_class 源码分析 | 结构体字段及函数指针分析 )

    文章目录 一.rt_sched_class 结构体变量类型 sched_class 二.next 字段值 三.enqueue_task 函数指针值 四.dequeue_task 函数指针值 五.yie ...

  3. ijkplayer 源码分析(1):初始化流程

    一.ijkplayer 初始化流程 本文是基于 A4ijkplayer 项目进行 ijkplayer 源码分析,该项目是将 ijkplayer 改成基于 CMake 编译,可导入 Android St ...

  4. ffmpeg实战教程(十三)iJKPlayer源码简析

    要使用封装优化ijk就必须先了解ffmpeg,然后看ijk对ffmpeg的C层封装! 这是我看ijk源码时候的笔记,比较散乱.不喜勿喷~ ijk源码简析: 1.ijkplayer_jni.c 封装的播 ...

  5. ZooKeeper源码阅读心得分享+源码基本结构+源码环境搭建

    首发CSDN:徐同学呀,原创不易,转载请注明源链接.我是徐同学,用心输出高质量文章,希望对你有所帮助. 一.心得分享 如何阅读ZooKeeper源码?从哪里开始阅读?最近把ZooKeeper源码看了个 ...

  6. asterisk源码目录结构

    版本:asterisk-1.8.7.1 下载地址:asterisk-1.8.7.1.tar.gz main函数所在文件:main/asterisk.c (3182行) 文件夹: addons :ast ...

  7. 【原创】【专栏】《Linux设备驱动程序》--- LDD3源码目录结构和源码分析经典链接

    http://blog.csdn.net/geng823/article/details/37567557 [原创][专栏]<Linux设备驱动程序>--- LDD3源码目录结构和源码分析 ...

  8. RTOS之uCOS-II源码下载及源码目录结构、常见的RTOS!

    RTOS有众多种,用得最火的是FreeRTOS,因为它即使用于商业途径,也是开源免费的:其次是就是uCOS-II和uCOS-III.uCOS-II用于商业途径是需要付费的,但是对于学习研究却是免费的. ...

  9. linux与安卓系统目录,android系统架构及源码目录结构

    1. android系统架构: android系统架构采用了分层架构的思想,如下图所示,从上到下共4层,分别为:应用程序层.应用程序框架层.系统库和android运行时层.linux内核层. 每层功能 ...

最新文章

  1. 如何用 Git 优雅回退代码,别搞错了!
  2. Forrester发布最新云化数仓象限报告: 阿里云获评“强劲表现者”,排名国内第一
  3. intitle:客服机器人代码_游戏客服能影响企业发展?千万别大意
  4. 算法复杂度为O(N) 的排序算法
  5. elastic search java_在 Java 应用程序中使用 Elasticsearch
  6. 当我们的代码遇到问题的时候....;要想不遇到问题,写代码的时候要.....
  7. 国服服务器_外服玩家热议LOL国服倒计时插件:说好的公平竞技呢?
  8. 2021全球权威AI性能竞赛MLPerf最新榜单: 浪潮获18项冠军几近半壁江山
  9. 2021年下半年网络工程师下午真题及答案解析
  10. 笨办法学 Python · 续 练习 19:改善性能
  11. 服务器启动jupyter
  12. Python 实现单例模式的一些思考
  13. oligo包常用函数
  14. 程序员工资到底有多高?国内哪个城市挣得最多?有没有你在的城市
  15. 什么是全栈工程师 摘自360
  16. 解决:未定义标识符 “sleep“ 或 “sleep“:找不到标识符
  17. 【Office插入eps】Word插入eps出错
  18. python将doc文件转换docx
  19. Python3简单爬虫之下载相关类型音乐(喜马拉雅网站)!
  20. 并行计算(二):并行模型的分类

热门文章

  1. JVM垃圾回收说为学日益,为道日损
  2. win10下启动.bat文件闪退问题
  3. [论文阅读]中文版-AlexNet
  4. kettle导数据入HBase数据库报错解决
  5. 武汉大学 计算机学院 曹瑀,武大计算机青协
  6. 苹果手机黑屏一直转圈怎么办
  7. 全国/全世界城市Json数据大全
  8. Apache ShardingSphere 一文读懂
  9. EDA -- 灯开关设计
  10. 工作用什么企业邮箱比较正式?常用的商务企业邮箱有哪些?