浅谈视频播放网站的搭建

      注:以下为学习过程中的一点心得体会,还望大家多给点意见啊~ 
      粗略想想:在线视频播放,那视频哪里来?嗯,应该支持用户上传。那用户可以上传哪些格式的呢?这就涉及到视频在网页中播放的原理了。首先不管三七二十一,忽略掉网页播放这个限制,我们先来查查一般的视频在桌面是怎么播放的,播放的原理是什么。



access 访问: 无需多说, 可理解为接收、获取、得到数据流

demux 解复用: 把合在一起的音频和视频分离(还有可能的字幕) 。音视频在制作的时候实际上是独立编码的, 得到的是分开的数据, 为 了 传输方便必须要用某种方式合起来, 这就有了各种封装格式. 例如, rm \ avi \ mov \ mpg 等等. 同时, 在视频播放器上demux解复用部分也就有了他存在的意义 .

decode 解码: 包括音频和视频的解码。影像在录制后, 原始的音视频都是占用大量空间, 而且是冗余度较高的数据. 因此, 通常会在制作的时候就会进行某种压缩 ( 压缩技术就是将数据中的冗余信息去除数据之间的相关性 ). 这就是我们熟知的音视频编码格式, 包括MPEG1(VCD)\ MPEG2(DVD)\ MPEG4 \ H.264 等等. 音视频解码器的作用就是把这些压缩了的数据还原成原始的音视频数据. 当然, 编码解码过程基本上都是有损的 .那播放器是如何实现视频一帧一帧的播放的呢?一般在内存中将压缩的视频帧依次解码出来(当然不可能把一个视频文件的所有压缩数据一次性装到内存中去, 而是读出一点, 然后解码出来一点), 然后一帧一帧送到显卡的显存中就能显示了. 如果机器性能跟得上(基本上不用考虑机器性能), 解一帧的时间小于帧与帧之间的正常间隔, 就能流畅的播放. 每帧的播放是靠PTS来控制的, 解码器解完每幅图像, 都会给出该图像的PTS, video renderer就能按图像的PTS来安排显示.与此同时, 别忘了音频和视频在demux之后是独立的,这就需要有一套机制把它们同步起来. 同时我们需要有一套机制来控制速度、暂停、停止、跳进、 获取各种媒体信息、设置属性等等 .这些也就是同步控制机制来完成的事情(基于时间戳来搞定) .简略来说, 就是以音频时间为主 (声卡有时间同步处理机制), 声音图象交错发送 视频解码时, 按当前播放时间找到对应的视频帧 (可以假设一个音频包有N个图象, 就在这一个音频包完成的过程中按帧率显示图象)

output 输出: 也分为音频和视频的输出(aout 和 vout)

虽然上面的描述已经很清晰了,但看着还是晕晕乎乎的。突然发现我有一个最基本的问题都没弄懂,这就是:什么是视频?

定义: 视频(Video)泛指将一系列静态影像以电信号方式加以捕捉,纪录,处理,储存,传送,与重现的各种技术。连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫做视频。视频技术最早是为了电视系统而发展,但现在已经发展为各种不同的格式以利消费者将视频记录下来。网络技术的发达也促使视频的纪录片段以串流媒体的形式存在于因特网之上并可被电脑接收与播放。视频与电影属于不同的技术,后者是利用照相术将动态的影像捕捉为一系列的静态照片。(取自百度百科)

简单的说视频时一堆图片叠加起来的?好像目前可以这么认为。疑问随之而来:视频是怎么制作出来的?猛一想,摄像机呀,摄像机就能拍视频,那摄像机是通过连续拍照来生成视频的吗?那声音又是怎么记录的?顺着这个思路我们来查查摄像机的工作原理。百度了下,发现找不到我想要找的东西。。。无意中查到一个知识:从根本上来说,一个视频信号基本上只是由亮度和色彩数据构成的2维阵列,该阵列以一定帧率的刷新变化来描述运动。在传统的阴极射线管(CRT)电视和显示器中,屏幕上的磷粉由一个电子束从上到下、从左到右的方式激发产生光亮。我发现我不能在继续挖下去了,下面的水太深。回到开始的问题,即在桌面上视频是怎样被播放的,我们再来查查一些主流的播放器,在百度百科里发现下面这两段描述




至此大概得到一个模糊的结论。视频从服务器传到客户端后调用客户端的播放软件来进行播放。

其流程为 视频从服务器传输到客户端-》客户端调用相应软件进行解码-》播放

其中2,3两个过程可以合并。问题貌似比较明朗了,网上确实也有不少人是这样做的,就是在视频里面设置一些参数来指导客户端软件对其进行正确的解码。类似于下图这样


我没试过这个,大家有兴趣可以试下。可是这有个问题:对于有些格式如果客户端没有软件支持那怎么办呢?针对这个问题,有了另外一个方案:

用户上传视频-》在后台将视频统一转化成flv格式-》传输flv格式的视频-》调用客户端的flash播放器进行播放

鉴于flash播放器99%的装机率,这种方案看起来比较可行,好吧我们一步一步来。

(1)视频上传 这个普通的html上传就行。或者有一个组件叫swfupload。这个组件丰富了视频上传的整个过程,比如上传进度显示,上传格式的限制。另外,有些语言会对post文件的大小进行限制,比如我电脑里安装的php对post的最大限制是100MB,这个可以通过修改配置文件加以扩充。

(2)视频转码 相信大家很多都用过一些视频格式转换软件,但是这些软件我们不能用,因为我们需要的是能自动进行转码,必须提供接口我们才能用。通过百度知道有款软件叫ffmpeg,我们 可以通过编写运行windows脚本通过调用命令的方式来进行转码。对应到php里面就是调用system()函数来调用命令行。ffmpeg还针对php提供了ffmpeg-php 类库允许我们对视频进行更加精细的控制,比如获取视频每一帧的图像。

(3)视频传输 这个就不用我们管了,就通过http来进行传输(好像有点不对,希望明白的同学能告诉我下)

(4)视频播放 普通的flash播放器就行,当然有很多界面比较漂亮的基于flash开发的开源播放器,可以随便选择一款喜欢的。

至此,一个视频播放网站的简易框架就基本搭好了。但是还是有很多问题需要考虑,不过 如果有很多用户同时上传视频,那么后台的转码任务就会很繁重,服务器很容易崩溃。解决的方法也很简单:不在上传之后马上进行解码,把需要解码的文件信息存入一个文件,然后写个脚本文件每天定期扫描这个文件,顺序执行进行解码。

虽然问题看似成功了,但里面还是有好多东西是我没弄清楚的。不过就此打住吧,还是那就句话,再往下挖水就太深了,会被淹死.....等以后水性好一点了再来挖吧微笑

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值