一种用于MP3播放器的音视频制作和播放方法
技术领域
本发明涉及一种音视频的制作和播放方法,尤其涉及一种用于MP3播放器的音视频的制作和播放方法。
背景技术
随着人民生活水平的提高,越来越多的人开始购买便携式媒体播放器(PMP)来满足自己的音乐欣赏需求。现在市场上的便携式媒体播放器按其功能可分为两类:MP3和MP4。MP4播放器功能以视频播放为主,配备了大尺寸的彩色LCD显示屏以及大块内存(RAM),具有比较强的硬件计算功能,相应的硬件成本也比较高,价格也比较贵。MP3播放器功能以音频播放为主,只配备了显示歌曲信息所必需的单色显示屏,只需要一定的计算能力(30Mhz-60Mhz),非常有限的内存(<256K)。相对于MP4播放器,具有非常低的硬件成本。在音乐播放器市场上,MP3播放器和MP4播放器以非常显著的价格差异,以及不同的播放功能,分别满足了不同的消费者需求。
随着MP3播放器消费市场的发展,MP3播放器的消费者已不再满足于原有单一的音频播放功能,他们希望能得到更多视觉上的享受。为了满足这种消费需求,部分MP3播放器厂商开始将单色显示屏替换成小尺寸的彩色显示屏,并提供一些简单的图形变化效果。但这相对于MP4播放器丰富的视频播放功能来说,还是太简单了。人们期望能在MP3播放器上看到类似于MP4播放器上的视频播放效果。
在MP3播放器上实现视频播放功能的一种解决方法,是将MP4播放器的视频功能移植到MP3播放器上,但现有MP3播放器的硬件配置根本无法满足此性能要求。MP4播放器的视频功能需要高性能的数据处理能力,需要大块内存来保存解码数据。以MP4播放器上常见的AVI视频文件为例,AVI里的视频通常采用MPEG4编码,由于结合使用了运动预测、DCT变换、Huffman等技术,一般需要200Mhz以上主频的处理器进行解码数据处理;AVI在播放过程中,需要对文件里的音频流和视频流数据进行同步,为了同步音视频,需要缓冲一定量的音视频数据在内存中(几百K);为了实现AVI视频播放的快进快退,播放器还需要缓冲AVI文件的索引数据到内存中,根据AVI视频的时间长短,索引数据从几百K到几MB大小不等;由于AVI视频编码使用了帧间预测功能,播放器还需要缓冲多帧视频数据,根据视频画面大小从几百K到1MB不等。因此,为了播放一个AVI文件,播放器需要具备至少200Mhz主频的处理器,至少2MB大小的内存。对于MP3播放器来说,这样的硬件配置将导致成本大幅提升,使其丧失原有的价格优势。
发明内容
本发明目的在于提供一种可以用于MP3播放器的音视频文件的制作和播放方法,使得其制作后生成的文件减少了音视频播放过程的性能需求,使得在MP3播放器这种便携设备上播放音视频成为可能。
本发明目的可以通过以下方案实现:一种用于MP3播放器的音视频的制作方法,包括以下步骤:
1)将视频格式文件解码,输出成原始图像序列YUV的视频数据和原始音频序列PCM的音频数据,作为后续编码处理的原始输入数据;
2)将步骤a中所得的视频数据画面分辨率缩放到MP3播放器的屏幕大小,同时对原始图像序列进行重采样以降低帧率,然后用MJPEG编码器对处理后的图像序列进行编码压缩,生成MJPEG图像帧序列,并记录下每帧图像对应的播放时间,即该图像帧的时间戳;
3)根据步骤a中所得的音频数据的采样率、声道数信息,以及用户设定的采样率、声道数信息,对步骤a中所得的音频数据进行重采样、滤波处理,然后调用MP3音频编码程序,将这些处理后的音频数据编码成MP3音频帧序列,并记录下来每个音频帧的播放时间,即该音频帧的时间戳;
4)根据用户设定的参数信息,生成相应的音乐视频AKV文件头信息区,并写入到文件中;在信息区后,保留一块文件空间,作为音乐视频文件的索引区域;然后将之前生成MJPEG图像帧序列和MP3音频帧序列按其播放时间顺序排列,加上数据块头,存储在音乐视频文件中;在文件写入的过程中,记录下每帧数据在文件中的偏移位置;最后,将整个音视频按时间切分段,再将这些音视频段所对应的播放时间,以及起始音视频的文件偏移地址写入文件头部的索引区域中,完成文件的生成工作。
上述的音乐视频格式文件可以是MPG、AVI、RMVB、MOV、FLV、MKV、DAT和VOB。
上述的音乐视频文件共切分256个音视频段。
本发明的生成音视频文件,包括如下数据块:
1)文件头数据块
数据长度:20字节
数据字段:
2)数据区数据块
数据长度:N+8字节
数据字段:
本发明所述的一种用于MP3播放器的音视频的播放方法,包括以下步骤:
1)播放器首先打开文件,读取文件头信息区中的媒体信息,根据视频画面的高度和宽度信息设定屏幕显示区域;根据音频的采样率、声道数、采样数据宽度等信息设置音频DA转化器;将索引区的数据读入内存,建立索引表;
2)在解码数据前,播放器首先查询音频DA转化器状态,查看音频DA缓冲区是否为空,即判断是否需要填充音频数据到音频DA转化器中以播放声音;如果是,则从文件中读入下一个数据块,然后根据数据块的类型分别进行不同的处理;如果否,则返回查询音频DA缓冲区是否为空;
3)步骤2中如果读入数据块是音频帧块,则调用MP3解码程序,解码音频帧数据,然后将音频数据输出到音频DA缓冲区中播放,然后返回继续查询音频DA转化器状态,直到下次音频DA缓冲区为空;
4)步骤2中如果读入数据块是视频数据,则调用MJPEG解码程序,解码图像数据,并把图像输出到LCD显示屏上显示;由于此时还未有音频数据填充到音频DA缓冲区,因此需要继续读取下一个数据块,直到有数据填充到音频DA缓冲区;
5)步骤2中如果读入数据块是终结块,则表示文件已经结束,系统退出完成播放。
上述MP3播放器音视频的播放还可以实现随机定位播放,包括以下步骤:
1)选择直接定位到视频的某个时间点T开始播放时,播放器首先通过搜索索引表,判断其时间点落在256个音视频段里面的哪个段;
2)然后根据索引表里记录的该音视频段的文件偏移,直接跳转到该音视频段的起始位置;
3)然后从该位置顺序读入下个数据块的头信息(8个字节),判断该数据块的时间戳与时间点T的关系;
4)如果数据块的时间戳小于时间点T,则跳过数据块后面的数据内容,再对其后的数据块进行同样的操作,直到数据块的时间戳等于时间点T,完成定位功能。
本发明相对现有技术优点在于:
针对MP3的硬件配置,设计了一套简化的视频方案,通过优化视频文件格式,通过制作过程中采用的一些重采样、缩放、编码压缩等过程,减少播放过程中的运算量和内存消耗;使得MP3播放器不做硬件上的修改就能播放视频。
附图说明
图1是本发明的文件架构示意图;
图2是本发明的制作流程示意图;
图3是本发明的写入流程示意图;
图4是本发明的播放流程示意图;
图5是本发明的定位播放流程示意图。
具体实施方式
本发明方案可以在60Mhz主频,256K内存配置的MP3播放器上实现,为MP3播放器增加视频播放功能。
本发明的制作流程如图2所示,首先将编码器初始化,然后对要音乐视频的源文件进行解码,音乐视频源文件的格式可以是MPG、AVI、RMVB、MOV、FLV、MKV、DAT或VOB等。解压后得到原始图像序列和原始音频序列,原始图像序列为YUV格式的数据,原始音频序列为PCM格式的数据,两序列作为后续步骤的原始数据。
解码后对音频、视频数据分别进行处理和编码。对于视频处理:PC上的视频文件通常会有较高的帧率FPS,一般在25-30FPS之间,画面分辨率也比较高,并不适合MP3播放器的显示屏尺寸。因此,在这一步会将视频图像的分辨率缩放到MP3播放器的屏幕大小;同时适当降低FPS,具体是对原始图像序列进行重新采样,如每25帧图像中抽取10帧图像组成新的图像序列,这样大大减少了视频的数据量。然后采用Motion-JPEG编码器对处理后的图像序列进行编码压
缩,并记录下每帧图像对应的播放时间,即该视频帧的时间戳。
对于音频处理:根据原音频数据的采样率、声道数等信息,以及用户设定的
采样率、声道数等信息,对原始音频数据进行重采样/滤波等处理,然后调用MP3音频编码程序,将这些处理后的音频数据编码成MP3音频帧,并记录下来每个音频帧的播放时间,即该音频帧的时间戳。
最后,根据用户设定的参数信息,生成相应的文件头信息区,并写入到文件中。在信息区后,保留一块文件空间,作为文件的索引区域。然后将之前生成MJPEG图像帧序列和MP3音频帧序列按其播放时间顺序排列,加上数据块头,交叉存储在生成文件中。在文件写入的过程中,记录下每帧数据在文件中的偏移位置。最后,将整个音视频按时间切分成256个音视频段。再将这些音视频段所对应的播放时间,以及起始音视频的文件偏移地址写入文件头部的索引区域中,这样就完成了可以在MP3播放器播放的文件的制作。
生成后的文件架构如图1所示,包括文件头信息区和紧跟其后的数据区:文件头信息区里记录了音视频文件的相关媒体参数信息,比如视频的帧率,画面尺寸,音频的采样率等参数,以供播放器播放视频时使用。视频和音频数据存放在数据区中。音频数据采用MPEG Layer-3格式压缩编码(MP3播放器均提供了该音频格式的解码器)。视频数据采用MJPEG格式压缩编码,该编码方式结合使用了DCT变换和Huffman编码技术,对普通图像能达到7∶1的压缩率,但算法复杂度与MP3相似,也就是说普通的MP3播放器硬件就能满足解码需求。压缩编码后的音频和视频数据分别被切分成帧块,音频以音频帧为单位,视频以视频帧为单位,按其对应的时间戳顺序交错存放在文件中,由于音频每帧编码的数据量比较低,一帧视频会对应若干个音频帧,因此图1是若干个音-视-若干个音的排列。解码时,播放器只需按文件顺序解码这些音视频数据,不需再引入额外的音视频同步机制,这样也消除了因为音视频同步机制而需要开辟的额外缓冲区。
其中文件头模块结构如下:
文件头后面如无附加数据,紧跟着就是数据区。数据区由一个个的数据帧块组成,每个数据帧块封装了一个音频帧数据或者视频帧数据。可以根据每个数据块的第一个字节来判断是什么类型的数据块。
数据区模块结构如下:
上述的音视频文件制作过程中的数据写入过程如图3所示,先检测视频帧数据是否为空,非空则获取一帧图像数据。再检测音频帧数据是否为空,如果是,则将视频帧数据写入文件并从视频序列中删除当前帧;如果否,则获取一帧音频数据。获取音频数据后检测音频帧时间食饭小于视频帧时间,如果是,则将音频帧数据写入文件并从音频序列中删除当前帧,再返回上一步的音频帧和视频帧的时间比较;如果否,则将视频帧数据写入文件并从视频序列中删除当前帧。视频帧数据写入文件后将音视频帧在文件中的偏移量以及时间戳信息存放到索引数组中,存放后返回第一步的检测视频帧数据是否为空,如果是则结束数据的写入。
本发明在提供音视频文件制作方法的同时,还提供了相应的播放方法。其播放过程如图4所示,播放器打开文件后先对系统初始化:读取文件头信息区中的媒体信息,根据视频画面的高度和宽度信息设定屏幕显示区域;根据音频的采样率、声道数、采样数据宽度等信息设置音频DA转化器;将索引区的数据读入内存,建立索引表。
然后就开始循环解码播放。在解码数据前,播放器首先查询音频DA转化器状态,查看音频DA缓冲区是否为空,即判断是否需要填充音频数据到音频DA转化器中以播放声音。如果否,则返回循环查询;直至返回结果为“是”,则从文件中读入下一个数据块,然后根据数据块的类型分别进行不同的处理。
数据块根据文件架构所述的标识域,可分为三种:音频帧块、视频帧块和终结块。
如果是音频帧块,则调用MP3解码程序,解码音频帧数据,然后将音频数据输出到音频DA缓冲区中播放。然后返回继续查询音频DA转化器状态,直到下次音频DA缓冲区为空。
如果是视频数据,则调用MJPEG解码程序,解码图像数据,并把图像输出到LCD显示屏上显示。由于此时还未有音频数据填充到音频DA缓冲区,因此需要继续读取下一个数据块,直到有数据填充到音频DA缓冲区。
如果是终结块,则表示文件已经结束,那么系统就可以退出了。
本发明的播放效果还设有快进、快退和随机定位功能,如图5所示,通过二次搜索的方法来完成的。当用户选择直接定位到视频的某个时间点T开始播放时,播放器首先通过搜索索引表,判断其时间点落在256个音视频段里面的哪个段,然后根据索引表里记录的该视频段的文件偏移,直接跳转到该视频段的起始位置。然后从该位置顺序读入下个数据块的头信息(8个字节), 判断该数据块的时间戳与时间点T的关系。如果数据块的时间戳小于时间点T,则跳过数据块后面的数据内容,再对其后的数据块进行同样的操作,直到数据块的时间戳等于时间点T。最后定位的位置就是用户指定的开始播放位置。
快进快退功能的实现都是基于上述随机定位播放功能实现的,比如当前播放时间为第T秒,如果要快进到第T+5秒,那通过随机定位播放功能直接定位到第T+5秒就可以了。快退的实现方式与此类似。
本发明针对MP3的硬件配置,设计了一套简化的视频方案,通过优化视频文件格式,通过制作过程中采用的一些重采样、缩放、编码压缩等过程,减少播放过程中的运算量和内存消耗。使得MP3播放器不做硬件上的修改就能播放视频,保留了MP3播放器的价格优势。