Mpg123与libmad一样,支持mpeg1,2,2.5音频解码。目前来看mpg123比libmad支持了网络播放功能。而且libmad基本上开源社区在2005年左右,基本停止更新,mpg123至今还在持续更新源代码。

1.      mpg123是如何支持某种音频驱动的?

Mpg123跟liamad一样,向下也支持oss,alsa,win32等驱动,是如何支持的。Libmad是修改config文件的宏来完成,而mpg123是修改makefile或者configure来完成

ALSA_LIBS =-lasound,同时也要修改配置文件.config.因为此makefile只变异一个驱动

默认只是 alsa驱动。

2.      main函数框架

mpg123_init();初化mpeg123相关资源

cleanup_mpg123 =TRUE;  已经初始化后的标志置位

mpg123_new_pars(&result)动态申请一个结构体,并初始化结构体属性参数

mpg123_getpar(mp,MPG123_RVA, &param.rva, NULL);

将预设的结构体参数,读取到para这个结构体参数中来

getlopt(argc,argv, opts)  解析main函数传入的参数

如果param.list_cpu为真的话

mpg123_decoders(); 列出解码器资源

解码完毕mpg123_delete_pars(mp);释放资源

如果param.test_cpu 存在

mpg123_supported_decoders() 测试cpu属性

解码完毕mpg123_delete_pars(mp);释放资源

正常情况下不会走到这两个流程

init_output(&ao)初始化输出模块,觉得是输出到哪个驱动还是转码输出

have_output =TRUE;  设置初始化输出完毕标准

httpdata_init(&htd);初始化网络播放参数

mpg123_par()将para结构体数据在此写入到mp结构体中来

设置各种参数

mh =mpg123_parnew(mp, param.cpu, &result);

将mp参数读到fr全局参数中,供以后的解码器使用

mpg123_delete_pars(mp)mp参数现在可以释放了

dump_open()目前还没理解是什么意思

audio_capabilities(ao,mh); 初始化音频输出

load_equalizer(mh);载入音频均衡算法脚本

sp.sched_priority= sched_get_priority_min(SCHED_FIFO);

if (sched_setscheduler(0, SCHED_RR, &sp) == -1)

设置实时参数,提高该进程的优先级

prepare_playlist()初始化播放列表

如果需要http://则要打开socket,连接服务器端

初始化终端,初始化遥控操作

进入大循环解码播放,每获取一个节目

{

open_track(fname)  打开解码器播放打开某个文件和网络读流

term_control 初始化终端设置

mpg123_scan(mh);  完成seek定位

mpg123_seek_frame  初始化seek

play_frame() 开启解码进程解码

每解码一次进行一次按键处理

}

播放完毕所有的节目,释放资源

解码过程:

play_frame---mpg123_decode_frame---decode_the_frame(mh);

如何显示时间状态:

-v 可以将时间显示出来。实现代码以下:

Main函数中-------print_stat函数

(每解一buffer数据打印一次)

Parse.c 关于MP3头的解析。

如何送数据?

1.       而在config.h 中#define DEFAULT_OUTPUT_MODULE"alsa"

结构体一定义,就默认为

