教你如何使用P2PS进行点播网站开发

来源:互联网 发布:淘宝盗图被投诉怎么办 编辑:程序博客网 时间:2024/06/13 23:24

P2PS点播开发示例文档

P2PS的下载安装可参见:www.800li.net/download/p2ps_setup.pdf.

为了准确演示使用域名的网站使用P2PS的情况,我们在计算机的HOSTS文件中加入了一行“127.0.0.1 sample.com”,这样我就可以在本机上开发并使用域名sample.com进行测试了。

首先我们先清点一下使用P2PS开发点播网站需要的一些必须的部件,http服务器(php)flv分段工具、P2PSp2p服务器、flash播放器。它们的关系是这样的,通过脚本上传flv格式的视频文件到服务器,然后使用flv分段工具把视频文件分段成为P2PS的点播格式,这些分段文件放在http服务器的文件档目录的某个位置,然后flash播放器使用分段文件的路径和p2p服务器的地址来进行播放,通过http服务器进行视频的数据的下载播放,通过连接p2p服务器以实现p2p网络中的视频文件内容交换。

一、准备工作

然后我们再来一步一步地来开发一个视频点播网站的示例程序,我们使用apache做为http服务器,p2p服务器就使用P2PS安装后使用的域名和端口。

在网站根目录下面新建文件夹VODS,并从P2PS安装目录下面的“\lmp\htdocs\sample”拷贝p2ps_sdk目录、config.phpplayer.swfplay_core.swf拷贝至VODS下面,并新建videos目录。

二、配置文件修改

config.php里多余的内容去掉,只留下$_url_p2p_streaming$_url_stat$_url_http_player$_url_http_streaming等变量。其中$_url_p2p_streamingp2p服务器的地址,$_url_stat是与后台统计系统结合的url(非必需),$_url_http_playerplayer.swfplay_core.swfurl的共同前缀,$_url_http_streaming是访问视频分段文件使用的url前缀。

  现在,我们准备把视频放在vods下面的videos目录下面,播放器也直接放在vods下面,所以要修改一些配置已符合我们的需求,首先设置$_url_http_player = "http://sample.com/vos/",然后设置$_url_http_streaming = "http://sample.com/vods/videos/",并且添加上一个选项$_videos_folder="C:\\Program Files\\EasyPHP 3.0\\www\\vods\\videos",最后完成的配置文件如下。

三、视频文件上传和分段

设置PHP的上传文件大小限制,在PHP.ini里面设置upload_max_filesize = 1000M,我临时设置为1G,用户可以根据自己的需求来设置。如果使用的是lighttpd服务器,还要设置类似于server.max-request-size = 10000000server.upload-dirs = ( "C:\Users\moyea\AppData\Local\Temp" )的配置,其它web服务器按照帮助文件进行修改。

为了安装路径中的空格影响php对分段工具的调用,我们将flv分段工具从“p2ps安装路径/lmp/htdocs/p2ps_sdk/flvsegmentor.exe”拷贝到系统目录"C:"(也可以设置其它无空格的目录,只要和代码中使用的一致即可)下面,。

vods文件夹中新建一个vod.php文件,然后先实现文件上传和视频分段代码。

<?phprequire_once(dirname(__FILE__) . "/config.php");require_once(dirname(__FILE__) . "/p2ps_sdk/p2ps_sdk.php");@header('Content-Type:text/html;charset=utf-8');?><form action="vod.php" method="post"enctype="multipart/form-data"><label for="file">文件名:</label><input type="hidden" name="max_file_size" value="20000000"> <input type="file" name="file" id="file" /> <br /><input type="submit" name="submit" value="上传文件" /></form><?php$videos_dir = $_videos_folder;echo "hello";///分段文件if(isset($_FILES["file"])){if ($_FILES["file"]["type"] != "video/x-flv"){die("只支持FLV文件");}if ($_FILES["file"]["error"] > 0){echo "Error: " . $_FILES["file"]["error"] . "<br />";}else {echo "upload: " . $_FILES["file"]["name"] . "<br />";echo "Type: " . $_FILES["file"]["type"] . "<br />";echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";echo "Stored in: " . $_FILES["file"]["tmp_name"];move_uploaded_file($_FILES["file"]["tmp_name"], $videos_dir. DIRECTORY_SEPARATOR. $_FILES["file"]["name"]);$fs = new flvsegmentor("C:\\");$flvs = array($videos_dir . "\\" . $_FILES["file"]["name"]);$re = $fs->segment($flvs, $videos_dir);if(!$re){die("对视频分片出错".$re);}}}?>

