教你如何使用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分段工具、P2PS的p2p服务器、flash播放器。它们的关系是这样的,通过脚本上传flv格式的视频文件到服务器,然后使用flv分段工具把视频文件分段成为P2PS的点播格式,这些分段文件放在http服务器的文件档目录的某个位置,然后flash播放器使用分段文件的路径和p2p服务器的地址来进行播放,通过http服务器进行视频的数据的下载播放,通过连接p2p服务器以实现p2p网络中的视频文件内容交换。
一、准备工作
然后我们再来一步一步地来开发一个视频点播网站的示例程序,我们使用apache做为http服务器,p2p服务器就使用P2PS安装后使用的域名和端口。
在网站根目录下面新建文件夹VODS,并从P2PS安装目录下面的“\lmp\htdocs\sample”拷贝p2ps_sdk目录、config.php、player.swf、play_core.swf拷贝至VODS下面,并新建videos目录。
二、配置文件修改
将config.php里多余的内容去掉,只留下$_url_p2p_streaming、$_url_stat、$_url_http_player、$_url_http_streaming等变量。其中$_url_p2p_streaming是p2p服务器的地址,$_url_stat是与后台统计系统结合的url(非必需),$_url_http_player是player.swf和play_core.swf的url的共同前缀,$_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 = 10000000,server.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定义的文件夹中,然后调用p2ps的sdk中的flvsegmentor类(关于此类的介绍可参考p2ps安装程序内的开发说明文档)对视频文件进行分段。
四、枚举视频文件并生成播放器
接下来我们的思路是,枚举视频文件夹里的所有视频,然后统一用列表列出来,然后选择任意一个视频点击播放时,就生成播放器代码对这个视频进行播放。所以先写出两个功能函数createPlayer和read_dir_all,createPlayer用来根据流名称来生成播放器代码,而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>
五、最终效果
- 教你如何使用P2PS进行点播网站开发
- 教你如何使用Google进行搜索
- 教你如何使用Google进行搜索
- 教你如何在SDK开发使用美团Robust进行热更新
- 进行网站开发是如何选择域名
- Android开发-教你如何使用拨号盘
- 教你如何使用搜索引擎批量检测网站注入点
- 一步步教你使用Eclipse和Tomcat进行Seam开发
- 手把手教你使用CVS客户端进行项目开发
- 使用MVC的进行网站开发好处
- 使用MVC的进行网站开发好处
- 你如何对网站的文件和资源进行优化?
- 你如何对网站的文件和资源进行优化?
- 你如何对网站的文件和资源进行优化?
- 你如何对网站的文件和资源进行优化?
- 你如何对网站的文件和资源进行优化?
- 你如何对网站的文件和资源进行优化?
- 你如何对网站的文件和资源进行优化?
- CXF对Interceptor的支持
- .net 回收机制深解
- 关于android下获得的date转化为特定显示格式
- 如何让避免BHO在新标签中被重复初始化
- 读写XML
- 教你如何使用P2PS进行点播网站开发
- GFT人才思维模型
- 在多语句事务内不允许使用 Create DATABASE 语句
- zoj 1671 Walking Ant (BFS)
- 数字翻译器及其实现
- 敏捷开发中的Code Review
- HTML5的进步与优势
- android,ExpandableList,将被选中的group置于顶端
- POJ1002 487-3249