我的账户
火车采集

教育培训在线课程

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

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

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

3 W: l1 M: o2 y! ~, Y
自己懒得操作的可以用此接口P2P播放器解析接口(只支持M3U8资源)
关注M3U8资源: 全网M3U8资源网
https格式:https://www.pohaier.com/m3u8.php?url=$ h& X$ s3 a6 I% T
http 格式:http://www.ckplayer.tv/m3u8.php?url=- x, e2 u' v7 ]: c% c/ |9 v
https格式:https://www.629055.com/m3u8.php?url=
4 n  z: c6 G# p1 F! Ohttps格式:https://www.629055.com/dplayer.php?url=
- |/ b3 S, o# f' n: m建议用此接口以便后期修复

; ?: {+ n0 z8 g) N" \- l1 ]
我们的宗旨是:让热门不再卡顿,让高峰依旧流畅
$ N. _; x9 w% i  r6 l) D8 W0 r
/ I( k, l. }/ z3 @
P2P插件由Peer5框架二次包装而成,欢迎技术爱好者共同学习www.peer5.com,插件提供完善的流媒体加速运载能力;任何站长均可以接入使用,无论插件运行状态如何,均不会对流畅度造成负面影响;就算P2P服务彻底挂掉,也不会对您的网站造成任何影响,在插件正常运行过程中,会提供非常好的加速能力,下面介绍插件运作原理以及接入方法。

( ]8 `* ^2 X% R; ~' z( o; t 2865313724.png
3 b6 H& j; D3 Q* K) G6 `: `' \; o. @  O6 z. ^# i* z% {
如图所示,其中signal信令服务器和tracker调度服务器,是整个系统的核心,整个圈子的建立和交互都由它们来完成,这一项服务由我们维护和优化,这是商业服务(我们已经收取到了一年的商业服务费用,站长们无需为服务稳定性担心)。
% a/ j# P: Y& p3 `+ b
运作原理:
6 v" M0 B/ \- B9 d8 ]$ g7 |, @* sstep1:将正在播放同一视频的用户纳入一个流量圈,将播放进度相似的用户进一步细分且纳入一个协同圈,当然细分原则中还涉及到网络质量等因素,具体原则就不一一描述,因为这个我们可能需要随时做升级和优化

