我的账户
火车采集

教育培训在线课程

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

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

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

1 O, K+ F$ b" u' p3 ^& a, `% B! B. g
自己懒得操作的可以用此接口P2P播放器解析接口(只支持M3U8资源)
关注M3U8资源: 全网M3U8资源网
https格式:https://www.pohaier.com/m3u8.php?url=
7 ?9 m6 d1 H; m) |& Y3 O1 {http 格式:http://www.ckplayer.tv/m3u8.php?url=) T- {' E. @/ e% m- z* s
https格式:https://www.629055.com/m3u8.php?url=9 C' F5 m. T; J# M% ?8 _
https格式:https://www.629055.com/dplayer.php?url=
1 u& f9 o7 O; {! ~' {) e, B" D建议用此接口以便后期修复
6 K1 ?0 I" @, _' X- x
我们的宗旨是:让热门不再卡顿,让高峰依旧流畅
8 m+ r& O: }/ g* _2 g, b7 k/ S4 u4 i
P2P插件由Peer5框架二次包装而成,欢迎技术爱好者共同学习www.peer5.com,插件提供完善的流媒体加速运载能力;任何站长均可以接入使用,无论插件运行状态如何,均不会对流畅度造成负面影响;就算P2P服务彻底挂掉,也不会对您的网站造成任何影响,在插件正常运行过程中,会提供非常好的加速能力,下面介绍插件运作原理以及接入方法。
" _# \8 Y2 R+ d; s5 S; m
2865313724.png
% C5 Y$ e% I% o1 C) Z7 b) n
! R; S* P9 s4 H& h' Z" [8 i
如图所示,其中signal信令服务器和tracker调度服务器,是整个系统的核心,整个圈子的建立和交互都由它们来完成,这一项服务由我们维护和优化,这是商业服务(我们已经收取到了一年的商业服务费用,站长们无需为服务稳定性担心)。

