我的账户
火车采集

教育培训在线课程

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

在发布一个PHP版P2P加速 只支持M3U8资源

[复制链接]
不忘初心 发表于 2019-1-17 17:06:31 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

6 k3 Y+ @: ~; h2 I' N
自己懒得操作的可以用此接口P2P播放器解析接口(只支持M3U8资源)
关注M3U8资源: 全网M3U8资源网
https格式:https://www.pohaier.com/m3u8.php?url=
: g/ y1 h4 O# R4 b; y) h! Khttp 格式:http://www.ckplayer.tv/m3u8.php?url=
# R% w9 L  b3 w3 x; U: Jhttps格式:https://www.629055.com/m3u8.php?url=1 g8 C: `/ }- \* L
https格式:https://www.629055.com/dplayer.php?url=
  e3 m. Y1 ]' j' X  Z+ n建议用此接口以便后期修复
: i8 [7 i* B7 A4 g3 R% H
我们的宗旨是:让热门不再卡顿,让高峰依旧流畅. S. }$ ^( v9 b: S: h) L+ t
. S+ I& b7 b" a. z" {) w
P2P插件由Peer5框架二次包装而成,欢迎技术爱好者共同学习www.peer5.com,插件提供完善的流媒体加速运载能力;任何站长均可以接入使用,无论插件运行状态如何,均不会对流畅度造成负面影响;就算P2P服务彻底挂掉,也不会对您的网站造成任何影响,在插件正常运行过程中,会提供非常好的加速能力,下面介绍插件运作原理以及接入方法。

# S5 D) G; P$ h$ n9 | 2865313724.png 9 t$ e+ h- c  d7 j+ w

( {: v- G/ q8 X" g3 V
如图所示,其中signal信令服务器和tracker调度服务器,是整个系统的核心,整个圈子的建立和交互都由它们来完成,这一项服务由我们维护和优化,这是商业服务(我们已经收取到了一年的商业服务费用,站长们无需为服务稳定性担心)。
( \6 r4 _9 ]- q
运作原理:5 c7 s& o) Z+ b, f9 v4 E) R+ T% q1 Y6 l) _
step1:将正在播放同一视频的用户纳入一个流量圈,将播放进度相似的用户进一步细分且纳入一个协同圈,当然细分原则中还涉及到网络质量等因素,具体原则就不一一描述,因为这个我们可能需要随时做升级和优化

* q' _* v' ~# v/ N4 h; gstep2:为圈内用户创建互联,协同且相互提供网络帮助以完成视频的流畅播放,这是一个很复杂的流程
) q  G: I; \* ~6 m$ q
step3:实时调度和调整流量圈的大小与范围,保障整个流量圈流畅与稳定

