让mplayer支持cue的可行性Linux认证考试
文章作者 100test 发表时间 2010:05:09 20:55:56
来源 100Test.Com百考试题网
之前发现Amarok支持cue文件的时候,感动得泪流满面。后来慢慢因为其各种大小缺陷,最终决定回归mplayer。但是回归之后用不了cue又是个心病,于是开始这篇蛋疼的分析。
假如把mplayer当作后端,那么支持cue是很容易的。前端解析cue之后,播放每个音轨可以用以下命令:
mplayer -ss start_time -endpos duration_time file
(两个time的格式都是[[hh:]mm:]ss[.ms])
现在我主要分析mplayer自身支持cue的可行性。
首先发现mplayer有一个选项:mplayer cue://file[:track] [options]
我以为它可以支持cue,使用之后发现不行。但这个选项的存在激发了我尝试在mplayer中完整支持cue的冲动。
查看mplayer代码stream/stream_cue.c才发现其对cue的支持相当有限。首先,它完全是为了支持VCD的bin /cue或img/cue文件而写的,流类型也定义为STREAMTYPE_VCDBINCUE了。其次,它要求cue文件里FILE必须写在第一行。另外,像TITLE、PERFORMER这类信息会被忽略。
FILE的问题好解决,主要的问题是如何让它播放wav、flac等文件中的track。
先看看stream_cue.c是如何实现的。调试后发现,mplayer是从 open_s函数进入该模块的,于是分析如下:
int open_s(stream_t *stream,int mode, void* opts, int* file_format)
{
检查参数正确性:
mode必须是STREAM_READ。
opts实际上是个内部结构,仅包含filename这个域,在这里判断filename非空。
检查filename中是否用