我的账户
火车采集

教育培训在线课程

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

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

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

! \, s) n9 t7 J8 U6 M
自己懒得操作的可以用此接口P2P播放器解析接口(只支持M3U8资源)
关注M3U8资源: 全网M3U8资源网
https格式:https://www.pohaier.com/m3u8.php?url=
- R" j/ E0 G5 x* j1 qhttp 格式:http://www.ckplayer.tv/m3u8.php?url=
  c1 A5 a+ b/ k3 z) Khttps格式:https://www.629055.com/m3u8.php?url=; z+ ?6 U1 q$ [7 N; \
https格式:https://www.629055.com/dplayer.php?url=
# I; a" Q& s1 J' L5 r0 ?建议用此接口以便后期修复
2 y& N& ]; }: }4 f+ u/ K, u  `! K7 o
我们的宗旨是:让热门不再卡顿,让高峰依旧流畅
- F; d1 W* ~. ^% n5 U( C
" d3 C# ^% b2 H
P2P插件由Peer5框架二次包装而成,欢迎技术爱好者共同学习www.peer5.com,插件提供完善的流媒体加速运载能力;任何站长均可以接入使用,无论插件运行状态如何,均不会对流畅度造成负面影响;就算P2P服务彻底挂掉,也不会对您的网站造成任何影响,在插件正常运行过程中,会提供非常好的加速能力,下面介绍插件运作原理以及接入方法。

+ \2 E) [* N2 j2 r% r* b4 ` 2865313724.png 4 ~9 K0 k/ \6 o& n4 k4 O

