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

1 篇文章 0 订阅
1 篇文章 0 订阅

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文件,然后先实现文件上传和视频分段代码。

<?php

require_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>

五、最终效果




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值