我的账户
火车采集

教育培训在线课程

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

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

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

$ ]( M9 |& c! |! h( I
自己懒得操作的可以用此接口P2P播放器解析接口(只支持M3U8资源)
关注M3U8资源: 全网M3U8资源网
https格式:https://www.pohaier.com/m3u8.php?url=
9 }5 o' N# }2 [/ s/ G- P' ahttp 格式:http://www.ckplayer.tv/m3u8.php?url=
: |) F3 |: [* T* q- U& Dhttps格式:https://www.629055.com/m3u8.php?url=% W( g3 ?& `* ]# o
https格式:https://www.629055.com/dplayer.php?url=
, ]1 |" p# ?( s9 \# @% N建议用此接口以便后期修复
8 }) H$ ~  C6 V& {4 v) T
我们的宗旨是:让热门不再卡顿,让高峰依旧流畅2 w* q% }- w4 W! J5 l# b

9 c, v& x+ J* R  L' U) r
P2P插件由Peer5框架二次包装而成,欢迎技术爱好者共同学习www.peer5.com,插件提供完善的流媒体加速运载能力;任何站长均可以接入使用,无论插件运行状态如何,均不会对流畅度造成负面影响;就算P2P服务彻底挂掉,也不会对您的网站造成任何影响,在插件正常运行过程中,会提供非常好的加速能力,下面介绍插件运作原理以及接入方法。

3 r4 T5 q* A) L# {8 P 2865313724.png / z) _- I5 C- x3 ]2 o
) y" J6 F- y1 H% C; o
如图所示,其中signal信令服务器和tracker调度服务器,是整个系统的核心,整个圈子的建立和交互都由它们来完成,这一项服务由我们维护和优化,这是商业服务(我们已经收取到了一年的商业服务费用,站长们无需为服务稳定性担心)。

9 f, J  u+ v4 F
运作原理:
# i$ ~. A5 K- K; J. l6 A5 S# a9 S4 \5 ?/ Fstep1:将正在播放同一视频的用户纳入一个流量圈,将播放进度相似的用户进一步细分且纳入一个协同圈,当然细分原则中还涉及到网络质量等因素,具体原则就不一一描述,因为这个我们可能需要随时做升级和优化
0 }1 y4 B* I1 w3 ^, y, b
step2:为圈内用户创建互联,协同且相互提供网络帮助以完成视频的流畅播放,这是一个很复杂的流程

8 j; X4 m8 q/ f7 Qstep3:实时调度和调整流量圈的大小与范围,保障整个流量圈流畅与稳定
( ]7 b" k# Y1 H5 k/ R* ~6 \
总的来说,就是让正在观看同一个视频的用户在网络上提供相互的帮助,以达到更好的流畅性和可靠性,整个系统只会优先去获取链路最好的数据,如果整个链路都不可用,那么还有CDN或者源的数据可以使用,这个切换是毫秒级的,所以在任何情况下,系统只会带来正向的加速能力,而不会出现拖后腿的现象!