! a  Z9 g- N9 [) ]+ I8 ^; q
总的来说,就是让正在观看同一个视频的用户在网络上提供相互的帮助,以达到更好的流畅性和可靠性,整个系统只会优先去获取链路最好的数据,如果整个链路都不可用,那么还有CDN或者源的数据可以使用,这个切换是毫秒级的,所以在任何情况下,系统只会带来正向的加速能力,而不会出现拖后腿的现象!
2 @1 _6 F* T" G4 u
以下是一个完整的视频解析页面的DEMO,保存为:m3u8.php即可,使用方式为http(s)://您的网址/m3u8.php?url=xxxxx.m3u8,当然了,m3u8的地址需要写入h5跨域头
0 v) l! q/ b0 J  J$ Z+ S此版本为2.3正式稳定版版代码如下,细节请自行修改 :
更新内容:已整合弹幕,右键属性查看P2P状态编译成中文,优化加载ts速度,优化播放卡顿的问题   
% L4 v# x7 ?' j4 {: A% ]8 O6 S
  1. <?php3 A8 Z; V  q3 p; A- t
  2. /**" t) o/ M% g$ M5 U  J( `1 D, m
  3. * @代码开源,透明,请勿用于商业用途,完全开源模式,供大家一起探讨研究  Z8 c  X: ?: W
  4. ! [% y/ a' [+ k. ?  J
  5. * @支持全网(支持跨域)的M3U8资源加速7 t/ B5 m) A8 K
  6. ( L& ~$ V! e% i
  7. * @调用举例:http://域名/m3u8.php?url=
    $ y# P$ `0 z) q- t$ a
  8. * @举例说明:https://www.629055.com/m3u8.php?url=https://www.caonima.me/20181122/FnHKa1pS/index.m3u8, N, _0 ~; v% P5 w0 F6 d2 x
  9. % R- ~1 h5 L, F& a
  10. * @如有问题(反馈)请联系QQ 8852422修复- ~. v/ {" C! V; K
  11. : t/ F( T$ A; ~) M3 G
  12. * @author    www.pohaier.com0 [: L0 k. N2 \' W' X6 H* ~
  13. * @copyright 2018' p4 U$ F8 B. q
  14. * @version   2.31 p9 r" `$ ]- {3 L+ m4 U5 n- V5 K6 H  T
  15. *- n* m& J$ Q3 l* r7 E
  16. * for ray-p2p btjson
    0 ~. c3 ^6 A+ J1 r( f# M
  17. *
    4 s/ D- F! Y6 ~' X$ t0 Y! _4 \
  18. */. R# H4 U; ^; o* ~, u1 p
  19. error_reporting(0);' p$ q# W! \( ]: r: Z9 r
  20. header("Content-Type: text/html; charset=utf-8");
    ) s, T4 t# \: r, B) |5 ~
  21. $url = $_GET['url'];8 y4 O" x) C% u( a; p* q+ c# C8 T
  22. if(strpos(wm_https(),'ps:') !== false){//接口带 S 证书$ @2 P1 |1 v* h
  23.     if(strpos($url,'http://') !== false){8 m6 \4 u, B2 e
  24.         header("location:http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链没带 S 证书就跳转到不带 S 证书的接口. G, ~! V0 t0 F( t1 ~
  25.         exit();
    - D7 b0 |! j3 M# A
  26.     }
    - A" P( ~3 D, ]1 ?- }, e+ c
  27. }else{//接口不带 S 证书
    3 n7 h: _6 P6 G
  28.     if(strpos($url,'https://') !== false){
    ( j# J' N- P( {; s6 P
  29.         header("location:https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链带 S 证书就跳转到带 S 证书的接口
    * L3 d- f/ n$ w' |7 M% n8 _& F
  30.         exit();
    * ^5 }* o9 T2 b. s" G( t6 W
  31.     }
    & p+ l$ c7 S- q% `
  32. }! A2 R: D2 ~' }/ Q. Q$ [2 k/ _
  33. function wm_https(){, D' i) M( ^: t+ W* j
  34.     $http = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';4 i$ ~+ s1 O% J2 }. q% l' G8 E. U
  35.     return $http;( u% i5 E/ |7 H+ [7 h8 {+ e0 y4 u8 ]
  36. }
    & K# M0 K( h% b/ u$ z
  37. ?>
    8 [- P$ N( V# a, h

  38. & X) [, j* @' Z. q) N# e" r4 G( t
  39. <html>
      s. a" E7 J& F! L* L5 m' O
  40. <head>
    , A2 D. I, x; E  p, S+ U; Y
  41. <title>Dplayer---P2P版播放器</title>' `+ v# N  l$ m
  42. <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
    % t3 J3 Y4 ?% q' e7 j
  43. <meta http-equiv="content-language" content="zh-CN"/>
    " M$ t7 }5 H! A9 J7 |
  44. <meta http-equiv="X-UA-Compatible" content="chrome=1"/>
    ( L. t6 j8 V6 _9 a
  45. <meta http-equiv="pragma" content="no-cache"/>
    5 B: n0 P# w3 S- V9 v1 a4 S; m7 U
  46. <meta http-equiv="expires" content="0"/>7 [, \' D  B1 F3 |- @8 q; k
  47. <meta name="referrer" content="never"/>
    8 O$ O8 V6 K$ y: N8 u* U# f
  48. <meta name="renderer" content="webkit"/>
    % ^) i6 [" Q) b3 }/ w7 ]) g3 b% t
  49. <meta name="msapplication-tap-highlight" content="no"/>5 i+ X8 z% [; h) H, N' F$ Z
  50. <meta name="HandheldFriendly" content="true"/>
    + L4 }: X+ D  c5 v2 [* i2 A
  51. <meta name="x5-page-mode" content="app"/># S: n; I! A! L7 p! d/ p
  52. <meta name="Viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>! S3 f9 E4 A6 Y3 n" o+ F6 l
  53. <link rel="stylesheet" href="//www.629055.com/dplayer/DPlayer.min.css" type="text/css"/>' Z# z* [. k, I9 N/ m, G
  54. <style type="text/css">( J0 k5 }+ A& e. D: ?
  55. body,html{width:100%;height:100%;background:#000;padding:0;margin:0;overflow-x:hidden;overflow-y:hidden}9 h$ h/ v* k( J
  56. *{margin:0;border:0;padding:0;text-decoration:none}- K6 j3 R) W: p
  57. #stats{position:fixed;top:5px;left:8px;font-size:12px;color:#fdfdfd;text-shadow:1px 1px 1px #000, 1px 1px 1px #000}6 B% I# g. N0 ?& ^
  58. #dplayer{position:inherit}$ j' i$ M7 u2 d# v. A: R
  59. </style>+ i7 Z6 K0 J7 T
  60. </head>, L0 S1 q) t4 U  \" X0 o
  61. <body style="background:#000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" oncontextmenu=window.event.returnValue=false>
    $ `  _' p; `; V2 Q; T# [) r. h
  62. <div id="dplayer"></div>
    " u8 Q. d" |* t
  63. <div id="stats"></div>; R& L! t/ R1 M" Q* Q" I
  64. <script type="text/javascript" src="//www.629055.com/dplayer/hls.min.js"></script>
    ! D$ \* \% F) m2 H; v
  65. <script type="text/javascript" src="//www.629055.com/dplayer/DPlayer.min.js"></script>% i1 a3 G4 J! N
  66. <script type="text/javascript" src="//www.629055.com/dplayer/p2p.js"></script>
    8 ]" s& h6 @) ]! W
  67. <script># O$ g& H& }. _1 y- Q% y
  68.     var webdata = {
      W# }" g$ _/ P
  69.         set:function(key,val){
    ; B2 n* ~  W( `
  70.             window.sessionStorage.setItem(key,val);6 R9 X1 v* l. j. |( f
  71.         },
    $ {  u$ `# F- X9 q( _
  72.         get:function(key){
    : G. x4 T+ u3 ]8 s
  73.             return window.sessionStorage.getItem(key);6 A) m  N" {6 B3 U" }" E
  74.         },& v6 N; \8 N0 U2 \) @- p
  75.         del:function(key){
    5 r% u2 v. g  t) L
  76.             window.sessionStorage.removeItem(key);# T+ q$ x  i% w- x  ~4 z" n# e3 i
  77.         },
    ( T; z5 a/ n9 J$ |1 _
  78.         clear:function(key){$ w! q; {1 L/ C6 X( t
  79.             window.sessionStorage.clear();
    $ h, A, I* H9 D. ~- X/ n1 R0 {8 }; m
  80.         }
    ; X% [, O9 m2 X0 B$ J5 ~
  81.     };1 g5 l  E7 x3 r7 [4 _
  82.     var m3u8url =  '<?php echo $url; ?>'9 |0 S7 `! g* W3 W! l4 z4 F1 F
  83.     var dp = new DPlayer({
    . l5 ]2 L$ f3 f0 f" {  |8 `3 V
  84.         autoplay: true,
      h7 g8 |( b! X, h3 _7 z
  85.         container: document.getElementById('dplayer'),
    7 h' n! Z+ r4 s
  86.         video: {
    9 a6 W6 p9 p" r; `4 y( r) k
  87.             url: m3u8url,
    4 Q1 A. Y# |& b5 [. H( T" z
  88.             type: 'hls',8 E4 @: f: m& p4 L# R. G) X. M
  89.             pic: '/webp2p/loading_wap.jpg',
    ) w7 O# y" s( {* `# H
  90.           },
    3 Z' k/ @) ~# O5 E7 _7 U' |8 {: V
  91.           volume: 1.0,  F6 c, G, B1 g" r$ ?

  92. 8 s: A; ?+ J* l: e; k/ D
  93.           preload: 'auto',2 S/ {7 k& R+ s( {
  94.           theme: '#28FF28',9 N! v! k0 Q1 Q  n) [, C
  95.         danmaku: {6 E8 N7 {2 C2 v: Q
  96.                 id: '<?php echo $url; ?>',
    8 k- o: q" N& j: h! b7 `5 B
  97.                 api: 'https://api.prprpr.me/dplayer/',
    % r3 Z) _& [: }4 D  f9 R+ }
  98.                 maximum: 1000,
    7 |0 @" ~. t3 T% u2 R
  99.                 bottom: '20%',: E  U( @5 ^% {% I
  100.                 unlimited: true5 t" Z( ], ^3 s" T; S
  101.         },
    , W- o; u9 Z6 n5 c
  102.         hlsjsConfig: {- n) a/ h/ F9 l. S6 g
  103.             p2pConfig: {
    " _" }. u2 q% D# w6 w
  104.                 logLevel: false,4 M! \' v7 j7 L6 a% `
  105.                 live: false,# X# [2 w" Y/ j- h
  106.             }
    " a5 A9 k/ B" ?+ T
  107.         }1 Z6 d, T) r) u7 {
  108.     });" }- P/ ]! J' v& I
  109.     dp.seek(webdata.get('pay'+m3u8url));
    7 M/ N$ J9 J3 Y: k6 V+ g
  110.     setInterval(function(){! g  J: S# }# m" I- \7 R4 r- H; h
  111.         webdata.set('pay'+m3u8url,dp.video.currentTime);6 T; ^6 ~" o; j. v& Q
  112.     },1000);
    " h- O& l. }1 P. y, I- {
  113.     var _peerId = '', _peerNum = 0, _totalP2PDownloaded = 0, _totalP2PUploaded = 0;
    # }, M0 U* ^( A2 S, Y( [
  114.     dp.on('stats', function (stats) {
    * S0 q/ }0 ]! C2 e2 R. v, S
  115.         _totalP2PDownloaded = stats.totalP2PDownloaded;- j' T: ~2 q# u# }; Q# V
  116.         _totalP2PUploaded = stats.totalP2PUploaded;7 T6 Q6 F5 c! m! y$ T1 i8 f
  117.         updateStats();
    - }0 C, U1 y; X) P( g' S1 f
  118.     });8 \+ p, h6 f- W
  119.     dp.on('peerId', function (peerId) {$ M, Q( y0 d' Y" m' S, I
  120.         _peerId = peerId;4 s) x( F& y: x* j" U
  121.     });
    + d3 B( f2 H1 j+ O& ~
  122.     dp.on('peers', function (peers) {
    , V% {; r) U8 W5 s% }3 v% a' ?
  123.         _peerNum = peers.length;
    : j! H0 f$ }& _4 u7 H/ r6 [
  124.         updateStats();
    3 Z; v. g% v* S6 w( A2 D0 ~- O
  125.     });0 M: M( X7 u. d2 U# m4 Y
  126.     dp.on('ended', function () {
    8 H, y- H& Y9 I  X" A# W' q5 q
  127.     window.parent.postMessage('tcwlnext','*');
    7 S" A& E* U& l# o! o
  128.   });
    2 ?2 V7 Q  W0 f0 X9 E
  129.     function updateStats() {* |- b8 r1 h: k5 n5 A
  130.         var text = 'P2P已开启 共享' + (_totalP2PUploaded/1024).toFixed(2) + 'MB' + ' 加速' + (_totalP2PDownloaded/1024).toFixed(2)
    ' H/ _' _& [. q6 Q1 E# e- `
  131.             + 'MB' + ' 此片有 ' + _peerNum + ' 位道友正在观看';) N9 e2 T" _8 T' ^7 y( A. v/ f
  132.         document.getElementById('stats').innerText = text+ S4 F1 s1 w; [4 O3 e
  133.     }3 d% G* ~1 V1 z5 t4 i) n5 ]
  134. </script>; g( D( u7 x0 S7 O/ l
  135. " E) F4 e! h+ r4 k' u& C
  136. </body>5 }1 g& A& M. X9 \) B3 q4 y
  137. </html>
复制代码

' e8 i4 c+ i2 f) Q' o
# V- j5 R+ U& v0 i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

不忘初心
  • 管理员
此人很懒,什么都没有留下。

关注0

粉丝0

帖子330

发布主题
关注我们
火车采集专注教育培训

客服电话:400-123-4567

客服邮箱:776886721@qq.com

周一至周五 8:00-18:00

火车采集网站是助你走向成功的垫脚石

火车采集追求原创 - 引领行业人才培养!( 豫ICP备17002439号 )

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.