+ ~/ E" A9 Z* ~: l% h
运作原理:, R+ [3 R) U9 X
step1:将正在播放同一视频的用户纳入一个流量圈,将播放进度相似的用户进一步细分且纳入一个协同圈,当然细分原则中还涉及到网络质量等因素,具体原则就不一一描述,因为这个我们可能需要随时做升级和优化
* `+ _6 M+ Z2 I6 p
step2:为圈内用户创建互联,协同且相互提供网络帮助以完成视频的流畅播放,这是一个很复杂的流程
6 I  K) v# e6 }7 E+ }7 ?9 @' d
step3:实时调度和调整流量圈的大小与范围,保障整个流量圈流畅与稳定
/ \/ ^$ V' S$ H: Q
总的来说,就是让正在观看同一个视频的用户在网络上提供相互的帮助,以达到更好的流畅性和可靠性,整个系统只会优先去获取链路最好的数据,如果整个链路都不可用,那么还有CDN或者源的数据可以使用,这个切换是毫秒级的,所以在任何情况下,系统只会带来正向的加速能力,而不会出现拖后腿的现象!
$ y3 H$ [/ T, X+ h, [, U
以下是一个完整的视频解析页面的DEMO,保存为:m3u8.php即可,使用方式为http(s)://您的网址/m3u8.php?url=xxxxx.m3u8,当然了,m3u8的地址需要写入h5跨域头
4 e9 n  Y8 _/ n0 t+ V此版本为2.3正式稳定版版代码如下,细节请自行修改 :
更新内容:已整合弹幕,右键属性查看P2P状态编译成中文,优化加载ts速度,优化播放卡顿的问题   
. ?. P2 L7 V, k$ U; E
  1. <?php
    : b. F5 r7 g- y8 R
  2. /**
    5 E: Q; ^& g3 {4 R" U) G
  3. * @代码开源,透明,请勿用于商业用途,完全开源模式,供大家一起探讨研究3 T1 D. n. X; V+ x. n' u. `# u

  4. $ b; c0 K. h9 _
  5. * @支持全网(支持跨域)的M3U8资源加速
    ) `$ }5 l3 F: y" C* U

  6. ! ~% d: A, j& `9 |- B
  7. * @调用举例:http://域名/m3u8.php?url=  S( n  O  |  j+ ?; r
  8. * @举例说明:https://www.629055.com/m3u8.php?url=https://www.caonima.me/20181122/FnHKa1pS/index.m3u8
    8 U/ c- }$ T5 `, R! {8 T( `1 a
  9. , A+ g# @1 t5 I$ `! P$ v
  10. * @如有问题(反馈)请联系QQ 8852422修复
    0 t& m' l' W+ J) ]  M

  11. 5 Y. O4 h+ i! h0 O6 N* ]5 q
  12. * @author    www.pohaier.com  k8 E0 E( L! J0 H5 X. a1 q$ s
  13. * @copyright 2018
    7 ], E& i7 x: a, {  B; p' l5 Z
  14. * @version   2.3  m/ x2 g9 o! k' E7 V  i
  15. *0 W7 @7 j6 s8 _
  16. * for ray-p2p btjson2 h8 z9 x" c% [' ^
  17. *
    3 z5 V  i+ |2 m8 t; |
  18. */
    : r3 E# y! h  j. g+ X0 g
  19. error_reporting(0);
    / \# ]" P1 h% d: q/ t3 y) F6 Y$ R
  20. header("Content-Type: text/html; charset=utf-8");5 O$ ?( ~6 M# N4 }& N2 O9 J
  21. $url = $_GET['url'];
    9 u. b' Z& `5 Z5 r6 M
  22. if(strpos(wm_https(),'ps:') !== false){//接口带 S 证书" j% ~" E; h- _) F! `, c5 v
  23.     if(strpos($url,'http://') !== false){
    ) @. o3 F! b3 @1 J2 y' {3 x
  24.         header("location:http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链没带 S 证书就跳转到不带 S 证书的接口
    6 h1 E* Q7 }7 h: f* R2 }# w- F
  25.         exit();
    ) k( S9 I0 t" t
  26.     }
    4 P; [9 e! l8 ^
  27. }else{//接口不带 S 证书
    ! k6 S% k) }% u  C- i
  28.     if(strpos($url,'https://') !== false){
    & Z0 B$ R# |, o' H; x* H
  29.         header("location:https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链带 S 证书就跳转到带 S 证书的接口
    8 x$ k& ?6 {4 j
  30.         exit();( `# P: w7 D( f+ |2 Z8 U" q
  31.     }8 C! N5 S% R, ~9 ]/ z1 e
  32. }
    3 H' a8 o$ j, ?" Z( T5 Q! g
  33. function wm_https(){: Q9 \2 U' M: q& x2 r
  34.     $http = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';7 {) T4 A* s/ }# u
  35.     return $http;
    $ `1 }: w8 p2 {# W6 @  j0 R
  36. }
    * ]* e6 A* n" E0 g/ ~
  37. ?>
    5 l& Q& Y" W9 E+ S' ~  s3 k

  38. ; N' ^4 m4 w* l# l6 \9 a# ], L
  39. <html>" U! C4 b' j1 `; u2 h
  40. <head>% O1 J. U3 e' i6 E
  41. <title>Dplayer---P2P版播放器</title>
    * n. @, d# e4 T9 |- b8 l! F% {/ v
  42. <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>& l: L* q* O& N# f1 o1 @) Y
  43. <meta http-equiv="content-language" content="zh-CN"/>
    0 {% ]' j+ M4 t& b
  44. <meta http-equiv="X-UA-Compatible" content="chrome=1"/>
    . d& Y$ O! X/ c; K3 j, a( k5 ^
  45. <meta http-equiv="pragma" content="no-cache"/>6 [6 Q0 j/ }6 z4 B7 C
  46. <meta http-equiv="expires" content="0"/>; |* h% d- k- x1 D( h1 P
  47. <meta name="referrer" content="never"/>
    0 K5 D7 M& Y5 I. a: Z
  48. <meta name="renderer" content="webkit"/>
    + @$ g+ r6 a& k9 ?3 F
  49. <meta name="msapplication-tap-highlight" content="no"/>
    2 B) [0 g$ ?4 n6 a6 q) Z; f5 y
  50. <meta name="HandheldFriendly" content="true"/>! M0 }# I" W+ c' J
  51. <meta name="x5-page-mode" content="app"/>1 q3 T7 D( n( m0 _& M
  52. <meta name="Viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>& [- ]! ]$ S/ Z4 j8 q7 d" `5 ?
  53. <link rel="stylesheet" href="//www.629055.com/dplayer/DPlayer.min.css" type="text/css"/>
    " N# C8 B. g& g/ M) b/ j" @
  54. <style type="text/css">
    : S7 Z) B8 `0 q" n. M1 u
  55. body,html{width:100%;height:100%;background:#000;padding:0;margin:0;overflow-x:hidden;overflow-y:hidden}# |% @- m" L5 E/ e
  56. *{margin:0;border:0;padding:0;text-decoration:none}
    ; ^6 h9 [6 N5 |7 |  B9 y
  57. #stats{position:fixed;top:5px;left:8px;font-size:12px;color:#fdfdfd;text-shadow:1px 1px 1px #000, 1px 1px 1px #000}- {# \4 y0 B5 S
  58. #dplayer{position:inherit}4 x* s9 ^. v, ~% W. ?/ ^
  59. </style>: s2 l3 O/ m! U4 @0 c/ L
  60. </head>
    7 D5 j3 G3 w; t
  61. <body style="background:#000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" oncontextmenu=window.event.returnValue=false>. P& O$ _4 \9 I/ Z
  62. <div id="dplayer"></div>
      r4 X9 N2 V1 Y1 f, {3 `' X
  63. <div id="stats"></div>
    , m  F4 Y) ?) [# A% {$ k/ n! x
  64. <script type="text/javascript" src="//www.629055.com/dplayer/hls.min.js"></script>- @; D  S2 D: J- u8 O7 {
  65. <script type="text/javascript" src="//www.629055.com/dplayer/DPlayer.min.js"></script>
    5 B$ R/ W* H  q( _$ s# s, K
  66. <script type="text/javascript" src="//www.629055.com/dplayer/p2p.js"></script>
    9 l& ?# c( ~* R& ~* m, }
  67. <script>
    ! I+ Z8 z2 m/ D, P$ P) o$ @8 a
  68.     var webdata = {$ k+ n$ u" s# ?3 g' l1 I
  69.         set:function(key,val){
    6 c( S5 Z5 j, k
  70.             window.sessionStorage.setItem(key,val);
    * n* T- I) ^2 P& c
  71.         },
    ; R4 a* k% I& A1 c
  72.         get:function(key){
    3 z! u* A# O1 T; z0 `
  73.             return window.sessionStorage.getItem(key);2 b8 q- Y0 \; ^6 @; B' Y
  74.         },
    7 T- @, i' l9 a, S
  75.         del:function(key){
    9 C+ T- A) {6 ^. Y$ B  K
  76.             window.sessionStorage.removeItem(key);
    1 J+ W( D" F. e8 x" ~  w
  77.         },
    ( L; v( k6 H, ]% S- n
  78.         clear:function(key){" e0 J( G& ]$ h$ a  |' @. Q! {
  79.             window.sessionStorage.clear();+ E& ~1 ^. W& F& H
  80.         }
      P- J- m- q( E" a' c) {4 R4 Q
  81.     };* V; w9 M  |- U5 j* U7 g
  82.     var m3u8url =  '<?php echo $url; ?>'9 Q" }) q, r% a" c5 c  n4 e
  83.     var dp = new DPlayer({
    & g( n' ^; Q- @; H8 O
  84.         autoplay: true,& ^0 M/ Y' I$ G: U" p% L
  85.         container: document.getElementById('dplayer'),
    ! y$ {; N) r+ ]( o
  86.         video: {
    7 }7 ~+ g7 y  |" a! c2 L7 W3 o) q
  87.             url: m3u8url,
    ' L$ q: W$ W- F3 I& Q; u% m- n
  88.             type: 'hls',
    / ]+ p# E( j% I0 b
  89.             pic: '/webp2p/loading_wap.jpg',5 p+ m8 I/ m9 E7 |3 D
  90.           },
    % k/ ^7 Y* @5 T0 o$ p. U
  91.           volume: 1.0,
    ; f' X% s2 B0 O& E

  92. ( C3 {+ F/ |" m+ q
  93.           preload: 'auto',
    0 g0 X- |$ i& M8 c% B5 Q
  94.           theme: '#28FF28',
    # O+ Z* R! [/ ?
  95.         danmaku: {# w" u* d' t. E9 R) c9 R- Q
  96.                 id: '<?php echo $url; ?>',
    * W. ?# C  o( ~- ^( l9 v* ]
  97.                 api: 'https://api.prprpr.me/dplayer/',5 s8 c" {( w( Z
  98.                 maximum: 1000,
    6 y. A# `( B- @4 V2 a$ E# Q8 y
  99.                 bottom: '20%',
    ( G+ m+ i, F. S/ B
  100.                 unlimited: true
    1 I$ S3 t/ M9 v! I9 k8 r8 S. [, H
  101.         },
    0 w; J5 d  d* l6 p/ ?0 T
  102.         hlsjsConfig: {
    ! H+ H6 R5 j; Z3 N4 \
  103.             p2pConfig: {8 i4 ?( x6 Z( Z& G
  104.                 logLevel: false,9 k2 U% C# j8 a0 {
  105.                 live: false,
    # M! n. z. }( G( p/ z
  106.             }
    3 a7 Y. J. n9 q5 T
  107.         }
    $ d1 j6 T) Z$ H( f
  108.     });$ V8 C9 i+ ?( T4 Q
  109.     dp.seek(webdata.get('pay'+m3u8url));8 z. ]; q* w8 B
  110.     setInterval(function(){: Z1 D  T6 C% z
  111.         webdata.set('pay'+m3u8url,dp.video.currentTime);$ f0 |$ j$ U' A5 x' p, b: v4 m# L
  112.     },1000);- |5 d! c# Z/ H3 K. v( P
  113.     var _peerId = '', _peerNum = 0, _totalP2PDownloaded = 0, _totalP2PUploaded = 0;5 h8 @) f9 I# ?! G0 g' S
  114.     dp.on('stats', function (stats) {7 a3 G6 [3 d$ c( ~8 P
  115.         _totalP2PDownloaded = stats.totalP2PDownloaded;
    6 z( y" F( q- F% }. `
  116.         _totalP2PUploaded = stats.totalP2PUploaded;$ {" L: Z( n4 o4 G+ }( ~
  117.         updateStats();
    $ c0 [. N1 ?: y/ j% W; }  h  Q
  118.     });8 u3 z/ U: \5 V$ q: D$ \* J+ E
  119.     dp.on('peerId', function (peerId) {
    2 {4 a6 B+ x/ T8 F! l
  120.         _peerId = peerId;
    ) O3 U8 U$ N& o4 O2 V6 X7 c/ M
  121.     });3 {+ B4 G9 V9 D+ u; o
  122.     dp.on('peers', function (peers) {
    0 r7 F7 E+ v, j
  123.         _peerNum = peers.length;
    ) |2 r$ V% G' V$ j) n
  124.         updateStats();' ~8 O/ m8 r9 H# {3 r2 j
  125.     });+ R+ b& E; j4 ?6 j0 U- t
  126.     dp.on('ended', function () {5 Q  _9 P" u  Y. w  n% N* W
  127.     window.parent.postMessage('tcwlnext','*');
    ; A, V0 T; \6 ^7 k
  128.   });
    ' N- [1 F* U0 x- m, w3 P7 v3 d
  129.     function updateStats() {
    3 B; k1 E% K$ L% `' G0 d
  130.         var text = 'P2P已开启 共享' + (_totalP2PUploaded/1024).toFixed(2) + 'MB' + ' 加速' + (_totalP2PDownloaded/1024).toFixed(2)
    4 o7 f6 E! ?+ g! w% C
  131.             + 'MB' + ' 此片有 ' + _peerNum + ' 位道友正在观看';
    1 q( M, Z2 U+ B2 o& Y
  132.         document.getElementById('stats').innerText = text
    ' J7 O; x# ~% c
  133.     }* T# o" i; y3 _. t  a6 v8 J/ x# F
  134. </script>
    + n& E- M# x% K1 D9 y& v, P3 e/ a

  135. 6 _) k1 P" ~. O! g
  136. </body>4 O  v  D  x) }) \
  137. </html>
复制代码

6 W- G$ b" s: \9 g: m" P. D( ~7 z

1 ]) E) \) U  y4 z
回复

使用道具 举报

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

本版积分规则

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

关注0

粉丝0

帖子330

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

客服电话:400-123-4567

客服邮箱:776886721@qq.com

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

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

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

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