0 M9 l! b) j, n+ b  }step2:为圈内用户创建互联,协同且相互提供网络帮助以完成视频的流畅播放,这是一个很复杂的流程

) e( ^/ b$ `: _step3:实时调度和调整流量圈的大小与范围,保障整个流量圈流畅与稳定

8 c! ^- K( L" Q: k; N+ K+ g
总的来说,就是让正在观看同一个视频的用户在网络上提供相互的帮助,以达到更好的流畅性和可靠性,整个系统只会优先去获取链路最好的数据,如果整个链路都不可用,那么还有CDN或者源的数据可以使用,这个切换是毫秒级的,所以在任何情况下,系统只会带来正向的加速能力,而不会出现拖后腿的现象!
5 Y3 p4 n& c: S$ ], T6 I
以下是一个完整的视频解析页面的DEMO,保存为:m3u8.php即可,使用方式为http(s)://您的网址/m3u8.php?url=xxxxx.m3u8,当然了,m3u8的地址需要写入h5跨域头
' w$ j* z4 N. t此版本为2.3正式稳定版版代码如下,细节请自行修改 :
更新内容:已整合弹幕,右键属性查看P2P状态编译成中文,优化加载ts速度,优化播放卡顿的问题   

3 ?9 G3 `0 X: a8 m1 {
  1. <?php
    - i" z4 P& B) u# B
  2. /**
    # L# Y4 f/ _4 ^% j
  3. * @代码开源,透明,请勿用于商业用途,完全开源模式,供大家一起探讨研究
    & W2 P7 n" R; x, o: b& h

  4. 2 m- K5 s# G* |
  5. * @支持全网(支持跨域)的M3U8资源加速2 d9 D6 i4 r+ a6 d( r# ^+ c$ ]( y
  6. 2 t8 I5 g! \+ |
  7. * @调用举例:http://域名/m3u8.php?url=
    7 l5 e& Y' v7 u) A- s
  8. * @举例说明:https://www.629055.com/m3u8.php?url=https://www.caonima.me/20181122/FnHKa1pS/index.m3u8* ?7 G1 G1 @! v8 b# ^* J; Q

  9. & Y' Q5 K$ W! ^
  10. * @如有问题(反馈)请联系QQ 8852422修复
    3 F6 F- q) O5 B) |

  11. 1 V! g/ f  A" n0 Z
  12. * @author    www.pohaier.com' @, p; q4 t5 q& y
  13. * @copyright 2018/ q. v2 e! e* z: s
  14. * @version   2.3) {. A3 ^6 G$ r( y) f( Z
  15. *- l) y" k# o( T; u  c
  16. * for ray-p2p btjson& a. h4 b+ ~  L& T7 ^
  17. *
    # u6 b: ?$ q: q% |# t: m
  18. */
    ( H' Z6 k& H0 t- y0 I6 @3 v9 Z
  19. error_reporting(0);9 a$ H0 {- r: H7 n" B& q
  20. header("Content-Type: text/html; charset=utf-8");
    # P5 r& m  p8 e; {1 ~2 e
  21. $url = $_GET['url'];$ @8 J2 l& {2 O, K/ w" o
  22. if(strpos(wm_https(),'ps:') !== false){//接口带 S 证书, K% i" c# \; J; l2 I( u
  23.     if(strpos($url,'http://') !== false){
    9 w) F7 V3 ^9 J/ ]+ C; f
  24.         header("location:http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链没带 S 证书就跳转到不带 S 证书的接口% b3 W! V6 Y8 u% v5 V3 [% B
  25.         exit();" K- E2 W/ w7 w
  26.     }
    + o( q/ E3 B. V2 P, @
  27. }else{//接口不带 S 证书5 v4 O  d6 w( i. ]5 G! `
  28.     if(strpos($url,'https://') !== false){3 }3 L. P2 a# m" {2 W. d
  29.         header("location:https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链带 S 证书就跳转到带 S 证书的接口
    7 D; j# o0 L2 ~: p/ F$ k
  30.         exit();% x. K% E( D9 _- G* C( p9 G
  31.     }
    + x. g+ ?  ^# \1 O( c# Z% u; e
  32. }
      r6 R. M; D1 e. n
  33. function wm_https(){8 V+ K- [9 C* r# V0 Z$ t
  34.     $http = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';/ d' @8 u; \" v# m! I" }5 X: b
  35.     return $http;* t6 A6 f9 V2 H" i( q9 y
  36. }9 \) a' m/ m' D
  37. ?> 2 R# y: c& F* U* i7 t2 T

  38. & w- W6 E  B* |* A, m2 y/ x7 y
  39. <html>; b2 ^. r" ]* R( K$ J# r  N
  40. <head>
    8 p; E& w5 V6 q1 V4 ?2 A+ j
  41. <title>Dplayer---P2P版播放器</title>
    7 B" _" ~" u) o& w7 A- Z
  42. <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
    2 q6 n( g' l1 W7 y5 E& x; S
  43. <meta http-equiv="content-language" content="zh-CN"/>
    & d. N0 K# H/ d9 A0 N
  44. <meta http-equiv="X-UA-Compatible" content="chrome=1"/>( \) n* ]" j4 W, U& e1 W+ d$ S0 Y
  45. <meta http-equiv="pragma" content="no-cache"/>/ {" y3 n  e- w8 ~$ t; F+ f- B
  46. <meta http-equiv="expires" content="0"/>
    2 t. W+ R: _* c/ G/ u
  47. <meta name="referrer" content="never"/>6 I+ u& @+ z6 g# C; Z$ b
  48. <meta name="renderer" content="webkit"/>4 o2 N8 o" I) D
  49. <meta name="msapplication-tap-highlight" content="no"/># \% h5 F& l6 [; d* E6 M
  50. <meta name="HandheldFriendly" content="true"/>
    7 O: F5 Z. m0 g; f9 O. ]' y
  51. <meta name="x5-page-mode" content="app"/>  C1 }7 p" A& u
  52. <meta name="Viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>; T3 O# z6 ?) }' E- X( l
  53. <link rel="stylesheet" href="//www.629055.com/dplayer/DPlayer.min.css" type="text/css"/>
      H; V1 t" C2 q% A" @, f! |
  54. <style type="text/css">
    ! R( X- ~" f3 B% M8 l  C
  55. body,html{width:100%;height:100%;background:#000;padding:0;margin:0;overflow-x:hidden;overflow-y:hidden}, Z( Q8 l% I+ L- C* n
  56. *{margin:0;border:0;padding:0;text-decoration:none}
    0 W5 c! I+ D+ b& ~7 A
  57. #stats{position:fixed;top:5px;left:8px;font-size:12px;color:#fdfdfd;text-shadow:1px 1px 1px #000, 1px 1px 1px #000}
    * M5 g2 H* ^- J) i5 C1 R
  58. #dplayer{position:inherit}
    ' A: u  T6 m: w$ I9 p# R3 H
  59. </style>
    ! O* R9 X* \# v4 h+ V
  60. </head>
    . R. |6 Q0 ~$ Z2 L0 a2 `# v
  61. <body style="background:#000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" oncontextmenu=window.event.returnValue=false>
    % ?8 S! a. j0 X; {0 c$ H
  62. <div id="dplayer"></div>8 S& y8 x9 r) s4 ^% q1 j
  63. <div id="stats"></div>4 N8 J* e' e. l) |
  64. <script type="text/javascript" src="//www.629055.com/dplayer/hls.min.js"></script>: l6 x2 i8 b; C4 J& _
  65. <script type="text/javascript" src="//www.629055.com/dplayer/DPlayer.min.js"></script>3 _+ y# h9 c6 w( Y
  66. <script type="text/javascript" src="//www.629055.com/dplayer/p2p.js"></script>
    * H1 {$ o/ Z7 i' {/ w2 N
  67. <script>
      W9 D2 u* V2 e! g. d3 h; T
  68.     var webdata = {
    5 j  N3 N  G2 J8 v
  69.         set:function(key,val){
    : [- k3 h- Z# ^8 |1 F. f9 V
  70.             window.sessionStorage.setItem(key,val);
    + g6 Q- c. A! l1 E1 `- \
  71.         },
    6 I8 L1 A6 S! ~& z. ?$ C& [
  72.         get:function(key){
    , T: o7 H4 {0 r$ E( a
  73.             return window.sessionStorage.getItem(key);
    ) i+ ]2 [" d: Q: N- R
  74.         },  F; t# V2 h  @0 Q/ R
  75.         del:function(key){
    & U6 X' F! M5 R
  76.             window.sessionStorage.removeItem(key);4 `2 [( a$ h7 b, E6 ^+ J" c
  77.         },# |& h0 z; s& g9 e
  78.         clear:function(key){
    ( h6 O1 o: k7 R' b8 ?& {
  79.             window.sessionStorage.clear();# W) }3 x' P4 H
  80.         }8 y+ y3 o8 x9 ^: |
  81.     };
    . c# H/ K  H0 }3 a1 n1 A6 l
  82.     var m3u8url =  '<?php echo $url; ?>'4 `  ^% ]9 V4 U
  83.     var dp = new DPlayer({' l) [6 e4 p" }1 U5 B. A
  84.         autoplay: true," r& s3 b! v! P: @& d
  85.         container: document.getElementById('dplayer'),
    7 E) D$ C1 M- `* N
  86.         video: {# i' S" t2 O' ^/ H* D
  87.             url: m3u8url,9 j) X/ n, v% K8 Q
  88.             type: 'hls',
    7 V" l  M8 ]! n( _
  89.             pic: '/webp2p/loading_wap.jpg',/ R: k4 B! J. e  k+ Y9 S# B) ~- @
  90.           },# o  K& i. ^. N, W6 E
  91.           volume: 1.0,
    ' V' M0 P- M: [6 n5 a9 q1 A8 x. U8 A# M/ e

  92. : o+ a$ d6 q" t" w  }7 E! A7 L
  93.           preload: 'auto',
    / R2 u. U, s; y1 f6 [. e
  94.           theme: '#28FF28',
    " \: d6 c+ m" y. H7 g* U7 n
  95.         danmaku: {: z# z( m5 z& y7 D0 M4 H) L
  96.                 id: '<?php echo $url; ?>',
    & D7 A' X4 P2 Z: M
  97.                 api: 'https://api.prprpr.me/dplayer/',
    2 \+ Q' @& c! p  Z5 A* T+ M- t1 @
  98.                 maximum: 1000,+ M/ N+ @1 w, |5 {
  99.                 bottom: '20%',
    8 X! {2 x7 Z* Y+ w( h
  100.                 unlimited: true
    " F. E4 Q% Q3 \$ A. u
  101.         },! x0 m/ ?3 {8 H: n9 l
  102.         hlsjsConfig: {
    - ?3 W2 \, ^! j. W  T
  103.             p2pConfig: {
    1 J3 G4 h/ k* c4 Z; Z
  104.                 logLevel: false,0 {6 S" M+ J, g
  105.                 live: false,0 }3 l9 D; g: P6 j
  106.             }# \- c; D# b8 \+ H  L" S
  107.         }+ N" |4 \  S4 y" `
  108.     });9 @* k' z( ^) ?2 R: h" c
  109.     dp.seek(webdata.get('pay'+m3u8url));
      V$ u1 G, e- L3 N1 s1 e8 J
  110.     setInterval(function(){
    ) k, e( w) R! F& a4 K
  111.         webdata.set('pay'+m3u8url,dp.video.currentTime);
    4 s0 h" s. c* w
  112.     },1000);
    0 l0 _5 b& f4 S( Z
  113.     var _peerId = '', _peerNum = 0, _totalP2PDownloaded = 0, _totalP2PUploaded = 0;
    * \5 B% a3 c2 e" y7 k/ j& f* J/ B
  114.     dp.on('stats', function (stats) {
    ! @. c1 s+ o! t2 a5 h: G/ P
  115.         _totalP2PDownloaded = stats.totalP2PDownloaded;8 i: g- m% g4 T6 g% A3 C0 s; e
  116.         _totalP2PUploaded = stats.totalP2PUploaded;3 ]) L2 M; r3 V# o
  117.         updateStats();
    % n# H$ [/ A) [1 D; @
  118.     });' x9 H& r# C" O0 Z
  119.     dp.on('peerId', function (peerId) {% F1 j6 h  v. S( T2 U7 B: m# e5 q
  120.         _peerId = peerId;
    % B; \( ]3 t* R5 ?" e+ i- w
  121.     });
    % F- o" ]5 m, ?0 z5 ?. i& w6 M
  122.     dp.on('peers', function (peers) {
    4 ?( C% |4 b, j! D; L
  123.         _peerNum = peers.length;3 I$ x# H6 c' w' n; j1 W
  124.         updateStats();9 S8 U, N) F. t- C$ ?1 }7 o, U# m
  125.     });
    " Z0 Q* o& n! g
  126.     dp.on('ended', function () {; o6 o5 ]$ s6 V1 Y: a( }8 w
  127.     window.parent.postMessage('tcwlnext','*');& {& x$ w" O$ v1 r5 M7 l
  128.   });
    ) A2 y+ H+ H9 B1 ?
  129.     function updateStats() {, c& i: d: p! Y- h) _. U
  130.         var text = 'P2P已开启 共享' + (_totalP2PUploaded/1024).toFixed(2) + 'MB' + ' 加速' + (_totalP2PDownloaded/1024).toFixed(2)
    ; b1 O( Z. ~' L1 n# M8 ]
  131.             + 'MB' + ' 此片有 ' + _peerNum + ' 位道友正在观看';
    . F. W( H5 j$ n% u' {
  132.         document.getElementById('stats').innerText = text5 A& Q. Y# p$ S8 A
  133.     }( l; s7 E5 O: k  o* B
  134. </script>3 ]$ X8 n6 Z- E/ K
  135. - [8 Q" P: `2 n% r' x1 p. s" \
  136. </body>
    9 [! r0 c/ u0 b3 L# @% e
  137. </html>
复制代码

" H8 {9 C) M9 @" F3 h
& C  B* z1 N, h8 O7 P( h* [
回复

使用道具 举报

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

本版积分规则

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

关注0

粉丝0

帖子330

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

客服电话:400-123-4567

客服邮箱:776886721@qq.com

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

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

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

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