您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9448|回复: 0
打印 上一主题 下一主题

[swoole] swoole视频直播(记录用 未测试)

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
服务器代码+ I/ Q0 e6 o: o. {
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    5 }0 L9 }% a! g  d' G# \7 A
  2. $client=array();5 ]- ^; U* d  S$ l9 e7 B2 V% y
  3. $serv->on("open",function($serv,$req)use($client){
    2 g) m$ O, L4 ]- A
  4.         //echo 'connect'.$req->fd;! L$ H- X. Q& O. C
  5.         $client[]=$req;
    4 N- B* S6 w' b% u
  6.         //var_dump($client);
    ; `* h4 J# S2 w
  7.         $serv->push($req->fd,'aa');3 I3 I" a& D  x% q" o5 A
  8. });
    % n6 J3 R& A. @2 S
  9. % R+ Y3 `" d, F. n3 W
  10. $serv->on("message",function($serv,$frame)use ($client){
    . F/ W$ T7 m! `; W& }8 w( z9 A
  11.         /*var_dump($frame->data);: t2 \# B9 l. ~) v# g& ~; z
  12.         foreach($client as $key =>$val){' ~" P/ X* z: ~$ x+ m
  13.                 $serv->push($val->fd,'aa');$ u8 j- D9 Q3 K4 t3 v0 b2 L
  14.         }*/2 c/ p0 P7 `, O$ h" _
  15.         $client=$serv->connection_list();1 |3 @' z* K4 ^
  16.         var_dump($client);$ d7 N: t. }% J9 w3 G7 i
  17.         foreach($client as $key =>$val){9 C1 P1 G3 v5 m
  18.                 if($val!=$frame->fd){0 n5 H) @8 Z( i
  19.                         $serv->push($val,$frame->data);" U( w* w+ d1 Z7 B. i
  20.                 }1 i. T! _) Z0 K0 C
  21.         }
    , B( }( X- S1 \# \
  22.         
    . X- p# F( E' O' _' {( ~- m9 q1 R
  23. });- F. A" X5 X0 ~" B" ~; A; j& R

  24. 8 z. e3 Z! h% m% B' G' |
  25. $serv->on("close",function($serv,$fd){1 `) w9 t$ k9 ]2 v
  26.         echo 'close';9 V$ r- m- B$ w9 A. [9 K8 `
  27. });% b* I! g0 v/ A) A6 x. z$ \& k, X
  28. 8 K) |4 L5 I. r/ y: e
  29. $serv->start();. Z- M& b; {5 l" ?( U
  30. ! H* u& g; t& h# n
复制代码
主播客户端% I& Z2 R* @/ I0 k, k; ]- a7 a
  1. <!doctype html>
    ' F% s2 o$ r0 M7 K: ^+ x
  2. <html>& T& k: t4 x. l/ A+ D/ d: I
  3. <head>
    3 |9 h# M6 {4 i2 w
  4. <meta charset="utf-8">
    + ~. M' S; H! a# U

  5. 5 s) m6 d: S3 M+ s
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">) Q. k) b' v1 Q5 _# b1 J- e' {; a8 D
  7. <title>404</title>
    9 S7 f. g$ e6 U! ~; S, L
  8. <style>* B) f% B$ F: b1 e
  9.         body{# V: f% B  M" q. {0 S/ U" G
  10.                 background-color:#444;
    9 ~5 V1 W4 |1 x" p! M6 c& P# T9 |
  11.                 font-size:14px;
    . y( E! y2 n, C1 T* c
  12.         }
    1 X. R, ?0 G6 u3 r/ S! t
  13.         h3{
    ( G, e6 f) o& P2 x  S
  14.                 font-size:60px;% v7 d. m4 H& z1 O' c
  15.                 color:#eee;
    9 U; _5 I/ @1 Y/ v5 q! m" A- x
  16.                 text-align:center;
    : w$ ?% Z/ A- z! j3 q; h
  17.                 padding-top:30px;
    4 [8 B+ N" a( H1 M( t
  18.                 font-weight:normal;
    7 }' E7 E/ c+ J( K0 \7 c7 |' _  m. }
  19.         }: V5 S( A3 V' j* o
  20. </style>: u( ~! Q* t4 k7 a. r8 y. u3 j% [% q
  21. </head>. j9 }+ K) \; C9 z& F/ C& W$ q

  22. 2 M% g1 [/ o- f+ a3 b/ u
  23. <body>
    " t# ]2 i# V2 f1 }( W3 T+ j0 ^
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
      t6 O9 P" {# k/ S( n5 i! `
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    2 @- z  Z: k8 E4 B  i2 u4 H
  26. <canvas width="400" id="canvas2" height="400" ></canvas>; X. ]! p, E! [0 s" s% E% o
  27. <script>
    + q  C/ y# Y1 n2 p: B5 D9 F3 U3 p
  28. var video=document.getElementById('video');2 D7 u. [3 X8 Q9 J  W: i
  29. var canvas=document.getElementById('canvas');
    : p" y. h- ^# ~9 g+ s5 y
  30. var canvas2=document.getElementById('canvas2');
    9 ]2 O8 }1 Q- b& b: g
  31. var context=canvas.getContext('2d');
    ; Q3 G- w0 k7 A) K
  32. var context2=canvas2.getContext('2d');
    ( R2 F$ H; p4 Y4 }% S3 E
  33. function draw(){9 D9 G9 I' {9 R# O
  34.         context.drawImage(video,0,0,400,400);
    4 p# h1 g# y" t$ X7 A; t4 e" A
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    & q/ G9 a6 I4 N# u2 [" B
  36.         setTimeout(draw,800);8 `" {! G3 k9 v* B( I1 ]! u+ Q5 L
  37. }5 X  U9 }) q) p; \1 R

  38. 8 e/ Y: C: G5 @9 _
  39. //客户端跟服务端通讯; D5 ?% T7 n" t; a; ~; Y* S
  40. if (window.MozWebSocket), @! A0 h2 z& r5 B7 U% V4 ^+ L  J
  41. {- a5 ^! s, W6 A, _# v
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    5 w, U1 D& `& U. {1 e
  43. } else
    1 r5 t5 f" j! A& H
  44. {. C8 N2 c. f, s
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    + f0 r* w7 b  z2 _* r
  46. }3 b2 f* F! v+ o
  47. : U' u7 \' {# O
  48. ws.onopen=function(event){
    + k: P  e* c1 Z; K( A/ e
  49.         alert('连接成功');3 g. {3 N$ m6 n% c
  50.         ws.binaryType = 'arraybuffer';
    % {4 F+ n' }% [; y3 g8 x' ^- S
  51.         draw();
    1 }7 Q0 @" p0 Q' T
  52. }  ^4 t* p4 v- y1 x
  53. ws.onmessage=function(event){, i" U. w: r$ R
  54.         //alert(event.data);
    2 z# b9 d, _' y. p/ D9 R
  55.         //ws.send(event.data+"client");7 M4 n6 p: @8 p4 _/ N3 b$ q% V
  56.         qrCodeImg = new Image();
    $ O6 Z$ D- \& {  o
  57.         qrCodeImg.src = event.data;' g% g1 |5 O7 H, N* X+ q, h7 J
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);4 R. D0 }1 }3 f( [
  59.         # h* J* r" Z( y  j7 U
  60. }
    8 a+ j( l/ E6 g7 c0 y! Y
  61. ws.onclose=function(event){
    1 Y& ?4 P6 n) a1 z* }5 o
  62.         alert('close');
    : z* @% {$ M+ ?" \! J2 _6 u3 D# ^2 w+ B
  63. }' |" \4 P8 r. e; c9 L# i; m
  64. ws.onerror=function(event){; C& R/ c$ c0 V6 a
  65.         alert('error');
    ; L' J1 `4 s7 G" I, n; M* T" _
  66. }
    2 r0 }2 q$ _' _: }1 z! n
  67. //video,标签模拟视频/ _& z4 X8 Q# B) y' }' d% J

  68. 4 a# g& @* G$ [
  69. </script>3 s7 H9 E$ j8 c" d
  70. </body>
    0 y  V5 W6 x# G3 P
  71. </html>  D/ |1 Z& P2 c: Y' O+ {

  72. $ M0 y/ ~# v# ~& |; [
复制代码
客户端:4 O% E3 V7 U+ u, A5 z; h2 W
  1. <html>
    / s' \( b3 Z; O# a/ M8 Y
  2. <head>
    - y# S; O( R/ ]0 \( `# Z+ s' D
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">: @$ W/ H4 _( H' [
  4. <title>客户端直播页面</title>
    / m+ t: @1 ^6 O% ^+ g6 V
  5. </head>
    8 ~0 Q! S* h+ a
  6. <body>1 h2 i& I* L! x5 p
  7. <img id="receiver" style="width:720px;height:480px">( e( \, P8 W: Y7 J
  8. ; l2 x. z6 R! y
  9. <script type="text/javascript" charset="utf-8">3 f" X3 W, `& n; V- k! S
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    # w% L% S, }5 R& O
  11. var image = document.getElementById('receiver');( n' f3 G/ r$ i8 X5 z8 Q% z
  12. receiver_socket.onmessage = function(data) {
    & k# g0 F* L" d- H
  13.         console.log(data.data);$ Q" v6 [+ j: g. a
  14.         image.src = data.data;
    $ D6 s  E+ r% k1 i8 Y8 H8 g7 \+ I
  15. }
    8 s9 ^4 t: m3 R/ e
  16. </script>
    ( B, l8 V# k* s% a, n4 s2 Z
  17. </body>6 L( T2 D; V0 Z( a+ d1 g/ R4 p
  18. </html>
      m6 F6 y5 c! @3 o. p
  19. 2 s4 }9 V, E. J2 ~
复制代码
" Y6 a$ e& {3 k' B

0 h: A; T# E7 A
8 f1 `, [0 G1 i8 p, M: I9 l5 E" F6 Y; {
- W9 y; {7 Z, U( _/ ]

7 k0 }, J4 e6 P- A% _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-4 00:34 , Processed in 0.098688 second(s), 19 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!