简介
MPlayer是一款开源的多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流操作系统使用,例如Linux和其他类Unix操作系统、微软Windows系统及苹果电脑的Mac OS 系统。MPlayer是建基于命令行界面,在各操作系统可选择安装不同的图形界面。
ubuntu下编译过程
下载并解压源码文件click here
生成配置文件(目前直接走默认参数选项)
1
2直接执行./configure错误,--yasm=''参数是根据提示没有找到yasm,可通过该命令直接执行
./configure --yasm=''编译
1
2make
make完成既可看到文件夹下存在mplayer可执行文件安装
1 | 将mplayer及依赖的库文件进行安装, 不安装也可以进行使用 |
源码文件
vd__*
video decode 与解码相关的,解码器只是负责把解码完成的帧传输给vo,如何显示是vo的函数实现;
vf__*
video filter 所有过滤器的定义,当命令行输入-vf的参数,规则会去相应的filter函数解析。例如: -vf rotate=2,vf_rotate.c的函数进行进行rotate函数的解析。
vo_*
video output 输出的函数定义,每一个函数对应实现一种或几种的功能。例如:vo_md5sum.c得到md5的一个值
DOCS 文档
mplayer流程
调用 AddExcept()注册异常处理函数
initmplayer(); //初始化,创建快进和暂停的信号量
InitTimer();初始化计时器
mp_msg_init();初始化消息系统
set_path_env();设置路径、环境
ipu_image_start();ipu初始化
mplayer_showmode(1);设置显示模式
parse_codec_cfg(NULL);解析codec配置寄存器
打开数据流
分析播放树
添加播放树列表
初始化预填充缓存
打开播放的文件
创建buffer
打开数据流
检测数据流类型(音频格式和视频格式)
分析音频流视频流的信息(原始视频尺寸、分辨率、帧频率、码流大小)
启动相应的分离器
分析剪辑信息
初始化codec(多媒体数字信号编解码器)
选择打开相应的视频解码器
初始化视频解码器,分析视频流信息
选择打开相应的音频解码器
初始化音频解码器、PCM,分析音频信息
同步音频视频输出
开始播放
命令行参数
-list-options 打 印 所有 可 用 的 选 项
-vf 选择视频相关参数
format 选择解码之后的格式输出
- NV12 / NV21
- BGRA
- RGB
rotate 选择旋转的角度输出
- 1 顺时针旋转90
- 2 顺时针旋转270
- 4 旋转0度
-slave 从模式,mplayer会从标准输入读一个换行符(/n)分隔开的命令。
-quiet 去除杂项信息, 使 控制屏幕输出简略;尤其是阻止显示状态行(即 A: 0.7 V: 0.6 A-V: 0.068 …)
-speed <0.01 - 100>选择播放速率
-vo 指定视频输出驱动的优先级列表
-vc 选择编解码器, -vc help 可以列出所有视频解码器,其中中括号里面是.dll的是我们无法使用的
- ffm264 264软解码
- ffh264v4l2m2m 264硬解码
-ao 指定音频输出驱动的优先级列表
-ac 指定音频解码器优先级列表
-zoom -x 800 -y 400 指令播放窗体的大小
-input 输入
- cmdlist 列出所有可绑定按键的命令
- file 命令输入通道。制定输入fifo的名字,写入控制命令,与slave参数一起使用
slave模式
说明
MPlayer为后台运行其他程序,不再截获键盘事件,MPlayer会从标准输入读一个换行符(/n)分隔开的命令。
大多数slave模式命令相当于命令行选项。
命令行播放通过 -input file= 参数监听某个管道
另起一个线程,创建同名管道并输入6.2所示控制参数即可达到控制mplayer的效果
1
2mkfifo /tmp/fifofile
mplayer -slave -input file=/tmp/fifofile <movie>
具体使用说明可以参考源文件下DOCS/tech/slave.txt
控制参数
mplayer -input cmdlist 命令可以打印出一份可以输入清单
- get_file_name 打印当前文件名
- get_percent_pos 打印出文件中的当前位置为整数百分比(0-100)
- get_time_length 打印当前文件长度用秒表示
- get_time_pos 打印文件当前位置用秒表示
- seek 定位电影的某些地方
- 0 是一个相对定位+/- (默认值)
- 1 是定位%在电影里
- 2 是寻求一个绝对位置的秒。
- quit 推出mplayer进程
- stop 停止播放
- exit 从OSD菜单退出控制台。不像’quit’,不退出MPlayer的
demo
针对slave使用方法,简单写了几个函数作为参考示例
github仓库(mplayerInterface文件夹):click here
Q&A
MPlayer interrupted by signal 13 in module: key_events ?
因为Mplayer是通过换行符(“\n”)来分隔不同的命令,所以我们在编程中不管是写入到管道文件还是写入到QT的进程中在命令后面一定要加入换行符(“\n”),这样Mplayer才能辨别。
只有在串口有输出,adb shell没有输出
错误信息:Cannot find HOME directory.
解决方法:setenv(“HOME”,“/”,“1”)
在vo部分添加 rotate功能 之后, 只有一个方向可以正常显示?
对于nv12格式的图片和数据, uv_stride和stride这两个参数影响LCD最终显示的效果. 在旋转之后需要将对应的宽高对应到相应的stride中, 最终可以正常显示
mpi被mplayer用来存储解码之后的图像(mp_image.h中定义),得到mpi之后,vf被调用,整个filter链上钉filter都被调用了一遍包括最后的vo; 在vo的put_image里把图像输出到显示器上。这个时候需要考虑图像的存储方法,即用哪种颜色空间。