Cdnbye
P2P 与 RayCDN 与 ENCODE 相融合,提供极度完善的流媒体加速运载能力;经过完善,现在任何站长均可以接入本系统,无论本系统运行状态怎样,均不会对流畅度造成负面的影响;简单的说,就算是接入后,我们的系统彻底挂掉,也不会对您网站造成任何影响,当然系统在正常运作时,会提供极度优秀的加速能力,下面介绍系统运作原理以及接入方法。
如图所示,其中signal信令服务器和tracker调度服务器,是整个系统的核心,整个圈子的建立和交互都由它们来完成,这一项服务由我们维护和优化,这是商业服务(我们已经收取到了一年的商业服务费用,站长们无需为服务稳定性担心)。
如图所示,其中signal信令服务器和tracker调度服务器,是整个系统的核心,整个圈子的建立和交互都由它们来完成,这一项服务由我们维护和优化,这是商业服务(我们已经收取到了一年的商业服务费用,站长们无需为服务稳定性担心)。
运作原理:
step1:将正在播放同一视频的用户纳入一个流量圈,将播放进度相似的用户进一步细分且纳入一个协同圈,当然细分原则中还涉及到网络质量等因素,具体原则就不一一描述,因为这个我们可能需要随时做升级和优化
step2:为圈内用户创建互联,协同且相互提供网络帮助以完成视频的流畅播放,这是一个很复杂的流程
step3:实时调度和调整流量圈的大小与范围,保障整个流量圈流畅与稳定
总的来说,就是让正在观看同一个视频的用户在网络上提供相互的帮助,以达到更好的流畅性和可靠性,整个系统只会优先去获取链路最好的数据,如果整个链路都不可用,那么还有CDN或者源的数据可以使用,这个切换是毫秒级的,所以在任何情况下,系统只会带来正向的加速能力,而不会出现拖后腿的现象!
可
靠性:
代码的可靠性:暗加广告(代码)的卑鄙操作? 我们知道站长的担心,但是我们的系统完全不必考虑这个问题,我们不会给任何代码加密,完全透明公开,这样就完全的避免了这种可耻的行为。
保障运行的可靠性:我们不是免费提供服务,所以不会莫名其妙的断开服务,我们已经收取到了1年的运营费用(这个商业服务费用还是很高的,具体金额不透露),所以,您所想的依旧无需担心,有钱赚,不违法,我们不会中断服务。
接入方法:
首先,您必须使用的是支持H5的播放器,理论上说,所有的H5播放器都支持,我们推荐使用开源的DPLAYER,接入方法如下:
引入DPLAYER的播放器CSS样式,JS,以及我们修改后的以支持P2P的JS,同时在后方追加配置文件,p2p.js是在hls.js的基础上修改和加入了p2p-engine:
实现代码:
目前他们已经升级到了高的版本,但是现在的js得以保留, 需要将下面的信令服务器替换js文件中的地址,但是cdnbye对每一个channel做了加密,以此来判断是不是他们的产品,所以把下面的信令服务器的php代码需要进行修改
主要是:
实现代码:
<?php /** * @author CJ22 * @copyright 2018 * @version 1.0 * * for ray-p2p system * */?><!DOCTYPE html><html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> <meta name="referrer" content="never" /> <title>云解析</title> <style type="text/css">body,html,.dplayer{padding:0;margin:0;width:100%;height:100%;background-color:#000}a{text-decoration:none}</style> </head> <body> <link rel="stylesheet" href="https://cdn.bskchina.cn/dplayer/DPlayer.min.css"><div id="dplayer"></div><script src="https://cdn.bskchina.cn/p2p/p2p.js"></script><script src="https://cdn.bskchina.cn/dplayer/dplayer.js"></script><script> var hlsjsConfig = { debug: false, maxBufferHole: 3, p2pConfig: { logLevel: 'warn', announce: "https://tracker.klink.tech", wsSignalerAddr: 'wss://signal.klink.tech/ws', } }; var hls; var dp = new DPlayer({ container: document.getElementById('dplayer'), autoplay:true, loop:true, screenshot:true, hotkey:true, preload:'auto', video: { url: '<?php echo($_REQUEST['url']);?>', type: 'customHls', customType: { 'customHls': function (video, player) { var isMobile = navigator.userAgent.match(/iPad|iPhone|Linux|Android|iPod/i) != null; if (isMobile) { var html = '<video src="'+video.src+'" controls="controls" autoplay="autoplay" width="100%" height="100%"></video>'; document.getElementById('dplayer').innerHTML = html; }else{ hls = new Hls(hlsjsConfig); hls.loadSource(video.src); hls.attachMedia(video); hls.engine.on('stats', function (data) { var size = hls.engine.fetcher.totalP2PDownloaded; hls.engine.fetcher.totalP2PDownloaded=0; if(size>0){ hls.engine.signaler.signalerWs.send({action:'stat',size:size}); } }) } } } } });</script></body></html>
hlsp2p-php-tracker
<?php error_reporting(E_ALL ^ E_NOTICE); @ini_set('display_errors', 'On'); $route = $_GET['command']; $input = file_get_contents("php://input"); $post_data = json_decode($input, true); # CORS if (isset($_SERVER['HTTP_ORIGIN'])) { header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']); } else { header('Access-Control-Allow-Origin: *'); } header('Access-Control-Allow-Credentials: true'); header('Content-Type: application/json; charset=UTF-8'); header('Vary: Origin'); switch($route){ case'channel': $channel = $post_data['channel']; $device = $post_data['device']; $netType = $post_data['device']; $host = $post_data['host']; $version = $post_data['version']; $tag = $post_data['tag']; $peer_id = uniqid(); $roomDir = 'peers/'.$channel; makeDir($roomDir); insertPeer( $roomDir, array( "id"=>$peer_id, "device"=>$device, "netType"=>$netType, "host"=>$host, "version"=>$version, "tag"=>$tag, "conns"=>0, "http"=>0, "p2p"=>0, "failConns"=>0 ) ); $out = array( 'ret'=>0, 'name'=>'channel', 'data'=>array( 'id'=>$peer_id, 'report_interval'=>10, 'peers'=>get_peers($roomDir,$peer_id) ) ); echo json_encode($out); break; case'peers': $channel = $_GET['channel']; $peer_id = $_GET['node']; $roomDir = 'peers/' . $channel; if ( file_exists($roomDir . '/' . $peer_id) ) { $out = array( 'ret'=>0, 'name'=>'channel', 'data'=>array( 'peers'=>get_peers($roomDir,$peer_id) ) ); } else { $out = array( 'ret'=>-1, 'name'=>'errmsg', 'data'=>array( 'err'=>0, 'msg'=>'Not Register Node' ) ); } echo json_encode($out); break; case'stats': $channel = $_GET['channel']; $node = $_GET['node']; $out = array( 'ret'=>0, 'name'=>'stats', 'data'=>array() ); echo json_encode($out); $roomDir = 'peers/' . $channel; $json = json_decode(file_get_contents( __DIR__ . '/' . $roomDir . '/' . $node) ); if ( !isset($post_data['conns']) ) { $post_data['conns'] = 0; } if ( !isset($post_data['http']) ) { $post_data['http'] = 0; } if ( !isset($post_data['p2p']) ) { $post_data['p2p'] = 0; } if ( !isset($post_data['failConns']) ) { $post_data['failConns'] = 0; } insertPeer( $roomDir, array( "id"=>$json->{'id'}, "device"=>$json->{'device'}, "netType"=>$json->{'netType'}, "host"=>$json->{'host'}, "version"=>$json->{'version'}, "tag"=>$json->{'tag'}, "conns"=>$post_data['conns'], "http"=>$post_data['http'], "p2p"=>$post_data['p2p'], "failConns"=>$post_data['failConns'] ) ); break; } function insertPeer($room,$info){ file_put_contents($room.'/'.$info['id'],json_encode($info)); } function get_peers($room,$exclude=''){ $arr = glob(__DIR__ . '/' .$room . '/*'); if($arr){ $out = array(); $expTime = time()-30; foreach($arr as $v){ if(filemtime($v)>$expTime){ if($v!=__DIR__ . '/' .$room . '/' . $exclude){ $json = json_decode(file_get_contents($v)); $out[] = (object)array('id'=>$json->{'id'}); } }else{ unlink($v); } } return $out; }else{ return array(); } } function makeDir($path){ if(!is_dir($path)){ $str = dirname($path); if($str){ makeDir($str.'/'); @mkdir($path,0777); chmod($path,0777); } } } ?>
一、如果您发现本站侵害了相关版权,请附上本站侵权链接和您的版权证明一并发送至邮箱:yehes#qq.com(#替换为@)我们将会在五天内处理并断开该文章下载地址。
二、本站所有资源来自互联网整理收集,全部内容采用撰写共用版权协议,要求署名、非商业用途和相同方式共享,如转载请也遵循撰写共用协议。
三、根据署名-非商业性使用-相同方式共享 (by-nc-sa) 许可协议规定,只要他人在以原作品为基础创作的新作品上适用同一类型的许可协议,并且在新作品发布的显著位置,注明原作者的姓名、来源及其采用的知识共享协议,与该作品在本网站的原发地址建立链接,他人就可基于非商业目的对原作品重新编排、修改、节选或者本人的作品为基础进行创作和发布。
四、基于原作品创作的所有新作品都要适用同一类型的许可协议,因此适用该项协议, 对任何以他人原作为基础创作的作品自然同样都不得商业性用途。
五、根据二〇〇二年一月一日《计算机软件保护条例》规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可不经软件著作权人许可,无需向其支付报酬!
六、鉴此,也望大家按此说明转载和分享资源!本站提供的所有信息、教程、软件版权归原公司所有,仅供日常使用,不得用于任何商业用途,下载试用后请24小时内删除,因下载本站资源造成的损失,全部由使用者本人承担!