在上面的代码中,我们首先创建了一个表单,这个表单的作用就是选择文件并上传,在上传文件的处理代码中我们加入了对文件类型的判断只允许上传flv文件,并且在上传文件之后,把文件复制到config.php定义的文件夹中,然后调用p2pssdk中的flvsegmentor(关于此类的介绍可参考p2ps安装程序内的开发说明文档)对视频文件进行分段。

四、枚举视频文件并生成播放器

接下来我们的思路是,枚举视频文件夹里的所有视频,然后统一用列表列出来,然后选择任意一个视频点击播放时,就生成播放器代码对这个视频进行播放。所以先写出两个功能函数createPlayerread_dir_allcreatePlayer用来根据流名称来生成播放器代码,而read_dir_all用来扫描一个目录下面的所有特定后缀的文件列表。其中在createPlayer中,我们引用了config.php中的几个配置参数,并且在拼装播放器代码时使用了这几个变量,最后形成的几个关键部分是player.swf的路径,flashVars中传递给播放器的server_url(p2p服务器地址)stream_name(要播放的视频文件的绝对路径)、stat_url(统计接口的url)。

///返回player的代码function createPlayer($videoName){global $_url_p2p_streaming;global $_url_http_player;global $_url_stat;global $_url_http_streaming;//构造播放URL$playURL = $_url_http_streaming. "$videoName";$connectURL = $_url_p2p_streaming;$playerCode = '<embed src="'.$_url_http_player.'player.swf" flashVars="server_url='.$connectURL.'&stream_name='.$playURL.'&stat_url='.$_url_stat.'" width="600" height="360" allowFullScreen="true"></embed>';return $playerCode;}//扫描存在的分段文件function read_dir_all($dir, $ext=null) {$ret = array();if ($handle = opendir($dir)) {while (false !== ($file = readdir($handle))) {if($file != '.' && $file !== '..') {$a = explode(".", $file);if(isset($ext) && $a[max(0, count($a) - 1)] != $ext){continue;}$cur_path =  $file;//$dir . DIRECTORY_SEPARATOR .if(!is_dir($cur_path)) {    $ret[] = $cur_path;}}}closedir($handle);}return $ret;}

功能函数有了之后, 现在就是要写枚举视频文件的逻辑和播放器的代码了。我们使用了PHP代码检测post的数据中是否有stream_id,如果有就说明有一个提交表单进行播放的动作,我们就根据提交的视频文件的名称,来生成播放器代码并且显示。

$stream_id = @$_POST["stream_id"]; <?php if(isset($stream_id))  {$playerCode = createPlayer($stream_id); $encodeCode = htmlspecialchars($playerCode);echo "<div>$playerCode</div>";echo '<strong>播放器代码:</strong><input type="text" name="code" id="code" style="width:400px" value="'.$encodeCode.'" />';}?>

接下来就是一个枚举视频文件夹内的所有点播文件的代码,在一个表单中枚举出所有的视频文件,然后形成一个列表,可以对某一项进行选择并且点击按钮进行表单提交,以生成播放器代码进行播放。

<form action="vod.php" method="post" ><?php$vods = read_dir_all($videos_dir,"fpvsegments");foreach($vods as $s) {?>流: <input type="text" name="streams[]" value="<?php echo $s;?>" size="80" /><input type="radio" name="stream_id" <?php if ($s == $stream_id) echo "checked"; ?> value="<?php echo $s;?>" /><br/><?php  }?><input type="submit" name="play" value="播放选中" style="width:600px" /></form></body>

五、最终效果




原创粉丝点击