structparameter param = {

FALSE , /* aggressiv */

FALSE , /* shuffle */

FALSE , / * remote */

FALSE , /*remote to stderr */

DECODE_AUDIO , /* writesamples to audio device */

FALSE , /* silent operation*/

FALSE , /* xterm title on/off */

0 ,     /* second level buffer size */

0 ,     /* verbose level */

DEFAULT_OUTPUT_MODULE,

2.       moudule_name 传入init_output---open_module(legad_audio.c)----

mpg123_output_module_info---alsa驱动

3.       每解码完毕一个单元,就flush_output

4.       flush_output 通过ao->write 写入底层 底层通过映射到不同的驱动

structparameter param 这个结构体很重要,一定义就有个默认值,后面可以通过main函数参数去修改该默认值或者mpg123_getpar(mp,MPG123_RVA, &param.rva, NULL);;将mp参数传入到para中。

如何实现播放控制:即如何实现热键控制?

按键逻辑控制在term.c中实现。

get_key 读按键

term_handle_input按键处理

term_handle_key  按键播放控制逻辑

term_control(mh,ao);

main函数中的大循环

Mpg123源代码详解相关推荐

  1. emule中节点加入Kad网络过程(源代码详解)【对原文部分改进】

    from: http://blog.csdn.net/chenbuaa/article/details/2301656 emule中节点加入Kad网络过程(源代码详解) 程序启动: EmuleDlg. ...

  2. 线程池源代码详解,参数详解

    线程池源代码详解,参数详解 ThreadPoolExecutor 构造函数源代码 public ThreadPoolExecutor(int corePoolSize, int maximumPool ...

  3. 大白话解析Apriori算法python实现(含源代码详解)

    大白话解析Apriori算法python实现(含源代码详解) 一.专业名词解释 二.算法思路 三.python代码实现 四.Aprioir的优点.缺点及改进方法 本文为博主原创文章,转载请注明出处,并 ...

  4. Py之seaborn:数据可视化seaborn库(三)的矩阵图可视化之jointplot/JointGrid/pairplot/PairGrid/FacetGrid密度图等的函数源代码详解之最强攻略

    Py之seaborn:数据可视化seaborn库(三)的矩阵图可视化之jointplot/JointGrid/pairplot/PairGrid/FacetGrid折线图/柱状图+散点图/矩形密度图的 ...

  5. HCTF 2018:WarmUp(源代码详解)

    前言 之前刷BUUCTF时遇到过这题,这次刷XCTF时也遇到了,那就写个详细点的WP吧 寻找利用点 打开题目,是一个滑稽图 没发现什么,查看下网页源代码,发现了source.php 访问source. ...

  6. Marlin固件之二:源代码详解与移植

    由于需要进行固件定制化,Marlin固件太过于强大和紧凑,我对这个固件进行了裁剪,只剩下主枝干,实现功能的定制和裁剪.以下的代码详解是基于我已经移植在stm32上面的一个程序进行的.

  7. stream iterators源代码详解

    所谓stream iterators,可以将迭代器绑定到一个stream(数据流)对象身上.绑定istream对象(例如:std:cin),称为 istream_iterator,拥有输入能力.乍听之 ...

  8. HashMap源代码详解

    HashMap类声明 HashMap类声明如下: public class HashMap<K,V> extends AbstractMap<K,V> implements M ...

  9. lcc源代码详解之介绍

    LCC,全称为"Local C Compiler"或"Little C Compiler",是一个小型自由的ANSI C编译器,源代码开放,由Chris Fra ...

最新文章

  1. 发布 | 《工业安全大数据蓝皮书》(2021年)
  2. 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor#manifestPlaceholders 清单文件占位符配置 )
  3. 【Step1】【floyd】poj1125-Stockbroker Grapevine
  4. spring jpa 多数据源_Spring同时集成JPA与Mybatis
  5. Java中的IO流(六)
  6. IDEA下项目打包成jar,并通过cmd命令调用
  7. URLencode 转义符
  8. java网吧系统_基于SSM框架下的JAVA网吧管理系统
  9. 论文推荐到计算机科学期刊,计算机类论文参考文献推荐 计算机类核心期刊参考文献哪里找...
  10. 女子人身安全防卫指南
  11. ucore源码分析step1
  12. thinkphp5 域名路由
  13. 把服务器sql数据库导出excel文件,将mysql数据库数据以Excel文件的形式导出
  14. 微信公众号软件 php,写公众号文章的软件有哪些?
  15. php解决缓慢http请求,php CURL 服务器响应慢的问题
  16. 下午三点半,公司空空荡荡
  17. 本地phpstudy设置访问浏览器打不开localhost解决方法
  18. mysql binlog event_MySQL binlog中的事件类型详解
  19. VC程序中Windows XP风格程序界面的实现
  20. (转)手把手教你写专利申请书•如何申请专利

热门文章

  1. 记一次诡异的SpringMVC中拦截路径的问题
  2. 24-Thief小偷-Crime犯罪
  3. OpenStack入门篇(八)之镜像服务Glance
  4. 【DB2】NVL2函数
  5. 【转载】COM 连接点
  6. oracle record is locked by another user
  7. 以实例讲产品改版(下):需求与设计
  8. 功夫熊孟军贤:如何拿到10万种子用户,创业的经验分享
  9. 百度 Java 后端三轮面试题,这些你会吗?
  10. #pragma once与 #ifndef的区别 (转)