CN103051953B - 一种利用视频播放器对视频文件进行解码方法 - Google Patents
一种利用视频播放器对视频文件进行解码方法 Download PDFInfo
- Publication number
- CN103051953B CN103051953B CN201210587260.4A CN201210587260A CN103051953B CN 103051953 B CN103051953 B CN 103051953B CN 201210587260 A CN201210587260 A CN 201210587260A CN 103051953 B CN103051953 B CN 103051953B
- Authority
- CN
- China
- Prior art keywords
- video
- video file
- file
- decoding method
- decode
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明提供一种视频解码方法,通过利用视频播放器对视频文件进行解码,包括如下步骤:?步骤1、通过所述视频播放器访问视频文件的视频源地址获取视频元数据;步骤2、根据所述视频元数据的长度计算所述视频文件头长度;步骤3、将FLASH的视频解码对象载入所述视频播放器;步骤4、载入所述视频文件并将其读入二进制数组,并利用所述视频解码对象对视频文件解码;步骤5、检测用户的定向操作动作,根据所述用户的定向操作的位置,读取以操作的位置为起点的视频文件并对其进行解码。通过本发明的视频解码方法,可以智能控制放入缓冲区的数据量并按需求清空缓冲区,实现了内存的灵活管理、不同码率的视频的无缝切换,以及在不同网络情况下的顺畅播放。
Description
技术领域
本发明属于视频解码领域,涉及一种利用视频播放器对视频文件进行解码方法。
技术背景
目前较为常见的一种视频解码方法是“黑盒”解码方法,即只通过提供视频文件的URL地址进行解码,该方法存在着,视频文件加载无法控制,缓冲区清空无法控制,不同码率的视频切换不平滑的缺点,且该技术中只采用一个缓冲区,内存管理也不够灵活。
发明内容
本发明针对黑盒解码的缺点,本发明提出一种视频解码方法,该方法控制视频文件加载、视频文件读入二进制数组,智能控制放入缓冲区的数据量并按需求清空缓冲区,实现了内存的灵活管理、不同码率的视频的无缝切换,以及在不同网络情况下的顺畅播放。
本发明的一种视频解码方法,通过利用视频播放器对视频文件进行解码,包括如下步骤:
步骤1、通过所述视频播放器访问视频文件的视频源地址获取视频元数据;
步骤2、根据所述视频元数据的长度计算所述视频文件头长度;
步骤3、将FLASH的视频解码对象载入所述视频播放器;
步骤4、载入所述视频文件并将其读入二进制数组,并利用所述视频解码对象对视频文件解码;
步骤5、检测用户的定向操作动作,根据所述用户的定向操作的位置,读取以操作的位置为起点的视频文件并对其进行解码。
优选地是,所述视频文件为FLV文件或F4V文件。
优选地是,所述步骤2所述视频文件头长度的计算公式为:视频文件头长度=13+视频元数据长度+视频标签长度+音频标签长度。
优选地是,所述步骤2所述计算视频文件头长度是用于获取视频文件头信息和视频文件体信息。
优选地是,其特征是,所述步骤4包括以下步骤:步骤41,通过http流式下载的方式下载URL指定的视频文件;步骤42,将所述下载的视频文件数据读入二进制数组中;步骤43,将读入所述二进制数组中的视频文件通过所述视频解码对象解码。
优选地是,所述视频播放器包括两个缓冲区:二级缓冲区和一级缓冲区,所述步骤42包括:逐步向所述二级缓冲区添加视频文件,直至所述视频文件的视频文件标签完整,然后将所述视频文件传入一级缓冲区。
优选地是,所述视频文件传入一级缓冲区的时间量通过设置FLASH的网络流对象的缓冲时间属性指定,所述缓冲时间属性根据客户端网速设定,设定原则是:
如果客户端网速小于100kb/s,设置缓冲时间为3秒;
如果客户端网速大于等于100kb/s,设置缓冲时间为5秒。
优选地是,所述播放器需处于数据生成模式,需在已连接到空指针的FLASH网络连接对象上创建的网络流对象调用播放功能。
优选地是,所述检测用户的定向操作动作包括搜索与用户的定向操作位置最接近的关键帧。
优选地是,所述步骤5所述视频文件解码包括如下步骤:步骤51、清空所述一级缓冲区和所述二级缓冲区中的数据;步骤52,通知所述视频解码对象下一个文件标签将从所述视频文件的文件头开始;步骤53、向所述一级缓冲区导入所述视频文件的件头;步骤54、通知所述视频解码对象下一个导入的标签为所述视频文件的文件体;步骤55、导入以上述定向操作位置最接近的关键帧为开头的所述视频文件的文件流进入二级缓冲区。
优选地是,在所述步骤5后,包括步骤6:检测到所述视频文件被停止播放时,将播放所述视频文件时生成的缓冲文件清除。
优选地是,所述步骤6所述将二个缓冲区中的文件清除通过对FLASH网络流对象的寻找函数赋值为零而实现。
通过本发明的视频解码方法,可以有效控制二进制视频文件加载,通过将二进制视频文件读入二进制数组,可以智能控制放入缓冲区的数据量并按需求清空缓冲区,实现了内存的灵活管理、不同码率的视频的无缝切换,以及在不同网络情况下的顺畅播放。
附图说明
图1为本发明的利用视频播放器对视频文件进行解码方法的流程图;
图2为本发明提供的载入视频文件以及对视频文件解码的流程图;
图3为本发明提供的用户定向操作动作进行视频文件解码流程图;
图4为本发明提供的一优选实施例的流程图。
具体实施方式
结合附图,下面对发明的一种利用视频播放器对视频文件进行解码方法进行详细说明。
按照本发明的利用视频播放器对视频文件进行解码方法包括以下步骤:
步骤1、通过视频播放器访问视频文件的视频源地址获取视频元数据。
通常视频文件保存在特定文件服务器中,视频播放器对该视频进行播放时,要通过该视频文件的播放地址获取该视频文件,在对该视频文件进行播放之前,首先获取视频元数据。视频元数据为描述视频文件存储规则的数据,通过解析视频元数据可以较为容易的解析视频文件。通过访问视频文件的地址,解析该视频文件,从而得到视频元数据。
优选的是,视频文件为FLV文件。
步骤2、根据所述视频元数据的长度计算所述视频文件头长度。
获取到视频元数据后,根据视频元数据的长度计算视频文件头的长度,以FLV文件为例,为解析播放FLV文件,需要获取FLV文件头信息和FLV文件体信息,因此需要计算FLV文件的文件头长度。
FLV文件头的格式一般为:13个字节的视频描述+视频元数据+视频标签+音频标签,因此FLV文件的视频文件头长度的计算公式为:视频文件头长度=13+视频元数据长度+视频标签长度+音频标签长度。
步骤3、将FLASH视频解码对象载入所述视频播放器。
视频解码对象具体指的是对视频文件解码的虚拟解码器,如下所示:
video=newVideo(),video对象为虚拟解码器,必须将其实例化才能使用也即,为video对象开辟一个物理内存空间,所以要设置为newVideo()
addChild(video),也即将实例化的video对象加入显示列表,每个swf文件只有一个显示列表,将video对象加入显示列表即表示在这个swf文件中均由video对象解码,其实就是指定一个解码器。
步骤4、载入所述视频文件并将其读入二进制数组,并利用所述视频解码对象对视频文件解码。
该步骤的具体过程如图2所示,包括以下步骤:
步骤41,通过http流式下载的方式下载URL指定的视频文件;
步骤42,将上述下载的视频文件数据读入二进制数组中;
步骤43,将读入二进制数组中的视频文件通过所述视频解码对象解码。
其中,视频播放器包括两个缓冲区:一级缓冲区和二级缓冲区,步骤42将上述下载的视频文件数据读入二进制数组中,具体包括:逐步向所述二级缓冲区添加视频文件,直至所述视频文件的视频文件标签完整,然后将所述视频文件传入一级缓冲区。
至此,载入视频文件以及对视频文件解码的流程结束。
为了方便理解,以FLV文件格式为例,提供一段代码解释步骤4所述过程:
privatefunctiononInit(event:Event):void
{
loader=newURLStream();
try
{
loader.load(newURLRequest("good.flv"));//下载请求参数中指定的URL(即"good.flv"),将URLRequest对象传递给Loader对象的load()方法以启动URL下载
}
catch(e:Error)
{
trace("--x",e.message);
}
}
privatefunctiononProgress(event:ProgressEvent):void
{
if(loader.bytesAvailable>0)//如果有新下载数据
{
varb:ByteArray=newByteArray();//定义一个二进制数组
loader.readBytes(b,0,loader.bytesAvailable);//将新的下载可用flv数据导入二进制数组
b.position=0;//数组指针从0位开始
b.readBytes(totalBytes,totalBytes.length,b.bytesAvailable);
varns:NetStream=newNetStream(netConnection);
ns.play(null);
ns["appendBytes"](b);//利用appendBytes将上述二进制数组对象进行解码
}
}
上述FLV文件传入一级缓冲区的时间量通过设置FLASH的网络流对象的缓冲时间属性指定,缓冲时间属性根据客户端网速智能设定,其设定原则是,如果客户端网速小于100kb/s,设置缓冲时间为3秒;如果客户端网速大于等于100kb/s,设置缓冲时间为5秒。
上述播放器需处于数据生成模式,需在已连接到空指针的FLASH网络连接对象上创建的网络流对象调用播放功能,在已连接到null的NetConnection上创建的NetStream调用NetStream.play(null)。为了方便理解下面提供一段代码解释如何使上述网络流对象处于数据生成模式:
privatevarns:NetStream;
conn=newNetConnection();
conn.connect(null);
ns=newNetStream(conn);
ns.play(null);
步骤5、检测用户的定向操作动作,根据所述用户的定向操作的位置,读取以操作的位置为起点的视频文件并对其进行解码;
检测用户的定向操作动作包括搜索与用户的定向操作位置最接近的关键帧。以解码某一FLV文件为例,步骤5中根据用户定向操作动作进行视频文件解码流程如图3所示,包括以下步骤:
步骤51、清空一级缓冲区和二级缓冲区中的数据;步骤52,通知视频解码对象下一个文件标签将从视频文件的文件头开始;步骤53、向一级缓冲区导入视频文件的件头;步骤54、通知视频解码对象下一个导入的标签为视频文件的文件体;步骤55、导入以上述定向操作位置最接近的关键帧为开头的视频文件的文件流进入二级缓冲区。
以FLV文件为例,为了方便理解,下面提供一段代码解释步骤5所述解码过程:
overridepublicfunctionseek(time:Number):void
{
varkeyframe:Array=findKeyFrame(time);//根据控制点时间找到对应关键帧
varoffset:Number=keyframe[1];
ns.seek(0);//清空缓冲区数据
ns["appendBytesAction"]("resetBegin");//告诉解码器下一个标签将从flv文件头开始
ns["appendBytes"](byteArray);//byteArray即为flv文件头
ns["appendBytesAction"]("resetSeek");//告诉解码器下一个导入的标签将会是flv文件体开始
ns["appendBytes"](seekByteArray);//seekByteArray即以定向操作位置最接近的关键帧为开头的那段视频流
}
上述步骤1至步骤5为本发明的视频解码的方法,此外,优选的实施例如图4所示,在步骤5之后,为了节省缓存空间,增加步骤6。
步骤6:当检测到视频文件被停止播放时,将播放视频文件时生成的缓冲文件清除。
上述步骤6所述将二个缓冲区中的文件清除通过给上述网络流对象的寻找函数(NetStream.seek())赋值为零实现,即seek(0)。
本发明的提供的视频解码方法用于FLV格式的文件的解码,也可以用于F4V格式的文件的解码。
上述详细描述通过实施例和/或过程的各种实施例。就这些包含一个或多个功能和/或操作而言,本领域技术人员将理解,这些实施例中的每一个功能和/或操作都可由各种各样的硬件、软件、固件、或实际上其任意组合来单独地和/或共同地实现。
应该理解,本文描述的方法可以结合硬件。因此,本发明的方法,可以采用包含在诸如软盘、CD-ROM、硬盘驱动器或任何其他机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中,当程序代码在可编程计算机上执行的情况下,计算设备通常包括处理器、该处理器可读的存储介质(包括易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。一个或多个程序可以例如,通过使用API,可重用控件等来实现或利用结合本发明描述的过程。这样的程序优选地用高级过程语言或面向对象编程语言来实现,以与计算机系统通信。然而,如果需要,该程序可以用汇编语言或机器语言来实现。在任何情形中,语言可以是编译语言或解释语言,且与硬件实现相结合。
需要说明的是,本发明的视频解码方法范畴包括但不限于上述各步骤之间的任意组合。
尽管具体地参考其优选实施例来示出并描述了本发明,但本领域的技术人员可以理解,可以做出形式和细节上的各种改变而不脱离所附权利要求书中所述的本发明的范围。以上结合本发明的具体实施例做了详细描述,但并非是对本发明的限制。凡是依据本发明的技术实质对以上实施例所做的任何简单修改,均仍属于本发明技术方案的范围。
Claims (9)
1.一种利用视频播放器对视频文件进行的视频解码方法,其特征是,包括如下步骤:
步骤1、通过所述视频播放器访问视频文件的视频源地址获取视频元数据;
步骤2、根据所述视频元数据的长度计算所述视频文件头长度;
步骤3、将FLASH的视频解码对象载入所述视频播放器;
步骤4、载入所述视频文件并将其读入二进制数组,并利用所述视频解码对象对视频文件解码;
步骤5、检测用户的定向操作动作,根据所述用户的定向操作的位置,读取以操作的位置为起点的视频文件并对其进行解码;
所述视频播放器包括两个缓冲区:二级缓冲区和一级缓冲区,
所述步骤4包括以下步骤:步骤41,通过http流式下载的方式下载URL指定的视频文件;步骤42,将所述下载的视频文件的数据读入二进制数组中;步骤43,将读入所述二进制数组中的视频文件通过所述视频解码对象解码;
所述步骤42包括:逐步向所述二级缓冲区添加视频文件,直至所述视频文件的视频文件标签完整,然后将所述视频文件传入一级缓冲区。
2.如权利要求1的视频解码方法,其特征是,所述视频文件为FLV文件或F4V文件。
3.如权利要求1的视频解码方法,其特征是,所述步骤2所述视频文件头长度的计算公式为:视频文件头长度=13+视频元数据长度+视频标签长度+音频标签长度。
4.如权利要求1的视频解码方法,其特征是,所述步骤2所述计算视频文件头长度是用于获取视频文件头信息和视频文件体信息。
5.如权利要求1的视频解码方法,其特征是,所述视频文件传入一级缓冲区的时间量通过设置FLASH的网络流对象的缓冲时间属性指定,所述缓冲时间属性根据客户端网速设定,设定原则是:
如果客户端网速小于100kb/s,设置缓冲时间为3秒;
如果客户端网速大于等于100kb/s,设置缓冲时间为5秒。
6.如权利要求1的视频解码方法,其特征是,所述的视频播放器需处于数据生成模式,需在网络流对象调用播放功能,所述网络流对象是在已连接到空指针的FLASH网络连接对象上创建的。
7.如权利要求1的视频解码方法,其特征是,所述检测用户的定向操作动作包括搜索与用户的定向操作位置最接近的关键帧。
8.如权利要求1的视频解码方法,其特征是,所述步骤5中所述读取以操作的位置为起点的视频文件并对其进行解码,解码过程包括如下步骤:步骤51、清空所述一级缓冲区和所述二级缓冲区中的数据;步骤52,通知所述视频解码对象下一个文件标签将从所述视频文件的文件头开始;步骤53、向所述一级缓冲区导入所述视频文件的文件头;步骤54、通知所述视频解码对象下一个导入的标签为所述视频文件的文件体;步骤55、导入以上述定向操作位置最接近的关键帧为开头的所述视频文件的文件流进入二级缓冲区。
9.如权利要求1的视频解码方法,其特征是,在所述步骤5后,包括步骤6:检测到所述视频文件被停止播放时,将播放所述视频文件时生成的缓冲文件清除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210587260.4A CN103051953B (zh) | 2012-12-30 | 2012-12-30 | 一种利用视频播放器对视频文件进行解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210587260.4A CN103051953B (zh) | 2012-12-30 | 2012-12-30 | 一种利用视频播放器对视频文件进行解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103051953A CN103051953A (zh) | 2013-04-17 |
CN103051953B true CN103051953B (zh) | 2016-01-20 |
Family
ID=48064434
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210587260.4A Active CN103051953B (zh) | 2012-12-30 | 2012-12-30 | 一种利用视频播放器对视频文件进行解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103051953B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104519372B (zh) * | 2014-12-19 | 2017-11-21 | 深圳市九洲电器有限公司 | 一种流媒体播放的切换方法和系统 |
CN105979345A (zh) * | 2015-12-03 | 2016-09-28 | 乐视致新电子科技(天津)有限公司 | 一种视频数据的处理方法及装置 |
CN107197363B (zh) * | 2017-07-04 | 2020-07-10 | 武汉斗鱼网络科技有限公司 | 一种视频播放方法及装置 |
CN110545490B (zh) * | 2018-05-29 | 2021-03-16 | 北京字节跳动网络技术有限公司 | 媒体文件转换方法、装置及存储介质 |
CN110545456B (zh) * | 2018-05-29 | 2022-04-01 | 北京字节跳动网络技术有限公司 | 媒体文件的同步播放方法、装置及存储介质 |
CN109302384B (zh) * | 2018-09-03 | 2020-08-04 | 视联动力信息技术股份有限公司 | 一种数据的处理方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101415069A (zh) * | 2008-10-22 | 2009-04-22 | 清华大学 | 一种服务器及其在线播放视频的发送方法 |
CN101957752A (zh) * | 2010-09-03 | 2011-01-26 | 广州市千钧网络科技有限公司 | Flash视频预览方法及其系统,flash播放器 |
CN102595241A (zh) * | 2012-01-19 | 2012-07-18 | 福建创频数码科技有限公司 | 一种机顶盒支持flv视频播放的方法 |
-
2012
- 2012-12-30 CN CN201210587260.4A patent/CN103051953B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101415069A (zh) * | 2008-10-22 | 2009-04-22 | 清华大学 | 一种服务器及其在线播放视频的发送方法 |
CN101957752A (zh) * | 2010-09-03 | 2011-01-26 | 广州市千钧网络科技有限公司 | Flash视频预览方法及其系统,flash播放器 |
CN102595241A (zh) * | 2012-01-19 | 2012-07-18 | 福建创频数码科技有限公司 | 一种机顶盒支持flv视频播放的方法 |
Non-Patent Citations (2)
Title |
---|
FLV视频流编解码知识;博主昵称:jyc1228;《http://blog.csdn.net/jyc1228/article/details/3576617》;20081221;网页全部内容 * |
媒体格式分析之flv -- 基于FFMPEG;博主昵称:博水;《http://www.cnblogs.com/qingquan/archive/2011/08/11/2135531.html》;20110811;网页全部内容 * |
Also Published As
Publication number | Publication date |
---|---|
CN103051953A (zh) | 2013-04-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103051953B (zh) | 一种利用视频播放器对视频文件进行解码方法 | |
CN103348690B (zh) | 一种视频处理的方法及装置 | |
US9832253B2 (en) | Content pre-render and pre-fetch techniques | |
US9979995B2 (en) | Visual hot watch spots in content item playback | |
CN102714050B (zh) | 恢复内容回放的存储设备和方法 | |
US20130066891A1 (en) | Method and apparatus for processing metadata in one or more media streams | |
CN102223416B (zh) | 一种媒体文件的传输方法及系统 | |
US8788762B2 (en) | Methods and apparatuses for data resource provision | |
MX2011007388A (es) | Multiples sistemas de proteccion de contenido en un archivo. | |
CN102567485B (zh) | 用于内容检索的提供商专用解析 | |
CN103338384A (zh) | 一种视频播放方法及装置 | |
WO2012106271A1 (en) | Stitching advertisements into a manifest file for streaming video | |
EP3041241B1 (en) | Method and apparatus for playing multimedia resource | |
TW201607302A (zh) | 用於使用清單屬性來過濾媒體清單的系統 | |
US20170302721A1 (en) | Cloud streaming service system, cloud streaming service method using optimal GPU, and apparatus for same | |
US20230090175A1 (en) | Contextual situation analysis | |
CN104065977A (zh) | 音/视频文件的处理方法及装置 | |
US20130138654A1 (en) | Methods and apparatuses for generating semantic signatures for media content | |
CN104104972A (zh) | 多媒体播放方法、装置及系统 | |
AU2017340761A1 (en) | Techniques for generating and operating on in-memory datasets | |
US9049472B2 (en) | Systems and methods for dynamic media players utilizing media traits | |
KR20150055776A (ko) | 퍼스널 클라우드 스토리지 체인 서비스 시스템 및 방법 | |
CN103677979A (zh) | 应用软件和插件的交互方法及装置 | |
CN103108252B (zh) | 一种互联网电视播出的方法及系统 | |
CN107872716B (zh) | 一种后置封装的流式数据解析方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210623 Address after: 300467 917-2, Chuangzhi building, 482 Zhongxin eco city, Binhai New Area, Tianjin Patentee after: Tianjin Zhirong Innovation Technology Development Co.,Ltd. Address before: 100026 room 6184, 6th floor, building 19, 68 Xueyuan South Road, Haidian District, Beijing Patentee before: LE HOLDINGS (BEIJING) Co.,Ltd. |