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>

五、最终效果

教你如何使用P2PS进行点播网站开发相关推荐

  1. Java仿腾讯视频流媒体点播网站开发实战

    为了调动广大爱好者的学习动力,先看一下成品效果图,以便于您对于本网站有一个更好的认识. 1.首页效果图 首页主要包含登陆,注册,捐助,以及播放工具下载功能.整体布局使用轮播图以及简单的流式布局.整体给 ...

  2. Java仿腾讯视频流媒体点播网站开发实战(二)- 功能模块与实体设计

    一.系统整体模块设计图 简单介绍一下架构设计,随着大数据的广泛应用,在现如今的系统之中,尤其是作为流媒体视频播放网站,统计网站用户的行为,分析用户的行为,以及对用户行为的采集无疑是很重要的一个系统要素 ...

  3. 【2022最新】手把手教你拥有自己的服务器与网站(无需备案)

    手把手教你如何拥有服务器及网站,此文章适用于想拥有自己服务器做网站的小白. 前言 手把手教你如何拥有服务器及网站,此文章适用于想拥有自己服务器做网站的小白. 要求有一定的编程基础,成本大概花30元就可 ...

  4. Scrum 项目 4.0-5.0-约教网站开发(一)

    ----------------------------------4.0----------------------------------------------- 一.项目任务 1.准备看板. ...

  5. 手把手教你用vuepress搭建自己的网站(2)

    虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如 ...

  6. 肉鸡进程linux,教菜鸟如何获得大量Linux肉鸡网站安全 -电脑资料

    适合读者:入侵爱好者.普通Linux网民 前置知识:Linux基本操作 投向Linux肉鸡的怀抱 文/图 密界寻踪 很多菜鸟都在重复的玩3389肉鸡,时间长了自然就腻味了,非常梦想得到自己的Linux ...

  7. (附源码)springboot晋韵戏剧点播网站设计 毕业设计112304

    Springboot晋韵戏剧点播网站 摘要 网络时代的到来使得人们获取信息的方式更加便捷,信息的传递也更加快速.作为我国有着悠久历史的艺术形式,传统戏曲的传播与发展也必须要与网络媒体这种新兴的传播方式 ...

  8. 教你如何利用博客推广网站

    教你如何利用博客推广网站 网站的推广办法非常的多!今天,我主要是想和大家谈谈如何有效利用博客来推广网站,利用博客来推广网站,应当说基本是网站刚建起来没多久,为了提高网站的知名度和吸引蜘蛛!可以说,利用 ...

  9. 青苹果影视系统源码 影视聚合 影视导航 影视点播网站源码

    源码下载:青苹果影视系统源码影视聚合影视导航影视点播网站源码-小程序文档类资源-CSDN下载 功能列表 1.数据模块 – 一键对接市面上的影视资源站API接口.现已支持FeiFeiCms.MacCms ...

最新文章

  1. 【漫画】以后在有面试官问你AVL树,你就把这篇文章扔给他。
  2. zookeeper watches
  3. Windows 不能在 本地计算机 启动 SQL Server 。错误代码126.
  4. JS标签的各种事件的举例
  5. java path设置错误_linux下环境变量PATH设置错误的补救
  6. XCode连接手机时提示A Valid provisioning profile for this executable was not found
  7. httpclient 实现文件上传中转
  8. Java开发之上班摸鱼!写最少的代码!
  9. 计算机组成知识试题及答案,2015年计算机考研:计算机组成原理试题六【附答案】...
  10. MATLAB(R2021a)软件下载和安装教程
  11. MOOC 研究生学术与职业素养 课后答案
  12. PT002(JspStudy)安装与端口解决问题
  13. python提取url的顶级域名及域名后缀
  14. ipad如何与计算机连接网络连接不上,苹果平板电脑网络连接不可用怎么办
  15. 计算机怎么设置本地硬盘启动,怎么设置移动硬盘启动
  16. 云上架构和传统IT架构有什么区别及优势?
  17. org.elasticsearch.common.util.concurrent.EsRejectedExecutionException 查询超时异常处理记录---一定要用单例模式
  18. 《位置大数据隐私管理》—— 第1章 位置信息与隐私保护 1.1 位置大数据
  19. 提高科学研究素养的路径
  20. 三星手机拍照后 图片翻转

热门文章

  1. 电脑内存条C14和C16的区别是什么?
  2. 使用jspdf插件将网页中的内容导出为高保真的pdf文件
  3. java jdk8 使用stream实现两个list集合合并成一个list集合(对象属性的合并)
  4. 数据仓库之【用户行为数仓】10:【dws层:数据汇总层】【appc层:数据应用层】需求3:用户7日流失push提醒
  5. java高并发程序设计1-线程停下来(stop,wait,suspend,await,interrupt,join,yield,sleep)的操作
  6. ARC与非ARC混合编程
  7. SCU3 表日志记录,RZ10设置rec/clien需要重启服务器
  8. iOS开发-常用第三方开源框架介绍(2)
  9. 在 ASP.NET Core 中上传文件
  10. 解决Outlook重复发送邮件问题