https://www6.software.ibm.com/developerworks/cn/education/opensource/os-php-ondemvideo1/index.html
2008
年
5
月
12
日
创建您自己的视频点播网站并不复杂。上传一些视频,然后供人们观看。就这么简单。但是如果您想要做很多视频,则必须将它们组织起来。这个
“使用 PHP 创建自己的视频点播网站 ”
教程系列包括三部分,将带您了解如何创建针对
Web
优化的视频,以及创建用于组织视频和使视频可访问的
PHP
应用程序。第
1
主要介绍基本工作,包括装配和安装必须的组件以及收集和转换视频。
开始之前
本系列是为开发人员编写的。您应该可以轻松使用
PHP
和
Web
应用程序。完成这个系列并不要求您是一名专家,但是不会花费太多的时间解释
PHP
语法和
Web
应用程序概念。如果两者您都不熟悉,但是渴望学习这些内容,也可以深入钻研。了解一些基本的数字视频知识也有帮助,但是我们会主要解释您需要了解的知识。
关于本系列
第一部分包含组件的装配和安装、处理视频转换以及应用程序准备。我们在这里进行了很多基础工作。需要学习很多数字视频知识,并且我们需要为第二部分中的编码做好准备。
在第二部分,您会构建一个基本的应用程序,管理上传的文件和标记。您会使用一个
PHP
框架
—
具体指
CakePHP —
来开始这个过程。这个应用程序并不是一个视频共享网站,而是关注于管理您自己的文件并供人们观看。
在第三部分,您会添加一些高级功能,并创建一个漂亮的用户界面。我们将对
UI
进行优化并使用流行视频共享网站的
API
来传播您的视频。如果说第一部分为创建做准备,第二部分是使其能够工作,那么第三部分就是不断完善应用程序。
关于此教程
在这个分三个部分的系列
“
使用
PHP
创建自己的视频点播网站
”
的第一部分,我们将首先介绍数字视频的各种类型以及它们独特的特性。当为
Web
创建视频时,您需要考虑的最重要的问题是,您是希望您的视频尽可能保持较小的体积以方便下载,还是希望您的视频尽可能保持较好的质量。我们也会介绍如何将视频转换为
Flash Video (FLV)
格式,并查看一些实现流视频的选项。在这个阶段还没有很多编码工作,但是我们必须安装好这个框架并设置好数据库。
系统要求
要在此系列中使用数字视频,您需要进行一些设置(这里不介绍基本组件的安装):
一些数字视频内容 — 可以是您创建、拍摄或从其它媒体导入的视频。
一个 Microsoft® Windows® XP 盒 — 提供的这些例子使用一些针对 Windows XP 编写的软件。
FFmpeg ,一个开源的命令行视频转换工具。
Riva FLV Encoder V2.0 for Windows ,一个可免费使用 30 天的视频转换工具。
用于其它平台的 FLV 转换程序的 Wikipedia 。
Red5 ,一个基于 Java™ 的开源 Flash 服务器。
JW FLV MEDIA PLAYER V3.15 ,一个小巧的嵌入式 Flash 媒体播放器。
对于
Web
应用程序,您还需要:
一个支持会话的 HTTP 服务器(最好是 mod_rewrite )。这个系列是使用启用了 mod_rewrite 的 Apache V1.3 写的。
下载 CakePHP 的 1.2 beta 版本。
PHP V5.1.4 或更高版本。并不是检测的所有框架都需要这个级别的 PHP 版本,但是所有的框架将使用同样的 PHP 安装。这个系列使用的是 PHP V5.2.3 。
比较新的 MySQL 版本。可以使用并支持一些其他的数据库选项,但是这个系列和示例应用程序都使用的是 MySQL V5.0.37 。
如果您对编写代码、
PHP
、数据库等完全不了解,那么您将会发现很难理解这个系列教程。您应该首先学习一些关于使用
PHP
编写
Web
应用程序的知识(关于各个项目的链接,请参阅
参考资料
)。
数字视频知识
如果您已经下载了数字视频内容,那么各种视频格式一定让您很费解,其中一些尤其难懂。在开始共享视频之前,您需要了解一些可能遇到的格式的知识,以及将视频从一种格式转换为另一种时需要考虑的注意事项。
了解数字视频
学习数字视频是一个让人畏惧的话题。有令人眼花缭乱的视频格式,以及数不清的用于编辑、转换、打包(
fold
)、
spindle
、销毁(
mutilate
)它们的工具。更糟糕的是,很多信息非常混乱甚至明显是自相矛盾的,使您面对海量的信息茫然不知所措。但是,既然我们的目标是通过我们的网站流式播放视频,而不是提供
DVD
品质的视频,我们可以忽略很多太深奥的概念,集中解决实际问题。
获得视频
如果您要从记录在磁带上的老式模拟摄像机中获得视频,则您需要一个视频采集卡或者外置的
USB
或
Firewire
视频采集设备。如果您拥有支持模拟数字信号转换的数码摄像机,则您可以通过您的摄像机运行旧的视频,将其传输到计算机中,就像视频来自于数码摄像机一样。
如果您使用数码摄像机,则信息本身就已经是数字的,您所要做的,就是将摄像机插入计算机。在手册中找到如何将视频传输到系统中的说明。
如果您没有数码摄像机,则您可以使用一些现有资源,比如
Internet Archive
(请参阅
Resources
)或其他免费或廉价的影片素材网站。您甚至可以使用很多编辑工具,使用照片制作视频幻灯片,包括与系统绑定的软件。
文件格式
视频文件格式种类繁多,并且每种格式都提供了大量的详细信息。让我们把范围缩小到最常使用的视频格式。最常见的格式包括:
DV 和 HDV 是摄像机最典型的格式,得到了很多平台上广泛的软件支持。 HDV 实际上是一种高分辨率的 DV 文件。
AVI 是一种常见的 Microsoft 格式,并且在其他平台上也受支持,但是这种格式被认为有些过时,因为出现了文件体积更小、视频质量相当的其他格式(包括 Microsoft 最新的 WMV )。
MOV 是一种 Apple Quicktime 格式,在大多数平台上都得到了广泛支持,使它成为一个流行的选择。在 FLV 出现之前,它是 Web 流媒体格式的事实标准。
MP4 是一种高于一般品质的精简的文件格式。这种格式在移动设备上使用非常广泛,并且在很多平台上都受支持,但是如果在比较老的系统上使用可能会遇到问题。
最后提到的一种格式是
Flash Video (FLV)
。我们将把我们的视频转换为
FLV
格式,以便从我们的网站上进行流式传输。现在,在大多数连接到
Web
的系统上都安装了
Flash
播放器,
FLV
是得到最多支持的格式之一,这意味着更多的人将可以观看您的视频。
FLV
也使您可以访问大量基于
Flash
的媒体播放器,您迟早会用到这个特性的。
大小
vs. 品质
使用流式数字视频需要进行权衡。最理想的情况是,可以提供全屏的高分辨率视频,无需压缩或只进行少量压缩,获得与
DVD
相当的品质。当然,在现实世界中,这意味着漫长的下载时间,所以让我们来看看涉及到的所有重要因素。
当您把视频文件从原始格式转换为适合流式传输的
FLV
格式时,您可以控制三个因素:时间、帧大小和压缩。其中每个因素都与包含信息的文件有关,可通过调节这些因素减小文件的大小。
时间
时间是最直接的。如果您有一个视频,其体积是您期望大小的两倍,那么可以将它剪掉一半。当然,这样可能会使视频变得不可用,但是在您拍摄素材的时候这是可以控制的,因此并不一定要完全删减。在时间方面还有一个方法,就是不用剪掉一部分视频,而是较少地显示整个视频。一个视频文件实际上是由一系列静止的图像按顺序显示,所以可以通过降低帧速率来做到这一点,在一个较长的时间段内显示较少的图像。这里需要权衡的是,每秒钟显示的帧越少,则视频起伏和抖动得越厉害。超过一定限度,就成了幻灯片了。
帧大小
下一个要考虑的是帧大小。如上面提到的,视频是一系列的帧,每个帧都是占用空间和内存的像素栅格。如果您删除其中一些像素,应该不会产生特别明显的变化,而您可以显著地减小文件的大小。每删除一个像素,将释放每个像素占用空间乘以文件帧数得到的总空间。只要记住,当您减小视频大小时,需要在高度和宽度上减去同样的大小,以保持画面比例。您可能记得将邮票大小的视频投影到巨大的空白银幕的年代。我们并不需要达到那个水平。现在大约
640x480
像素大小就可以用于
Web
了,所以您不需要牺牲太多。当然,在这里也有一个权衡。当您处理这些像素时,您并不是简单地将它们从边上剪掉(当然,您也可以这么做,但这样会导致视频变得很古怪):您获得很多信息,对信息进行平均,使同样的图像变小一点。该图像不会包含相同程度的细节,如果您让很庞大的一个文件变得非常小,那么结果可能不会很好。另外,也可以将比较小的视频变大,但是结果通常比保持原始大小要糟得多。
压缩
最后一个元素是压缩。我们将忽略很多此主题的内容,直接探讨最相关的要点。在数字图像中,压缩是通过删除我们不会察觉到的信息来实现的。重复信息的区域
—
相同或相似的像素
—
这些内容使用一种描述来代替,所以当我们打开这个图像的时候,可以向我们显示一个近似的图像。比如一片蓝天。组成这片蓝天的区域可能包含成千上万种蓝色,但是我们只能注意到一些。所以压缩时选取这些区域,平均化它们,去掉所有那些我们不会看到的蓝色,记下那些应该使用同一种蓝色填充的区域,然后下次我们打开这幅图片时,显示给我们的就是一个简单一些的天空。
对于一系列图片,也可以在时间维度上压缩。使用和平均平面区域同样的方式,对信息流进行平均。既然一个像素在帧与帧之间没有太多变化,那为什么不使用一个说明来代替
1,000
个类似的蓝色像素的流,从而不需要改变后面的
999
帧?当然,如果使用了太多的压缩,则会使您的视频变得很古怪。您可能看到过有些视频上有大片静止的平面区域,直到某种块状物体在上面经过。这可能就是由于应用了太多压缩引起的。
了解了这些概念后,我们将把您的文件从原始格式转换为
.flv
,以便在网站上使用。
转换到
FLV
有很多视频转换程序可以使用。开源的命令行工具
FFmpeg
(请参阅
系统要求
)可以直接使用,但是这个项目的一项策略就是,为了展示该项目源代码的最新更新,从来不会删减它的发行版。因此,除非您时间充裕,愿意下载和操作扩展名为
.tar.bz
之类的文件并且手边有
C
编译器,否则我们不推荐使用
FFmpeg
。
幸好已经有免费的程序,可以使用
FFmpeg
完成所有的实际工作,并且使用一个友好的安装程序将其打包为比较适合的
GUI
中。出于本文的目的,我们将使用一个这样的程序:
Riva FLV Encoder V2.0 for Windows
(请参阅
系统要求
)。对于非
Windows
用户的人,会发现查看
Wikipedia
对可用的
FLV
转换程序的介绍会很有用。
Riva
比较简单,积极的初学者可以在安装的片刻内将较短的视频转换为合适的
FLV
文件。启动程序后,只需要使用它浏览到您想要编码的视频,单击屏幕底部的
Encode
按钮。当完成对视频的处理后(可能需要一段时间,
—
视频越长,所需时间就越长),您就可以通过单击屏幕底端刚激活的
Preview
按钮,预览您刚刚创建的
FLV
文件。既然您已经验证了它确实非常简单,我们就可以放松一下,做一些别的事情。
图
1. Riva FLV 编码器 (图片未显示详见 ibm 上述引用网址 )
首先要注意的是,
Riva FLV Encoder
是和视频编码预设置一起提供的,是根据不同连接速度的期望带宽提供的。由于我们的目标是制作适合流式传输到大量不同设置的视频,您完全可以忽略它们的
“
离线
”
预设,而关注一些更实际的东西。
Riva
的
ISDN
预设为
240x180
,
15
帧
/
秒,比特率为
96 Kbps
。相反,其
DSL
预设为
640x480
,
25
帧
/
秒,比特率为
360 Kbps
。您大概希望使用这两个极端的中间值,因此可以把这两个值作为下限和上限,而不希望超出这个范围(除非您确实需要)。比如
YouTube
,以
320x240
的分辨率、变化的帧速率和大约
310 kbps
左右的比特率编码视频。
不幸的是,不存在始终产生理想结果、普遍适用的
“
正确
”
数字集。只有花费时间根据实际情况调节编码过程,才能获得最好的视频编码。模仿流行的设置通常情况下会让您满意,但是失去人为参与的编码过程无法监视以后的视频,因而不能保证它仍然传达期望的内容。除非设法编写一个自动化的编码器,可以执行类似检验计时等事情,否则编码过程将保持不变:这是一个不断变化的复杂权衡过程。
有关编码的一些其他注意事项
一般而言,总体移动较少的视频可以拥有较高的帧速率,而不需要过度降低画面质量,因此更容易以比较满意的方式进行编码。不幸的是,也存在相反的情况:具有大量动画的视频很容易出现问题,比如画面突然从非常清晰的状态变为大量彩色斑点,而此时正是应该执行操作的时候。
您选择要转换的画面大小应该和源视频具有同样的高宽比,否则结构会发生错误。通常,美国使用
NTSC
视频,其高宽比为
4:3
,而欧洲的
PAL
制式视频高宽比为
5:4
。大多数的
HD
视频本身的高宽比为
16:9
。同样,您会发现对于简单的计算,画面会更加清晰。例如:您想要缩小一个视频的显示大小。如果您通过将原始画面的宽和高除以
2
得到目标大小,则编码器将可以通过每隔一行删除一行像素、每隔一列删除一列像素来获得所需的大小。这非常容易。如果您要将原始画面的大小除以(比如)
3/2
,则编码器必须计算出它如何去掉您要保留的每一整行的半行像素。这样将执行大量的平均工作,因此与更方便的计算相比,复杂计算产生的小型视频的清晰度会更低。
如果您的视频使用可直接输出到在
HDTV
之前生产的设备的摄像设备拍摄,那么源视频很可能是隔行扫描的。如果您曾经将您的图像从模拟转换为数字,则也可能是隔行扫描的。
Riva FLV Encoder
可以对视频执行
“
去隔行(
deinterlace
)
”
操作,由于隔行扫描视频本来是用于电视机的,在大多数计算机显示器上没有任何意义,因此您可能希望那么做。如果您不确定您是否是隔行扫描,那么应该尝试以两种方式编码并比较结果,这比钻研您已经丢失的硬件手册可能要容易得多。
放置视频
现在,您已经了解了视频格式,您可以将您的视频转换为
FLV
,并且您已经非常了解如何使您的视频文件保持合理的大小。现在您需要着手处理如何放置视频以供人们观看。当涉及交付视频时,有多种选择。您可以努力避免您的视频被轻易下载,或者您可以通过控制可用的内容来控制分配。两种方式都各有优缺点。只要记住一点:您不仅仅是将一个文件放在服务器上供他人下载。
交付控制和流式传输
不一定必须通过一个流来观看
FLV
文件。您可以允许用户下载文件并在他们的计算机上直接观看,但是该视频可能会超出您的控制并到处传播。您可以将全部内容嵌入到一个
Flash
文件内来交付您的
FLV
视频,从而添加一些控制。但是,将您的视频分别封装到各自的
SWF
文件是不可扩展的:每当有一个新视频时,您将不得不手动构建一个新的、独立的
Flash
播放器。这就好像每次您租一部电影时要买一个新
DVD
播放器一样。
因此我们有两个流式传输选择:
RTMP
和渐进式下载(
progressive download
)
HTTP
。
Real-Time Messaging Protocol (RTMP)
是
Macromedia
自己的流式传输协议。为了能够发布成熟的
RTMP
流,您必须首先安装
RTMP
媒体服务器软件。然后您不仅可以通过该媒体服务器流式传输您的
FLV
视频文件,而且还可以传输
RTMP
实时
“
广播
”
流。因为
RTMP
要求安装服务器软件,所以要实现流式传输会涉及更多的开销。
HTTP
中的渐进式下载是一种新的选择,适合那些不能或不想在他们的
Web
空间安装新服务的人。很多人发现它非常方便,连接都是通过
HTTP
来生成的,因为它不需要额外的协议,并且服务器端代码很容易通过(比如)
PHP
处理。但是,值得指出的是,如果您所有的视频都是通过
HTTP
托管,因此不会推断您的源文件的存放位置,并且会直接下载到播放器外部。另外,由于
HTTP
中的渐进式下载从技术上讲并不是真正的流,您将无法主持实时广播。
两种流式传输方式都需要使用
Flash
内置的视频播放器对象,您需要自己查找或者使用
Flash
制作工具进行创建。
RTMP
Macromedia
为流式传输开发了
RTMP
协议,供那些使用媒体服务器软件发布
RTMP
流的人使用。现在,要使用
RTMP
发布,我们可以使用
Red5
(请参阅
系统要求
)
—
一个基于
Java
的开源
Flash
服务器,它是从
Macromedia
媒体服务器的反向工程得到的。
当然,使用
Red5
必须在某个位置安装该服务并打开您的媒体服务器和外部世界之间的相关端口。除非您可以进行控制,否则不要使用
Red5
或任何其他
RTMP
媒体服务器。
渐进式下载
HTTP
幸运的是,对于大多数
Web
管理员来说,还有一种选择只需要安装
PHP
:渐进式下载
HTTP
。但它不仅仅是那些无法使用
RTMP
的人的选择。当前
Internet
上的视频共享网站,主要参与者似乎都倾向于渐进式下载
HTTP
,而不是
RTMP
流式传输。
与其向
Macromedia
支付昂贵的媒体服务器许可证费用,或者冒着被起诉的危险,使用反向工程得到的私有协议运行媒体站点,主要参与者选择制作自己的软件并使用
HTTP
进行数据传输。
HTTP
将使数据通过防火墙而不会出现问题,而
RTMP
则无法做到这点。也许最重要的是:虽然他们放弃了
RTMP
可以发布实时流的能力,但是获得了更大的灵活性,视频呈现不会引起严重的带宽问题。渐进式
HTTP
允许客户跳到视频中的关键帧,而不会等到它进入客户机缓冲区,不需要重新开始下载。这种情况只有在假设流具有静态特性时才会发生。这种假设并不适合
RTMP
协议,因为它能够像呈现静态流那样呈现实时流。
有关
OS-FL
的信息,请参阅
Resources
,它是一个开源的渐进式
HTTP Flash
播放器的例子。因为它是由
PHP
驱动的,如果您已经很好地安装了
PHP
的话,那么丢失一些源代码也不会产生什么问题。另外,将该播放器嵌入到同一服务器中的页面也非常容易。但是,请注意:如果您使用浏览器在一个具有嵌入式视频的加载页面上查看资源(例如,他们的演示页面),则整个
FLV URL
会显示在外部,任何人都可以看见,他们应该注意查看。您应该在浏览器中直接点击那个
URL
,没有什么可以阻止您保存所有视频的直接副本。
YouTube
如何规避直接下载的问题呢?首先,他们在
Flash
中制作了自己的自定义视频播放器,它向其接受的参数中加入了某种神秘的内容。
清单
1
是一个将
YouTube
视频播放器嵌入页面的代码的片段。
清单
1. 将 YouTube 视频播放器嵌入网页的代码
/v/3g-yrjh58ms&rel=1"> type="application/x-shockwave-flash" wmode="transparent" width="425" height="355">
注意参数
movie
(以及嵌入的资源)并不是对
FLV
文件的直接引用。根据他们的设计,我们不知道他们基于
Flash
的视频播放器对该参数传递的
URL
做了什么,但是至少我们可以推断,这是一个更加复杂的系统。将原始
URL
放到浏览器中但没有获得
.flv
证明了这一点。实际上,
YouTube
花费了很多心思,确保他们的视频播放器直接接触其视频。保持这种神秘的完整性需要多个人全天候地工作。
一般来说,在大多数情况下,放弃
RTMP
而选择渐进式下载
HTTP
比较好,除非没有其他的方法来解决您的特殊问题。如果您需要发布实时流媒体,您就没有选择:您必须选择
RTMP
。如果维持相关控制的能力是妨碍您使用渐进式下载
HTTP
的惟一因素,您也许应该获取
Macromedia Flash
并编写自己的自定义视频播放器,插入尽可能多的神秘内容,并应用一些聪明的服务器端重定向。
然而您应该知道,如果某个人下定了决心,我们提到的所有技术都可以被攻破,所以将您的比较敏感的
URL
放在一个至少不会被直接找到或索引的地方,这种做法永远都是一项好的实践。
数字媒体理论
最后,您的内容可能会以意想不到的方式进分布或传播。这对您可能很重要,也可能不重要。对于想要控制其媒体的人和想要无限制观看传播媒体的人来说,在线媒体传播是一场恒久的战争。这场战争的副产品,就是媒体破解者和媒体限制协议之间不断升级的军备竞赛。在这方面您应该有自己的想法,但是如果您想要尽可能地控制您的媒体,您应该做好思想准备:无论您怎么做,总会有人找到方法重新传播您的媒体。这并不是说控制您自己的媒体永远都是徒劳的
—
只是说如果您要找到一种让别人永远无法破解您的媒体的方法,那么您永远都不可能找到。
构建管理应用程序
如果您要做很多视频,那么最后会发现,希望使用一些工具帮助更好地管理自己的文件。现在已经有很多视频共享网站了,自己去另外创建一个似乎有点傻。这样说来,您需要的并不是一个更好的视频共享网站:而需要一个可以帮助您管理视频文件的东西。我们以此为目标,将构建一个非常简单的应用程序。您现在还不能进行编码
—
这是第二部分的内容。但是我们需要安装用来构建应用程序和设置数据库表的框架。
应用程序概述
构建另一个和其他现有视频共享网站类似的网站只是重复工作,并没有什么意义。这个应用程序将采用不同的方法来管理在线视频:
1.
您将上传视频到您自己的域中。
2.
重点在于呈现自己的视频,而不是创建一个视频共享社区。
3.
支持多用户,但不是自注册方式(只能邀请)
4.
主要使用标记来管理和查找视频。
标记现在非常普遍,但是大多数使用标记的网站还是使用分类作为管理的主要方法。就其他方面来说,最好将应用程序托管在您的网站上,这样您和您的支持人员可以发布自己的视频,而不是让很多偶然的用户上传视频到您的网站。当您检查框架安装时,在数据库设计方面要考虑这些特殊的问题。
安装框架
为了尽可能减少我们需要编写的应用程序代码量,我们将使用一种叫做
CakePHP
的
PHP
框架获得一些重要的改进。如果您以前从未使用过框架或
CakePHP
,现在已经有很多阅读材料可以帮助您入门。对于这里介绍的内容和本系列的第二部分,您会发现阅读一些有关该主题的东西会非常有用。
请访问
CakePHP.org
并下载
1.2 beta
版(请参阅
系统要求
)。
1.2
版本拥有一些我们希望在应用程序中使用的新功能。只要您满足了先决条件,安装
CakePHP
是相当简单的。在本教程中,我们使用具有
mod_rewrite
的
Apache V1.3
、
PHP V5.2.3
和
MySQL V5
。
下载并解压缩
CakePHP
,然后配置您的
Web
服务器,以便使用
CakePHP
的
webroot
目录作为文档的根目录。例如,如果您将
CakePHP
解压缩到
/cakephp
目录,您的文档根目录将设置为
/cakephp/app/webroot
目录。您还需要对
/cakephp/app/config/database.php.default
文件进行修改。将此文件复制到
/cakephp/app/config/database.php
并输入您系统的主机、账户、密码和数据库名。另外,
在
/column/protected/cakephp/app/config/core.php
中,您应该修改
CAKE_SESSION_STRING
的定义,这样
Cake
就不会对默认值有异议。您可以将默认值替换为类似下面的内容:
define('CAKE_SESSION_STRING', 'The important thing here is that no one is on fire.');
。
安装好
Cake
后,您可以开始设置您的数据库表。那意味着可以清楚地了解应用程序的外观。
设置表
让我们看看这个应用程序将会做什么,并找出您需要的表。
您将上传文件到自己的域中。这意味着您将需要视频表来包含有关这些特定文件的信息。每个文件将需要一个
ID
字段以及至少一个标题。您可以将视频文件实际存储在数据库中,但是最终证明这不是个好方法。您最好将文件存储在文件系统中并记住其位置。这说明您还需要一个位置字段。为了进一步完善,您可以用一个创建的字段和一个
user_id
字段来跟踪哪些视频属于哪个人。
清单
2. 创建视频表
CREATE TABLE 'videos' ( 'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 'title' VARCHAR( 255 ) NOT NULL , 'location' VARCHAR( 255 ) NOT NULL , 'user_id' INT( 10 ) NOT NULL , 'created' DATETIME DEFAULT NULL ) ENGINE = MYISAM ;
它将支持多用户,但不是自注册的方式。这意味着您将需要一个用户表来存储用户信息。至少您将需要保存用户名、密码、电子邮件、人名、姓氏字段。
清单
3. 创建用户表
CREATE TABLE 'users' ( 'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 'username' VARCHAR( 40 ) NOT NULL , 'password' VARCHAR( 40 ) NOT NULL , 'email' VARCHAR( 255 ) NOT NULL , 'firstname' VARCHAR( 40 ) NOT NULL , 'lastname' VARCHAR( 40 ) NOT NULL ) ENGINE = MYISAM ;
标记将是组织和发现视频的主要方法。这意味着您将需要一个
tags
表来包含特定标记,以及一个
videos_tags
表来连接二者。
清单
4. 创建 tags 表
CREATE TABLE 'tags' ( 'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 'text' VARCHAR( 40 ) NOT NULL ) ENGINE = MYISAM ; CREATE TABLE `videos_tags` ( 'video_id' INT( 10 ) NOT NULL, 'tag_id' INT( 10 ) NOT NULL, PRIMARY KEY ('video_id', 'tag_id') ) ENGINE = MYISAM ;
在您的数据库中创建这些表。根据您使用的数据库,您的
SQL
可能需要更新。
应用程序展望
在第二部分中,您将构建一个应用程序来帮助管理视频文件。听起来好像不太复杂,对吗?那完全取决于您想从应用程序中获得什么。简单文件管理并不复杂、新颖或有趣。如果您希望应用程序更加有用,则需要提供更多功能。
花一些时间逛一逛您最喜欢的数字视频网站。记下您喜欢和不喜欢的东西。了解这些网站是如何运作的。它们的相同之处和不同之处。
当开始使用该应用程序时,至少还需要一些东西。除了简单的文件管理,我们需要一种组织文件的方法。这将允许您和观看者能够轻松找到给定主题的文件。最好列一张您认为不错的功能清单。其中一些会在此系列中涉及到,其他的可能需要您自己解决。
您还应该花一点时间熟悉这个开源的
FLV
播放器和
PHP
库。在第二部分我们要大量使用它们。播放器本身可以很容易地嵌入
—
您只需要使用这样的一行
PHP
代码:
.
但是您不需要成为一名
PHP
专家来识别出该行中的
FLV
函数不是标准的
PHP
。该函数是在
OS FLV
库中定义的。尽可能多花时间熟悉它。第二部分将会有大量编程,届时您一定会非常庆幸事先了解了这些内容。
结束语
此刻您已经为您的新视频网站布置了很多东西。在第二部分,您将构建一个应用程序,帮助您组织视频文件,包括文件管理和标记。同时,您应该花时间收集(或拍摄)一些数字视频,并尝试格式转换,以熟悉我们先前提到的压缩处理的细节。
参考资料
学习
获得 CakePHP 手册 。
阅读共分 5 部分的系列文章 “使用 CakePHP 快速打造 Web 站点 ” 。
查看 Wikipedia 对 Flash 视频编码器 的解释,它将普通的视频转换为 Flash Video (FLV) 格式。
PHP.net 为 PHP 开发人员提供了丰富资源。
查看 “PHP 推荐读物列表 ” 。
浏览 developerWorks 上的全部 PHP 文章 和 PHP 免费教程 。
通过查阅 IBM developerWorks 的 PHP 项目资源 扩展 PHP 技能。
要收听针对软件开发人员的有趣访谈和讨论,请访问 developerWorks podcasts 。
要将数据库与 PHP 结合使用?查看 Zend Core for IBM 它是一个无缝的、可以立即使用、易于安装、支持 IBM DB2 V9 的 PHP 开发和生产环境。
随时关注 developerWorks 的 技术活动和网络广播 。
查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会、交易展览、网络广播和其他 活动 。
访问 developerWorks 开放源码专区 ,获得丰富的 how-to 信息、工具和项目更新,帮助您用开放源码技术进行开发,并与 IBM 产品结合使用。
查看免费的 developerWorks On demand demos 观看并了解 IBM 及开源技术和产品功能。
获得产品和技术
从 PHP.net 下载 PHP V5.1.4 或更高版本。并不是所有的框架都需要使用这个版本的 PHP ,但是为了安装简便,所有框架都将使用相同的 PHP 安装。本系列使用的是 PHP V5.2.3 。
本系列和示例应用程序使用 MySQL V5.0.37 编写,可从 MySQL.com 获得。
下载 FFmpeg 的最新版本,这是一个命令行式、开源的视频转换实用工具。
下载 Riva FLV Encoder V2.0 for Windows 的试用版,面向 Windows 的视频转换实用工具,由 Rothenberger Global Training Solutions 提供。
下载 Red5 ,这是一个基于 Java 的开源 Flash 服务器。
下载 JW FLV Media Player ,这是一个小型的嵌入式 Flash 媒体播放器。
下载 OS FLV ,它是 改进的 HTTP Flash 播放器的开源示例 。 查看 演示视频 。
从 Apache HTTP Server Project 下载 Apache V1.3 并启用 mod_rewrite 。
从 CakePHP.org 下载 CakePHP 。
从 Internet Archive 下载 video content 。
使用 IBM 试用软件 改进您的下一个开发项目,这些软件可以通过下载或从 DVD 中获得。
下载 IBM 产品评估版 并开始使用来自 DB2® 、 Lotus® 、 Rational® 、 Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。