ASF流媒体切割技术的研究与实现

2022-07-135

流媒体是指在Internet网络中使用流式传输进行播放的技术。流式传输将整个A/V(Audio/Video)数据经过特殊的压缩编码后,放到专用的流媒体服务器上,由视频服务器向用户计算机连续、实时传送数据,用户不用将整个的音视频文件下载到本地磁盘,便可以在线观看,即节约空间,又节省时间。头对象和数据对象是每个ASF文件所必需的,索引对象是可选的。

头对象用于描述文件的全局信息,包括文件大小、流的数量、编解码信息等;数据对象以固定大小的数据包存储流数据;索引对象主要保存时间索引和数据位置的映射信息,便于应用程序的随机访问。

ASF作为一种文件系统格式,是一个具有包容性的定义。WindowsMedia文件是ASF文件格式的一种具体应用,只是采用的编解码方式不同,仍然是ASF文件。具体区别如下:只存在非压缩的或使用Wi-计算机技术与发展wmv;没有视频流,且只有非压缩的或使用WindowsMedia首频编码器编码的首频流,则保存成。wma;其他的情况则保存成。asf.本软件采用VC6.0+WMF SDK开发,主要为了实现包括。wmv,。wma在内的所有ASF文件的切割。

2数据流程WMFSDK是Microsoft公司提供的用于编辑ASF文件的开发包,包括一系列对象:如读取器、生成器、编辑器等等。正是这些SDK对象屏蔽了ASF文件切割的技术实现细节,使得在编写程序时不需要太多的考虑流媒体底层技术,程序实现的主要过程如下:生成器对象根据Profile信息的描述,创建一个ASF文件头对象;复制源文件中的属性信息、编码信息、脚本信息、标志信息,并实现对属性信息中的标题、版权等进行修改;按照呈现时间顺序,把读取器输入的Sample数据传送给生成器。生成器根据Profile的描述交替打包,并写入ASF文件的数据对象;自动添加索引,以提供ASF文件的随机定位能力(为程序流程图)。

3系统实现中的问题与解决方法为了实现ASF文件的切割,数据信息的复制是必不可少的。从程序实现的角度考虑,可以采用两种方与结束时间的设置,达不到对文件切割的目的。另一种方法就是使用WMFSDK来生成新的ASF文件。利用源文件的Profile信息创建一个新的ASF文件头对象,并且复制源文件中所有的属性信息、编码信息、脚本信息和标志信息等,以保证不丢失数据,*终生成一个新的合法的ASF文件。

3.1开始时间和结束时间的修改为了实现对ASF文件开始时间的修改,可以采用WMFSDK提供的Start函数。Start函数的原型如下:HRESULTSta-t(Start函数支持给读取器对象设置开始时间和结束时间,并通过OnStreamSample函数的回调方式读取数据,本程序就是通过这种方式实现ASF文件的切割。在创建读取器、获取Profile信息、创建生成器等一些必要属性之后,通过Start(mStartTime,0,1.0,0)函数将开始时间输入,但是这时候并不能够修改播放持续时间,所以cnsDuration的值为零。对结束时间的修改是通过OnStreamSample函数来完成的,当采用时间小于开始时间不复制数据,而只有当采用时间大于开始时间才向生成器中写入数据,直到当前时间大于或等于结束时间。程序关键代码如下:拷贝数据,mStartTime是开始时间,结束时间通过OnStream-Sample函数确定程1简要叙述了ASF文件格式,以及开发过程中遇到3.2切割精度的设定本地文件切割精度可以采用关键帧,也可通过时间来确定。目前,本程序只实现了精确到ms的定位,所以切割后的文件与源文件存在一定的差别,生成后的文件会比设定的时长多几十ms,但由于人的视觉暂停时间公认为80100ms,所以不会产生太大的影响。

程序关键代码如下:100ns为单位,inStartTime参数单位是ms,所以再扩大104 =inMaxDuration;//不乘倍数。因为mTargetDuration虽然定义的是QWORD,但在时长较大时还是溢出,所以不乘以倍数,在使用时统一到ms 3.3绕开生成器的压缩编码过程读取器的工作流程是:首先将数据流输入到读取器中,然后进行流分离,再分别解压缩,输出数据。生成器的工作流程是:首先对输入的数据进行预处理,然后压缩编码,交错打包后发布到接收器。默认情况下,读取器会自动解压缩,而生成器会自动压缩编码,这样在生成新的ASF文件时就产生了先解码后编码的无用操作,所以需要绕开生成器的压缩编码过程,TRUE);//绕开读取器的解压缩过程的每个输入InputProps的第二个参数为NULL,以绕开生成器的压缩编码过3.4元数据属性的修改对于ASF文件中的大部分信息,SDK的编辑器并不允许修改,否则将影响文件的正常播放。SDK能够程序关键代码如下:3.5DRM保护的判断户观看的权限,以保护媒体内容的版权、保障创作者的利益。对于受DRM保护的媒体文件,必须获取相应的许可证才可以观看,并且合法用户也不能够对受DRM保护的媒体文件进行复制。所以本软件先对媒体文件进行判断,如果是受DRM保护的文件,不能进行切割。程序关键代码如下:Me.DetailView(xh)*有权限查看新生详细信息Else由上可见,凡涉及到新生详细信息查看这一事件,StudentDetaillnfoProxy代替真实的StudentDetaillnfo与其他程序打交道,确定是否有权限查看新生详细信息。

只有StudentDetaillnfoProxy认为合适时,才会将客户端的请求传递给真实的主题对象StudentDetaillnfo.采用Proxy模式同样也可以保证系统的可扩展性,用户权限发生变化时,只需要修改Proxy函数,不必修改业务逻辑。

4结束语Observer设计模式的应用使得系统的可扩展性、灵活性获得了大大的提高,Proxy模式的使用更保证了系统的安全性。该系统己在本校实际投入运行,极大地提高了各部门的工作效率。但系统仍可以作进一步的改进,如在专业分班方面可以考虑设计分班算法,实现一键分班,进一步减少用户的工作量;同时还可以设计目标的代理类实现模式代码,使得目标的业务逻辑与模式代码分离,进一步提高系统的可扩展性和代码复用度。

免责声明:
转载请注明原文出处。本文仅代表作者个人观点,与商来宝平台无关,请读者仅做参考,如文中涉及有违公德、触犯法律的内容,请向我们举报,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们处理。
举报
收藏 0