7 l6 Z  s; t7 D& ~
如图所示,其中signal信令服务器和tracker调度服务器,是整个系统的核心,整个圈子的建立和交互都由它们来完成,这一项服务由我们维护和优化,这是商业服务(我们已经收取到了一年的商业服务费用,站长们无需为服务稳定性担心)。
# T; G3 F4 o7 e. e9 `
运作原理:
0 b: D( P3 z0 E* n0 xstep1:将正在播放同一视频的用户纳入一个流量圈,将播放进度相似的用户进一步细分且纳入一个协同圈,当然细分原则中还涉及到网络质量等因素,具体原则就不一一描述,因为这个我们可能需要随时做升级和优化
' A8 x' S  k  ~: O7 i
step2:为圈内用户创建互联,协同且相互提供网络帮助以完成视频的流畅播放,这是一个很复杂的流程
% I( L, f$ u. @# s  c8 z0 V
step3:实时调度和调整流量圈的大小与范围,保障整个流量圈流畅与稳定
, B$ A5 r( q* e/ C% d+ M( c
总的来说,就是让正在观看同一个视频的用户在网络上提供相互的帮助,以达到更好的流畅性和可靠性,整个系统只会优先去获取链路最好的数据,如果整个链路都不可用,那么还有CDN或者源的数据可以使用,这个切换是毫秒级的,所以在任何情况下,系统只会带来正向的加速能力,而不会出现拖后腿的现象!
# j4 C9 s5 E$ `
以下是一个完整的视频解析页面的DEMO,保存为:m3u8.php即可,使用方式为http(s)://您的网址/m3u8.php?url=xxxxx.m3u8,当然了,m3u8的地址需要写入h5跨域头
! s- N& |$ U5 w+ x. W此版本为2.3正式稳定版版代码如下,细节请自行修改 :
更新内容:已整合弹幕,右键属性查看P2P状态编译成中文,优化加载ts速度,优化播放卡顿的问题   

$ s: R7 O* R$ _0 {8 Q2 u. r# [
  1. <?php
    : K" `  N. T# D% I( }; F- J
  2. /**# Z) W& c  b. `, W! j5 R! a6 S
  3. * @代码开源,透明,请勿用于商业用途,完全开源模式,供大家一起探讨研究
    9 {/ W) n: M2 `& v4 @* E- d% s

  4. # D$ O( H: K! L3 V
  5. * @支持全网(支持跨域)的M3U8资源加速
    ! r$ G- V# n5 K; w
  6. - D# K, Q1 Q" E) Y
  7. * @调用举例:http://域名/m3u8.php?url=
    ; n, e; h& N0 F, f) a
  8. * @举例说明:https://www.629055.com/m3u8.php?url=https://www.caonima.me/20181122/FnHKa1pS/index.m3u86 L& H0 J( L+ f% I

  9. $ s, [6 k) Y1 M. z
  10. * @如有问题(反馈)请联系QQ 8852422修复3 x9 _* S# r; Y- S/ p% h, Z
  11. " o$ C6 J: t3 ~- @9 ?
  12. * @author    www.pohaier.com1 Z8 B& s+ |1 p0 r" M, ]
  13. * @copyright 2018
    . W% a7 e4 _) B0 N  B3 p
  14. * @version   2.3; }# T1 V0 i& F6 G% G& O* r" }, y
  15. *. @) B& W; ?0 _) w
  16. * for ray-p2p btjson6 p/ d' F2 f4 ?6 {; Y6 L4 m3 _, x% A
  17. *
    9 Z, Z" T8 Y) s5 |
  18. */
    3 ?5 y8 r  J) {
  19. error_reporting(0);
    7 z  M/ [6 K6 r. B% @
  20. header("Content-Type: text/html; charset=utf-8");' r7 t+ G% Y) d4 s
  21. $url = $_GET['url'];" O/ @+ P( j  g6 [2 o
  22. if(strpos(wm_https(),'ps:') !== false){//接口带 S 证书5 q9 t' F2 S. L7 t" e, ^
  23.     if(strpos($url,'http://') !== false){0 w8 W% |- z1 t! X& B
  24.         header("location:http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链没带 S 证书就跳转到不带 S 证书的接口  n3 S! H0 d; P( O- K0 Y
  25.         exit();/ c- o; q$ z. `0 B+ t3 G
  26.     }  u8 O5 T6 b$ P7 D9 J
  27. }else{//接口不带 S 证书
    : _2 Z8 q. k6 P2 e( L
  28.     if(strpos($url,'https://') !== false){: A, D: d4 ^- P5 T2 z& l6 M
  29.         header("location:https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链带 S 证书就跳转到带 S 证书的接口2 M/ c( r9 _* [6 ~2 c2 m$ q, f
  30.         exit();
    $ U' b; x1 t1 \) Q. Y/ ^7 z
  31.     }9 y* Q5 r8 @4 f* _) F5 u4 q: X
  32. }3 ]2 [" X, r; |; }- w
  33. function wm_https(){+ ^% l! u0 I) ]! F
  34.     $http = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
    ; E$ M9 ~! M/ X( l7 ~) `! W) n2 N2 m
  35.     return $http;
    6 M' w( b; V# d6 Z: k- |
  36. }
    ; b1 d5 H. i8 Z7 i- H4 i
  37. ?> 0 l+ A; ^* L7 C$ S
  38. - ^, l2 C' x# _4 i
  39. <html>4 f; {4 p1 r& H' \
  40. <head>
    7 l7 W- c' [9 n  M% Y
  41. <title>Dplayer---P2P版播放器</title>
    ! K9 V( ?- w/ p* d
  42. <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>9 V6 @/ i; w3 e. n
  43. <meta http-equiv="content-language" content="zh-CN"/>
    - T4 U# v8 j& O
  44. <meta http-equiv="X-UA-Compatible" content="chrome=1"/>7 l4 N( `) U+ j5 u7 f4 a3 E+ F
  45. <meta http-equiv="pragma" content="no-cache"/>
    # R. A  j9 A: n/ K
  46. <meta http-equiv="expires" content="0"/>" f7 }+ b4 [7 ^! E0 ^
  47. <meta name="referrer" content="never"/>* k6 d* w1 ~1 [, V) M" @! P! y
  48. <meta name="renderer" content="webkit"/>
    + x* C# v1 r( s
  49. <meta name="msapplication-tap-highlight" content="no"/>0 e" w- E2 e2 i* x0 ?
  50. <meta name="HandheldFriendly" content="true"/>$ m( M2 S2 l# _0 E8 ?1 Y) C9 k
  51. <meta name="x5-page-mode" content="app"/>
    : |( e3 x) b& ^* m0 B% Q: B
  52. <meta name="Viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
    4 v+ j3 _, E5 E
  53. <link rel="stylesheet" href="//www.629055.com/dplayer/DPlayer.min.css" type="text/css"/>9 q% s" n( |4 G& \. ^$ f
  54. <style type="text/css">2 v- e/ I. Q7 {9 Y) `3 |8 ^
  55. body,html{width:100%;height:100%;background:#000;padding:0;margin:0;overflow-x:hidden;overflow-y:hidden}$ C% P. i3 k! W9 p  V0 n( O
  56. *{margin:0;border:0;padding:0;text-decoration:none}
    : N, Y& M' ^5 i9 ?- B
  57. #stats{position:fixed;top:5px;left:8px;font-size:12px;color:#fdfdfd;text-shadow:1px 1px 1px #000, 1px 1px 1px #000}: a6 @/ w* n! Z% `
  58. #dplayer{position:inherit}
    * Q8 W0 A, ~! Y+ x
  59. </style>
    $ h& Y& t- ]& V' _8 R& f
  60. </head>
    9 ^; g& Q* D5 C- j
  61. <body style="background:#000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" oncontextmenu=window.event.returnValue=false>2 Y* _( b' B" v; c% C2 U
  62. <div id="dplayer"></div>
    * A% w' I; f# T& s3 C
  63. <div id="stats"></div>3 O6 c" R2 N* s' ?
  64. <script type="text/javascript" src="//www.629055.com/dplayer/hls.min.js"></script>
    7 O# ~" r: }4 g
  65. <script type="text/javascript" src="//www.629055.com/dplayer/DPlayer.min.js"></script># ~" \, w+ H! z9 r( e' j+ w- G& E
  66. <script type="text/javascript" src="//www.629055.com/dplayer/p2p.js"></script>: Z* l+ G; o* F5 W( I
  67. <script>; c' B( r3 \2 U3 P9 ]7 r- K, g
  68.     var webdata = {& j- |6 L  Y! s8 Q( O/ f
  69.         set:function(key,val){  a& m2 j5 Q8 u: s' K0 j3 f
  70.             window.sessionStorage.setItem(key,val);/ n) J3 j+ G5 o6 _
  71.         },) N9 u- x. u. X$ |
  72.         get:function(key){
    ' H1 @, N  ?' L, A+ \3 n/ C
  73.             return window.sessionStorage.getItem(key);8 x1 H1 |1 @# _7 m  a& S; c
  74.         },
    % H5 d( r7 s. _$ @0 |8 X" d
  75.         del:function(key){
    . y0 j' ]4 y, Q- i  k
  76.             window.sessionStorage.removeItem(key);# x# f6 ^; A! ^7 v
  77.         },% x! P% f- ^: N0 M% N6 k# m; x
  78.         clear:function(key){
    . M8 y" T+ p  N' u7 s0 E
  79.             window.sessionStorage.clear();5 n3 X' Z1 ~6 h0 h3 X
  80.         }
    % S+ ]8 r# @# N; B
  81.     };9 f4 o* n0 @  O4 t
  82.     var m3u8url =  '<?php echo $url; ?>'0 d6 p: ^4 ?; i. A
  83.     var dp = new DPlayer({; p* T# i( o) L+ K7 Q1 ?& E
  84.         autoplay: true,3 ?& `8 Y$ d+ U% ^1 p& ~
  85.         container: document.getElementById('dplayer'),) n5 Y( ?1 p& Q1 W7 h
  86.         video: {+ V* T$ ?* X! E# }% q$ U
  87.             url: m3u8url,
    6 i7 _% o  ]. Y2 ?4 x: v# W
  88.             type: 'hls',
    # h; U/ Q+ i: Z, S
  89.             pic: '/webp2p/loading_wap.jpg',
    ' j/ }6 e( m  ]7 V/ m' U$ A3 o
  90.           },
    8 M- N6 A  z6 F7 i9 U
  91.           volume: 1.0,
    . Q+ Q% x) v" g# o9 i

  92. : o% g& b/ g. |, E
  93.           preload: 'auto',5 C2 ~3 X; g  N- z& h; ]  m
  94.           theme: '#28FF28',1 u# t( N2 `& {  O
  95.         danmaku: {
    ) r, o1 r) s' z
  96.                 id: '<?php echo $url; ?>',6 {- |. b8 r6 k1 `3 y0 A& B( c
  97.                 api: 'https://api.prprpr.me/dplayer/',6 b. M! W! Y; L
  98.                 maximum: 1000,  U% b1 \8 i7 ]+ x; i
  99.                 bottom: '20%',1 |* y0 p" e6 K5 i2 S# s; A6 D  |- x: I
  100.                 unlimited: true# s% _* C: C0 o% {' f  O2 y
  101.         },
    6 t% g+ s1 k9 m  H- Z$ s6 w( F' w0 B
  102.         hlsjsConfig: {: c" U$ J; L5 P) [. o, Y% P- g
  103.             p2pConfig: {
    # v( M2 l% M) R9 v1 x
  104.                 logLevel: false,
    2 b4 d1 E2 {" N* c& N  q% K
  105.                 live: false,
    / r+ }0 F# w0 Q8 s3 ~
  106.             }' {  \+ {. E% f4 P* k- t
  107.         }6 d/ T- `* {3 J: k1 L: x! K; ^
  108.     });. Y+ Y0 [$ L) ~. N/ O5 z
  109.     dp.seek(webdata.get('pay'+m3u8url));
    - ~: N( k, x, P9 G) Y! ]
  110.     setInterval(function(){  s7 @, j2 ~* e6 G. v) m1 u
  111.         webdata.set('pay'+m3u8url,dp.video.currentTime);
    " ]" w$ U0 t* `6 ~- V/ T
  112.     },1000);
    # b# Q1 o2 r/ g! E2 j, x
  113.     var _peerId = '', _peerNum = 0, _totalP2PDownloaded = 0, _totalP2PUploaded = 0;* {' H- D' P7 b2 D) M7 O% u( g( c
  114.     dp.on('stats', function (stats) {
    % o+ @% \  w! x. G0 U5 N
  115.         _totalP2PDownloaded = stats.totalP2PDownloaded;, r% a; {  p2 N/ O5 |6 X
  116.         _totalP2PUploaded = stats.totalP2PUploaded;, P/ j0 }1 z9 ]0 [/ L
  117.         updateStats();
    * e+ Y+ Z8 e- e1 B* l
  118.     });
    6 g2 E" X3 |3 f$ a) |
  119.     dp.on('peerId', function (peerId) {0 d$ K" [6 D) p
  120.         _peerId = peerId;
    ' k6 O6 u6 y; v/ b# |& M5 W
  121.     });1 U! ?8 h! v, U" U% n, Y& E
  122.     dp.on('peers', function (peers) {' l* v% [$ L) U1 N3 e: G
  123.         _peerNum = peers.length;' R4 z4 Q, @) }3 y1 @
  124.         updateStats();
    0 A4 f; V3 q7 `( J2 }7 K
  125.     });
    * F. Q8 p0 B  z& M
  126.     dp.on('ended', function () {9 V# J1 s7 V1 J- E
  127.     window.parent.postMessage('tcwlnext','*');
    9 \5 B/ u: Z2 g7 U
  128.   });: H4 E! O: l; ?1 W8 ?
  129.     function updateStats() {& V9 }: {  q1 H9 W" X
  130.         var text = 'P2P已开启 共享' + (_totalP2PUploaded/1024).toFixed(2) + 'MB' + ' 加速' + (_totalP2PDownloaded/1024).toFixed(2)8 n1 T5 _* [7 i! J- K
  131.             + 'MB' + ' 此片有 ' + _peerNum + ' 位道友正在观看';0 |' D* z7 ]! O3 ?6 U. h
  132.         document.getElementById('stats').innerText = text
    6 M% N5 _1 E' T1 D7 y* ?5 h
  133.     }
    ( C. }/ z7 }0 G7 y
  134. </script>) {, i* k9 h: {& }

  135. 7 u2 T' H% q# ?; c
  136. </body>2 J& `8 J: J* l8 q/ I
  137. </html>
复制代码
7 t" q3 w; O: _) W+ t* e2 Y* X

% C% v" F1 e1 _  V8 x/ M
回复

使用道具 举报

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

本版积分规则

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

关注0

粉丝0

帖子330

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

客服电话:400-123-4567

客服邮箱:776886721@qq.com

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

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

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

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