如何实现一个c/s模式的flv视频点播系统

本文涉及的产品
视频点播 VOD,流量+存储+转码
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 如何实现一个c/s模式的flv视频点播系统一、写在前面  视频点播,是一个曾经很热,现如今依然很热的一项视频服务技术。本人最近致力于研究将各种视频格式应用于点播系统中,现已研究成功FLV, F4V, MP4, TS格式的视频点播解决方案,完全支持以上格式中存放H.264编码视频的情况,并将继续研究其他格式。

如何实现一个c/s模式的flv视频点播系统

一、写在前面

  视频点播,是一个曾经很热,现如今依然很热的一项视频服务技术。本人最近致力于研究将各种视频格式应用于点播系统中,现已研究成功FLVF4VMP4TS格式的视频点播解决方案,完全支持以上格式中存放H.264编码视频的情况,并将继续研究其他格式。

  这里有一点需要说明的是,F4V本来指的是Adobe基于ISO/IEC 14496-12标准推出来的视频格式,与MP4格式相同,但因为国内许多的视频网站,均把存放H.264编码视频的FLV文件标注为.f4v格式,而这种文件的点播实现方式和普通的FLV是有所不同的,所以,为了避免更加混淆,我沿用了它们的命名方式,因此,“FLV”将仅指包含H.264/AAC编码的一般FLV视频。

  本文简单介绍如何实现一个简单的基于flv的视频点播系统。

二、FLV格式

  FLV(Flash Video)是Adobe公司推出的视频格式,是一种专门用来在网络上传输的视频存储容器格式。其格式相对简单,不需要很大的媒体头部信息,因此加载速度极快。国内各大视频网站,均有采用FLV格式作为其点播、甚至直播的视频格式。FLV容器格式的主要特点是tag,整个FLV由Video Tag, Audio Tag以及其他Tag组成,没有映射表。

  基本上,可以把FLV格式简要画为如下形式:

  

  其中,FLV Header指的是FLV的头部,只有9个字节,和常规的MP4文件头部相比,这个小太多了。FLV MetaData存放的是一些整个视频文件的媒体信息,包括作者、视频宽高、时长、关键帧列表等等,这些信息对于解析视频文件来说,当然很重要,不过可惜的是,因为FLV的MetaData是可有可无的,所以有不少FLV没有MetaData,而且即便有,其MetaData中的信息也是不正确的,这导致MetaData非常不值得信赖。所以,在解析FLV的时候,应该直接忽略FLV MetaData部分,通过遍历FLV的所有Tag,来获取相应的媒体信息。

三、方案

  点播系统的实现,有几个关键点,最重要的应该是“播放网络流”和“拖动”这两点。其中,关于“拖动”,由于整个系统是基于网络的,客户端在拖动之后,必须重新向服务器端发送请求,服务器根据客户端的拖动请求,寻找最接近的拖动点,返回可以播放的数据流,从而完成点播拖动。

  对于FLV来说,因为其格式简单,头部非常小,而MetaData可以不要,所以只需要寻找到关键帧,然后拼上FLV Header,就可以组成一个可播放的视频文件。如下图所示:

  根据FLV格式的特点,以及拖动后生成新的可播放文件的方法,可以将flv点播系统设计成如下方案:

  1. 服务器端

  首先,解析flv文件,生成flv视频关键帧列表,表明时间和便宜量的对应关系。然后,当接收到客户端发来的数据请求时,根据客户端拖动的时间点的请求,找出时间距离最近的关键帧,根据偏移量,读取flv的文件数据,然后拼接flv的9字节文件头部(还需要再加上4个字节全零的pre tag size,共13字节),返回。

  2. 客户端

  客户端需要特别注意的,除了正确的解析视频流并播放,还需要小心时间轴的行进,因为用户拖动的时间位置并不一定是关键帧,所以,需要根据服务器返回的关键帧的真实时间,重新定位播放进度。

四、实现

  服务器可以实现为一个http server,只需要提供http下载,在响应下载之前,需要完成之前所描述的逻辑。可以完全自己实现,可以直接使用现有的成熟web server,如果对性能要求很高,强烈推荐nginx,借助于nginx强大的处理性能,通过实现自己的nginx module,可以完成你所有的需求。

  客户端播放器,对于不太熟悉播放器开发技术的,可基于libvlc,借助于vlc良好的网络播放能力,基本可以满足需要。

下面是前些日子做的一个演示程序,

------------------------------------------------------------

转载请注明作者和出处,谢谢~

相关文章
|
Web App开发 编解码 移动开发
视频点播视频加密流程解决方案
阿里云视频点播加密视频流程讨论
5601 0
视频点播视频加密流程解决方案
设计并实现同时支持多种视频格式的流媒体点播系统
设计并实现同时支持多种视频格式的流媒体点播系统
162 0
|
6月前
|
编解码 缓存 安全
视频点播这边在执行 HLS标准加密 转码后的视频,在解密播放上有些技术问题视频点播这边在执行 HLS标准加密 转码后的视频,在解密播放上有些技术问题
视频点播这边在执行 HLS标准加密 转码后的视频,在解密播放上有些技术问题视频点播这边在执行 HLS标准加密 转码后的视频,在解密播放上有些技术问题
207 1
|
容器
flv拉流在项目中如何使用(二)
这里主要是我们不能使用video容器自带的暂停和播放按钮了,我们要隐藏原来的自己实现暂停和播放。暂停和播放说白了就是断流和重新拉流
149 1
|
移动开发 前端开发 网络协议
flv拉流在项目中如何使用(一)
最近做的项目里面用到通过前端flv.js拉流播放直播视频(实时视频);这里给大家介绍一下流程,首先是前端发送请求后端给返回一个直播流指定地址,然后前端把这个地址通过flv处理放到video容器中进行播放;
401 0
|
存储 编解码 应用服务中间件
如何实现一个c/s模式的flv视频点播系统
如何实现一个c/s模式的flv视频点播系统
95 0
|
JavaScript 视频直播 5G
基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能
由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津津乐道的就只有视频,视频,还是视频,普通人拿起手机做直播早已不是奢望。
基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能
|
CDN
点播试看功能最佳实践
## 简介 试看指用户在观看视频或者音频等内容时,只能观看指定时间(如前五分钟)的内容,通常用于会员等付费业务场景。 阿里云视频点播服务提供了试看的完整解决方案,您可自由设置试看时长(或观看完整视频),播放服务会根据设置提供含有试看限制的特定的播放地址,可借此来实现完整的试看功能。 ## 使用前提 试看的基本原理是,播放的CDN加速地址带有试看的指定时长信息,云端会对该信息进行鉴权,鉴
3153 0
|
编解码 开发工具 容器
阿里云视频点播服务添加视频字幕的实现方案
本文给出了一个为视频点播服务里的视频添加字幕的方案。
4685 0
阿里云视频点播服务添加视频字幕的实现方案
|
编解码 人工智能 文字识别
产品百科 |如何在视频点播服务中选择转码类型
在面对不同行业用户丰富的转码场景需求时,视频点播针对多种业务场景提供了适应多场景化的转码处理方案,实现将用户定制化的场景需求进行抽象提取,最终以适用于其他点播用户的同样或类似的业务场景需求。
产品百科 |如何在视频点播服务中选择转码类型