tablet os 和BB10中用于处理多媒体的组件是mm-renderer
它提供了以下这些功能
播放一系列多媒体文件
处理播放的命令
获得当前播放的状态
当播放的状态发生变化会触发通知机制
提供动态元数据
包含的头文件是bps/mmrenderer.h
支持的文件
M3U 文件 file://xx.mp3
SQL queries sql:database?query=querystring
mm-renderer包含的抽象层
messaging layer 解压client发出的信息和投递他们给contexts
context是负责在一段时间里播放媒体数据到输出设备上,context
有一个唯一的名字,他有一个输入端和几个与他有关系的输出端
输入端包含audio和video,和一些输出设备(speaker和screen)
context management layer
保持输出端与context的连接
映射输出的机制
选择合适的机制到对应的context上
保存context state的坚持和连接
发送client的request给插件机制
plugin management layer
保持对各种plugin的跟踪
contexts
上下文环境,是播放媒体数据流的,如果你的输入是一个audio,输出是file,context会去记录这些
操作,如果你要设置音量,也需要context去操作,
output
输出设备
file,
audio device
video device
输出设备在开始输入操作之前要先连接设备
input
要被播放的数据源, 当一个input被连接后,context management layer
会去选择合适的机制,把他连接到context上,然后就可以操作别的了
enginee plugin
引擎插件,multimedia render 使用引擎去播放各种input
怎么使用multimedia renderer
连接 mmr_connect()
断开俩就 mmr_disconnect()
mmr_context_create()创建context,传递的参数是mm-renderer connect handle
这个函数会返回一个handle,以后你就用这个handle去操作attaching, playback
command等,你可以创建很多个context,但前提是你要自己管理他们之间可能存在的
冲突
mmr_context_destroy() 释放context
Closing context handles
context handle并不是一个,
有时候primary handle被关闭了,
还有其他的context handle在
这种成为孤立的handle
要关闭context有以下2中方式
如果孤立的context 存在 mmr_context_close()
设置属性需要用到字典对象,就是有key-value组成
strm_dict_new() 去创建字典,
strm_dict_set() 去设置字典
mmr_input_parameters() input 属性
mmr_output_parameters() output属性
mmr_context_parameters() context 属性
播放media的流程
1. 连接mm-renderer mmr_connect()
2. 创建context mmr_context_create()和mmr_context_parameters()
3. 连接output 和设置属性, mmr_output_attach()和mmr_output_parameter()
4. 连接input 和设置属性, mmr_input_attach()和mmr_input_parameter()
5. 播放 mmr_play()
播放的状体
idle 空闲
no input is attached 没有输入
stopped 停止
input is attached by is not playing 有输入但还未开始播放
playing 播放
input is attached and is playing 开始播放
暂停这种状态要设置播放速度为0
设置播放速度
范围为0-1000 mmr_speed_set()
设置播放位置
mmr_seek() 99:9999 第一个参数播放列表的位置, 第二个参数当前文件播放位置,毫秒