本文将告诉你如何创建网站的PHP部分以及如何使用Flex框架创建一个视频播放器。要创建一个YouTube的简单版本(我们可以称它为MyTube),你需要有一些适当的工具。
在服务器端,你需要PHP 和MySQL。MySQL是用来存储有关视频的数据的(比如视频的文件名,缩略图,缩略图的高度和宽度,标题和描述)。PHP将完成格式化页面的工作,包括HTML和XML页面,这取决于你想要怎么做。你还需要一个开源的软件:ffmpeg,它可以将用户上传的任何格式的视频文件转换成FlashVideo文件(FLV)。当你向用户展示一个可用的视频列表时,这个 ffmpeg软件还可以生成视频中某一帧的缩略图。毫无疑问,在视频分享的世界中ffmpeg会是你最好的助手。它是一个功能强大、易于使用而且文档齐全的极为优秀的软件。在客户端,有几种不同的用户界面可供选择。第一种就是类似于YouTube的HTML/Flash混合式的用户界面,另外一种就是完全基于Flash的用户界面。这里我选择了Flex框架来创建一个Flash程序,这个程序首先播放视频,然后会列出一个可用视频的列表并提供导航。创建PHP后台创建后台的程序之前,你必须先在MySQL建立一些数据库模式(schema)。首先,创建一个数据库,你可以使用mysqladmin命令行: 复制内容到剪贴板
完成之后,将模式加载到数据库,模式文件内容如下: movies.sql 代码:
mysqladmin create movies
复制内容到剪贴板
要向数据库中添加数据,你需要开发一个HTML上传页面,它可以上传视频,将视频转换成FlashVideo,获得一个缩略图并将这些信息添加到数据库中。 创建上传页面 事实上,创建一个上传视频的HTML页很简单,如下: addmovie.html 代码:
DROP TABLE IF EXISTS movies;CREATE TABLE movies (movieId INTEGER NOT NULL AUTO_INCREMENT,title VARCHAR( 255 ),source VARCHAR( 255 ),thumb VARCHAR( 255 ),width INTEGER,height INTEGER,PRIMARY KEY( movieId ));
复制内容到剪贴板
这个页面的表单提交到 upload.php 页,upload.php会处理视频,抓取缩略图并将数据添加到数据库中。页面代码如下: upload.php 代码:
<html><body><form enctype="multipart/form-data" method="post"action="upload.php"><input type="hidden" name="MAX_FILE_SIZE"value="300000" /><table><tr><td>Title</td><td><inputtype="text"name="title"></td></tr><tr><td>Movie</td><td><inputtype="file"name="movie"></td></tr></table><input type="submit" value="Upload"/></form></body></html>
复制内容到剪贴板
函数flv_import()是脚本代码的核心部分,它调用了converttoflv() 函数和getthumbnail()函数来将视频转换成FlashVideo文件和创建缩略图。然后它向数据库中添加了有关视频的一些数据。有关FLV和缩略图的功能都使用了 ffmpeg中的命令行来处理视频。 当我打开addmovie.html 页面的时候,我做了一下截图,见图1. 代码:
<html><body><?phprequire "DB.php";function converttoflv( $in, $out ){ unlink( $out ); $cmd = "ffmpeg -v 0 -i $in -ar11025 $out 2>&1"; $fh = popen( $cmd, "r"); while( fgets( $fh ) ) {} pclose( $fh );}function getthumbnail( $in, $out ){ unlink( $out ); $cmd = "ffmpeg -i $in -pix_fmtrgb24 -vframes 1 -s 300x200 $out2>&1"; $fh = popen( $cmd, "r"); while( fgets( $fh ) ) {} pclose( $fh );}function flv_import( $upfile, $fname, $title ){ $fname = preg_replace('/\..*$/', '', basename( $fname ) ); $flvpath = "$fname.flv"; $thumbpath ="$fname.gif"; converttoflv( $upfile,"movies\\$flvpath" ); getthumbnail( $upfile,"movies\\$thumbpath" ); $dsn ='mysql://root@localhost/movies'; $db =&DB::connect( $dsn ); if ( PEAR::isError( $db ) ) {die($db->getMessage()); } $sth =$db->prepare( 'INSERT INTO movies VALUES ( 0, ?, ?,?, ?, ? )' ); $db->execute($sth, array( $title, $flvpath, $thumbpath, 300, 200 ) );}flv_import( $_FILES['movie']['tmp_name'], $_FILES['movie']['name'],$_POST['title'] );?>File sucessfully uploaded</body></html>