4 `' V/ }2 j/ [" A! K2 Q
以下是一个完整的视频解析页面的DEMO,保存为:m3u8.php即可,使用方式为http(s)://您的网址/m3u8.php?url=xxxxx.m3u8,当然了,m3u8的地址需要写入h5跨域头
$ L% M" o( n6 f7 `; X此版本为2.3正式稳定版版代码如下,细节请自行修改 :
更新内容:已整合弹幕,右键属性查看P2P状态编译成中文,优化加载ts速度,优化播放卡顿的问题   
) a/ V+ g0 X5 K. B
  1. <?php
    / i" d: |+ w* O: h) }* l0 z4 e. N
  2. /**
    # \$ I. F9 o  `  ^' D
  3. * @代码开源,透明,请勿用于商业用途,完全开源模式,供大家一起探讨研究8 ?# I9 p+ q" Y* t" O' c+ J
  4. ) `0 Z- M. |5 b" G
  5. * @支持全网(支持跨域)的M3U8资源加速& U8 p! S: _; r2 n- i6 O% _% }4 W

  6. 1 J  H; L. r: e* d3 k1 ]6 b
  7. * @调用举例:http://域名/m3u8.php?url=5 p  t8 _: S9 {, k: t
  8. * @举例说明:https://www.629055.com/m3u8.php?url=https://www.caonima.me/20181122/FnHKa1pS/index.m3u8- b5 e. }3 N: J9 s9 K- O7 T2 u

  9. 4 U. {) t# @% F+ L; w5 o
  10. * @如有问题(反馈)请联系QQ 8852422修复
    0 |2 Y8 R* c( B6 l% F. g5 ]5 x
  11. * I9 b9 q0 v8 M0 k. }, C( ]
  12. * @author    www.pohaier.com
    2 a  i" F5 |+ ]- N4 T, V2 l
  13. * @copyright 2018
    $ c, V, y8 O0 _, g6 X! R
  14. * @version   2.31 _  i# w) r0 o9 e% E) E' O2 s
  15. *' S& }( W& s, e, r
  16. * for ray-p2p btjson
    2 \# t7 {4 L! _+ [
  17. *
    & G) m& {$ N! m. Z$ V/ L
  18. */5 ?6 g: L$ Q0 W1 U3 o
  19. error_reporting(0);
    7 R% v- l/ T' p  \. K' g
  20. header("Content-Type: text/html; charset=utf-8");) b( v# V" j/ v1 R7 ]# d$ D2 N
  21. $url = $_GET['url'];
    8 `8 D8 E- ^7 U2 j" s, X
  22. if(strpos(wm_https(),'ps:') !== false){//接口带 S 证书1 s1 A  `6 V' Q% S
  23.     if(strpos($url,'http://') !== false){
    " h$ L" I) W# P$ R6 {: \1 T% M
  24.         header("location:http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链没带 S 证书就跳转到不带 S 证书的接口0 O" q1 [; @9 T. ~6 q4 f
  25.         exit();$ {  C# a8 h" ]5 `$ G6 V
  26.     }
    ' e% h" B. N( D% M1 {0 f  c' a
  27. }else{//接口不带 S 证书
    * Z$ R' ~+ w% v
  28.     if(strpos($url,'https://') !== false){" ?2 z( G. n- o1 U6 k- o" ?, m
  29.         header("location:https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].'?'.$_SERVER['QUERY_STRING']);//判断直链带 S 证书就跳转到带 S 证书的接口
    ! d2 E4 [4 m" U/ @% b' I
  30.         exit();
    " }+ P" C7 \- N1 A$ P8 C
  31.     }! |' R' k+ ~$ v6 M( _) F( {
  32. }
    : ?; O& [7 @% y7 U4 _
  33. function wm_https(){0 s/ y1 h5 B3 |: a1 Y7 C
  34.     $http = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';& S- b  S- W. a7 T
  35.     return $http;
    2 P4 i( @. Y7 d1 N
  36. }' O) r9 E6 A* F  X' N% y, w
  37. ?>
    2 C6 b. R4 `- X  B0 B& b+ v6 M

  38. ; v2 z( M, a: |; g
  39. <html>
    ! i) _+ N9 A, z- h) g: W* ^
  40. <head>+ u" i$ f; _% r
  41. <title>Dplayer---P2P版播放器</title>
      c3 U+ I! S/ ^4 t% v
  42. <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>+ T' R# D) Q6 b6 F1 K4 z
  43. <meta http-equiv="content-language" content="zh-CN"/>; s, V' b6 q  _4 a* x% \& n# p8 L
  44. <meta http-equiv="X-UA-Compatible" content="chrome=1"/># T* {# s4 K$ B/ i% M" U
  45. <meta http-equiv="pragma" content="no-cache"/>
    7 t% x5 f- u% [- w4 m0 R
  46. <meta http-equiv="expires" content="0"/>
    ) {! w3 v4 k2 i" H
  47. <meta name="referrer" content="never"/>
    # Q' P; S' P- @2 e3 ?* X/ q6 U; s
  48. <meta name="renderer" content="webkit"/>, P5 C+ j4 @) F: J) a+ ^) o' D
  49. <meta name="msapplication-tap-highlight" content="no"/>8 u) l' [/ G9 ?$ o
  50. <meta name="HandheldFriendly" content="true"/>
    9 F- [- a, r3 {; n& [
  51. <meta name="x5-page-mode" content="app"/>6 I* Q" x2 x  D2 S' q
  52. <meta name="Viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>! ?6 v1 H% {1 o: @: r$ d9 ^
  53. <link rel="stylesheet" href="//www.629055.com/dplayer/DPlayer.min.css" type="text/css"/>
    2 W' @/ N1 ]- @3 O, v1 Q* L
  54. <style type="text/css">- f' D: T/ k5 q& U5 y( b
  55. body,html{width:100%;height:100%;background:#000;padding:0;margin:0;overflow-x:hidden;overflow-y:hidden}+ o9 [% K4 K% P2 f* f
  56. *{margin:0;border:0;padding:0;text-decoration:none}
    ' V4 ?' s0 ]" D. ?
  57. #stats{position:fixed;top:5px;left:8px;font-size:12px;color:#fdfdfd;text-shadow:1px 1px 1px #000, 1px 1px 1px #000}
    6 e! M& S3 @( m$ H3 \& t! Q
  58. #dplayer{position:inherit}
    " q: ?0 [! P% \1 W
  59. </style>) Y" ?* W/ L! P1 ~6 @4 w( A8 H
  60. </head>
    * B' ~! C/ Y& f
  61. <body style="background:#000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" oncontextmenu=window.event.returnValue=false>" h  h; Y' E3 Y0 G! j! f1 l" e" _
  62. <div id="dplayer"></div>1 Z* U& z8 }# \5 i# y0 \+ x" Q% L3 a
  63. <div id="stats"></div>+ S/ ]% M( w" H$ o; s7 z% H
  64. <script type="text/javascript" src="//www.629055.com/dplayer/hls.min.js"></script>
    - J3 V0 [5 B3 j2 w4 \' [
  65. <script type="text/javascript" src="//www.629055.com/dplayer/DPlayer.min.js"></script>6 l; Z5 {3 w7 F+ X/ h- j$ _
  66. <script type="text/javascript" src="//www.629055.com/dplayer/p2p.js"></script>7 f# q2 d; X6 y
  67. <script>, Q2 \+ \0 d/ ?" t& r0 k
  68.     var webdata = {% g; i$ @1 j+ \) q) f
  69.         set:function(key,val){9 e3 ^, C8 m/ s2 P
  70.             window.sessionStorage.setItem(key,val);$ \& z* B, I4 [% D  Y5 [" W
  71.         },
    % a- C1 G- V7 r; `% S
  72.         get:function(key){
    5 H, Q, @2 S# n! u
  73.             return window.sessionStorage.getItem(key);
    # t& g) y; }0 z# D
  74.         },
    8 g. E) O6 W1 z2 a5 V9 T. B
  75.         del:function(key){' E4 R8 l$ n0 _: T2 {
  76.             window.sessionStorage.removeItem(key);
    + A4 g: g+ W) c+ [. ?
  77.         },% l. L/ d% o6 X, v. [# n2 l+ g
  78.         clear:function(key){, f& t8 }; N: L' R+ }5 z& J( E+ S) W
  79.             window.sessionStorage.clear();# h+ N+ h7 a% {% o! `2 |( B: t) G6 P, r
  80.         }7 [5 N, B1 A1 F/ g9 Y
  81.     };
    8 Y( a# ~5 v$ _: P  ~
  82.     var m3u8url =  '<?php echo $url; ?>'9 A8 I% p, N- x2 L  t( ?
  83.     var dp = new DPlayer({3 I( s. f. n  H6 u6 A  [. s
  84.         autoplay: true,
    : U0 U6 _" D$ c# W$ T
  85.         container: document.getElementById('dplayer'),* ]2 J, o# l! i
  86.         video: {
    ' v* L) s# F. M
  87.             url: m3u8url,  @8 M. T2 t3 J" [8 t1 n
  88.             type: 'hls',
    ' T6 A2 G) @: @8 ~
  89.             pic: '/webp2p/loading_wap.jpg',# F0 L7 K+ F3 j
  90.           },
    ' Y: ?& v/ J  F9 U
  91.           volume: 1.0,& Q" L& z0 L0 H) u* n$ f; o& ]

  92. : Z0 h9 K& I% I4 b; l
  93.           preload: 'auto',
    / C3 r7 E" o7 W9 ~. w& b1 K! S" ?
  94.           theme: '#28FF28',
    & }: E/ i# K7 M
  95.         danmaku: {
    4 N/ l% e8 x0 n8 A
  96.                 id: '<?php echo $url; ?>',
    ) m1 v' C! e& E# A, W
  97.                 api: 'https://api.prprpr.me/dplayer/',
    . ?7 N% d- M( O! C+ P
  98.                 maximum: 1000,
    1 a$ T4 F0 F* F: `  h' b
  99.                 bottom: '20%',
    - {7 h: a9 d, U- ]7 o1 _
  100.                 unlimited: true
    ! M0 C# O! b$ k; s
  101.         },5 w/ t5 a! [  h. N+ `) o! e1 E5 \9 Q
  102.         hlsjsConfig: {% R4 Z& r3 W- f! I  |+ r; L
  103.             p2pConfig: {
    5 D5 r2 _% B! @1 \6 y  ?
  104.                 logLevel: false,
    / B: V# ~# J- Z9 j
  105.                 live: false,
    / s8 J0 l" L' L+ |) e$ ]9 e: S" B9 h
  106.             }
    5 s1 i7 r& ^+ m0 K: T2 s' Y2 L
  107.         }* }3 k* a, w9 E" C7 T' ?& W  ^
  108.     });
    " @7 }) k: d, ^# j) L
  109.     dp.seek(webdata.get('pay'+m3u8url));
    ! y* v+ ~- T  w5 l' `5 e- U
  110.     setInterval(function(){9 v' W3 Z8 e2 w, t" Q4 K
  111.         webdata.set('pay'+m3u8url,dp.video.currentTime);  a& V' o( G; q
  112.     },1000);$ R- k& M5 I1 p" Q, B) u0 X+ f) T
  113.     var _peerId = '', _peerNum = 0, _totalP2PDownloaded = 0, _totalP2PUploaded = 0;
    6 Q6 z; X: S  B8 e
  114.     dp.on('stats', function (stats) {
    ! o: c+ H3 x+ V; s$ u0 H
  115.         _totalP2PDownloaded = stats.totalP2PDownloaded;
    . t2 e! `! }4 N: V0 V) ~8 ^. d* z
  116.         _totalP2PUploaded = stats.totalP2PUploaded;
    , x% Y) S( z- W4 J& N$ X
  117.         updateStats();
    3 Q* e. C& ^8 t# X( O
  118.     });9 g' W+ R  B. |5 @8 w. N$ ^$ e
  119.     dp.on('peerId', function (peerId) {4 M: ?6 L  [* j( ?
  120.         _peerId = peerId;. [6 T: ^& M8 Z) r4 s) n
  121.     });
    " U  z- M" N8 j  {( `7 r# A, @
  122.     dp.on('peers', function (peers) {
    6 x3 @0 m: i9 m
  123.         _peerNum = peers.length;
    9 P6 f4 I2 w& Z6 L. n* Y! v
  124.         updateStats();
    4 w* m0 \- _$ L4 H- U9 Q" t
  125.     });( b, z. o  N: ~9 G% ~
  126.     dp.on('ended', function () {$ u8 _6 {/ f- B( i% g6 m7 ]
  127.     window.parent.postMessage('tcwlnext','*');1 m5 x# r* Z; `. B) x& T+ g2 @; D
  128.   });  S8 M& g8 k3 D! Y
  129.     function updateStats() {. {$ G$ u$ G. ~3 H
  130.         var text = 'P2P已开启 共享' + (_totalP2PUploaded/1024).toFixed(2) + 'MB' + ' 加速' + (_totalP2PDownloaded/1024).toFixed(2)
    + f8 o: {" Z- n' a, j7 @
  131.             + 'MB' + ' 此片有 ' + _peerNum + ' 位道友正在观看';/ G6 Z! I5 \6 E: L# a$ z. w" g& j
  132.         document.getElementById('stats').innerText = text
    5 C" K# d, a' z, w: f
  133.     }" A8 }% D( x$ f2 E1 l  m
  134. </script>0 P" _: M6 M+ O# A' e3 ?

  135. , l' e, R# c4 J9 b  Y
  136. </body>
    5 F) }  A: `7 Q& }6 J
  137. </html>
复制代码
$ p8 F% D( n, V
. ], M: x" D1 Q1 ^. q5 e2 H) f- c! 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.