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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
" I: M) r! B( Z# M
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    % J6 T0 D% ?7 j" s
  2. $client=array();) h7 ~% q" g9 d8 A+ T+ w
  3. $serv->on("open",function($serv,$req)use($client){
    0 G3 E' w. M# D3 w
  4.         //echo 'connect'.$req->fd;$ ~2 c: G& }. M& q; m4 {. u& `
  5.         $client[]=$req;
    ! W: r# g+ K' H; W
  6.         //var_dump($client);
    1 e# X3 k8 g& G! e3 K  Y6 [6 |
  7.         $serv->push($req->fd,'aa');
    1 f. ]7 ]3 a& ^" h- X
  8. });3 z9 I4 Y7 T6 S( h' |% p

  9. 8 X* v- S1 Z; v8 Q' x: T5 z8 u
  10. $serv->on("message",function($serv,$frame)use ($client){
    - v: T8 f) z) U, `8 L: l2 x+ K! A
  11.         /*var_dump($frame->data);
    0 c4 X$ Y0 y- p& f* G5 i2 l
  12.         foreach($client as $key =>$val){; P; [5 J( }4 P, N" i
  13.                 $serv->push($val->fd,'aa');, A+ E, l9 q3 o$ r+ {
  14.         }*/
    % t/ n  v4 |6 {% P# g- E) E4 C; Z
  15.         $client=$serv->connection_list();% N$ Q! W% }. B5 j- |+ m
  16.         var_dump($client);/ B+ [# q0 ]2 Z+ W7 h
  17.         foreach($client as $key =>$val){8 O' M9 _# E$ S
  18.                 if($val!=$frame->fd){
    $ c* Z' g" G! k/ o) s0 X4 c
  19.                         $serv->push($val,$frame->data);+ I# V8 u2 Z2 P5 P) ~0 w4 |
  20.                 }8 x% R; B9 u/ K6 b
  21.         }9 I( a$ ^, R* f% Q
  22.         4 i- E0 G' c& G; C' P0 C8 D
  23. });
    + w- m* y% J0 l9 C

  24. ( e$ n1 D' y! h9 L# ?1 M" Y
  25. $serv->on("close",function($serv,$fd){
    0 k- C" ?6 T+ S2 z7 }) i
  26.         echo 'close';
    5 Z9 R# X& B/ h1 R( `8 a
  27. });
    ; B" [$ w+ c7 L- F+ c" q( Q9 p/ `

  28. % x" G$ e: @/ [3 j, o: |
  29. $serv->start();
    3 |- |, U( A+ S* ?: T9 ~

  30. 3 b* ?, p3 {1 L+ Z
复制代码
主播客户端* `0 A# `2 H; o# x& p1 L9 ~
  1. <!doctype html>- F9 ]: C. Q; w7 B% ]5 P& H
  2. <html>
    ' A. A, x- v( l8 F8 b  Q5 Q6 q; r& }
  3. <head>, Z6 _) i! J2 N2 e; Q! P, V
  4. <meta charset="utf-8">  \& y, T4 i) }, C( Q

  5. 2 O# @- X' K" d7 J) K- @
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">- _, |$ R7 t1 c
  7. <title>404</title>( ^' {2 `, {# c+ p" d0 |
  8. <style>: n: j' K% F. A5 t
  9.         body{
    / ?* b, Z+ f+ J2 X) e
  10.                 background-color:#444;
    ; ~5 r: t3 P  `! z4 H
  11.                 font-size:14px;  q& n- }7 I+ r. U7 {
  12.         }3 S  n" k: k# c" z+ k
  13.         h3{
    0 }( ]9 o4 ~; R$ L! X
  14.                 font-size:60px;
    : ~1 K% y) I% b: [
  15.                 color:#eee;
    - P7 H; K) l( u4 S6 F% O
  16.                 text-align:center;/ w+ ~6 R% g! {& X6 Z
  17.                 padding-top:30px;& S! L4 q5 j0 q" [& k% M
  18.                 font-weight:normal;1 \3 t& L3 f) Y  }8 Q2 q
  19.         }. i. f6 m2 \' \0 Z& Y
  20. </style>* ?/ a0 d' b* B3 h% R# ?
  21. </head>
    ; q6 p/ d: H1 t" ?" k9 ^
  22. ; j' O6 H! b' j. J
  23. <body>6 Y2 K7 O. ^( ^* p
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    4 T% m7 e! e& M9 _. [! Z# Z
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    7 e; m; b; [3 E; X/ M" P$ P
  26. <canvas width="400" id="canvas2" height="400" ></canvas>" \/ }4 ~) K9 b' e  x8 H3 A0 ~
  27. <script>
    ' x+ X8 I/ O1 L3 @; M$ x# t. Q
  28. var video=document.getElementById('video');) r  n" Q; t6 ?! ]
  29. var canvas=document.getElementById('canvas');6 ~5 `. x- M  L, q+ Y
  30. var canvas2=document.getElementById('canvas2');1 ]/ I, J/ `! o0 Y
  31. var context=canvas.getContext('2d');
    4 _  ^  ~- p- d5 x/ O# ~4 ~
  32. var context2=canvas2.getContext('2d');
    % p  S( @, V1 ~$ ^4 [5 Y
  33. function draw(){& v" D" }9 N4 x, ^
  34.         context.drawImage(video,0,0,400,400);
    ! q9 ~, U! [& `% |0 Y- K- B
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
      \( Y' l0 V: B( ~9 Q& x8 b( _
  36.         setTimeout(draw,800);. B- p4 j) H( v/ E' u" c
  37. }$ }; B! n3 e6 K2 [- _: r$ |
  38. 2 D% i6 Y0 f' K, W$ C! W
  39. //客户端跟服务端通讯
    : a  u4 Z5 D8 w1 @- Z+ c5 E0 i3 \6 i
  40. if (window.MozWebSocket)) J- \% o7 h0 R! e" |, s
  41. {
    6 h+ X+ o: }  N1 Z
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ( F2 Y& r- F. @$ k5 C$ [
  43. } else6 [7 M0 y: r- P" B! \: q% J" [
  44. {9 h1 v5 G6 u8 Z* B! U/ j3 {
  45.         ws = new WebSocket("ws://182.61.42.187:9501");7 }6 E& y1 l( n  {/ i! X8 M7 d$ Z6 p
  46. }
    1 d4 \/ D* S6 n# E% x
  47. 7 n6 c0 H6 N  R0 ^* Y
  48. ws.onopen=function(event){) J8 c  A& p7 ~0 C! S1 b9 ^
  49.         alert('连接成功');
    / |8 \" r9 o( R* T! e3 k6 I0 b+ m
  50.         ws.binaryType = 'arraybuffer';
    % n% Y5 K; m6 V" Q; m( T
  51.         draw();
    / T" E' ^2 A% @9 [3 ]! t
  52. }/ q- x8 R# }8 x0 A1 E
  53. ws.onmessage=function(event){. l$ g6 r. b. E! V5 Z
  54.         //alert(event.data);& w8 }6 v7 P- [8 f1 O
  55.         //ws.send(event.data+"client");
    5 P* _5 ^4 C! L5 ?  s
  56.         qrCodeImg = new Image();
    8 Q, j. V8 v) A) ?' v
  57.         qrCodeImg.src = event.data;& a$ }; l( n# Y7 A
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
      _  K* `7 m5 {% d+ t) ^+ h
  59.         
    : W6 E% b+ ~, @3 d8 \4 I( W, c
  60. }
    7 v0 o! W* u% m! Q" Q( r$ Z, s0 O
  61. ws.onclose=function(event){
    - L7 O# ?" R% z8 X1 s9 _* a2 ~
  62.         alert('close');
    # f" R- M& _% H- X- A& U
  63. }
    ) V! Q7 n$ y- p! p% Y8 F- M
  64. ws.onerror=function(event){
    : F+ v: @2 K& ~" R2 D7 q
  65.         alert('error');+ {4 h$ D% z, ~- \* k* ?
  66. }
      u. i6 U5 n5 r/ V% v) v
  67. //video,标签模拟视频# t  P: d- |, Y/ p+ q
  68. 4 Q& F# |* D  X( c- z5 a
  69. </script>/ a0 C  P. t+ c
  70. </body>" D: B' z  B& S- w) q; v/ C
  71. </html>1 U: d, z3 A% N3 h" I0 C4 u/ q9 t2 g9 b

  72. 5 x4 j/ u5 ]' H
复制代码
客户端:
/ O/ Q8 d' ^# \/ w( m
  1. <html>1 [2 D' W9 q) g& A% U$ w
  2. <head>8 y: x) \! s1 k( @$ |- k; y5 v
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    4 G  I% E5 v3 V2 q
  4. <title>客户端直播页面</title>$ j8 S; ^6 g  x+ ^3 X
  5. </head>
    - W  h) X) n# A7 V, r9 ~
  6. <body>9 H- w" k9 v& F& [3 s8 i, c5 }
  7. <img id="receiver" style="width:720px;height:480px">
    0 j6 U3 d& ~3 d8 T) i

  8. % ?7 Q+ S% l5 J1 n
  9. <script type="text/javascript" charset="utf-8">
    % ]( ^( }5 ]) x6 e- t$ |
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    ) {/ e2 Y( Q4 q1 g) D: r; A
  11. var image = document.getElementById('receiver');
    " W0 L  p: d0 x9 i: [% o
  12. receiver_socket.onmessage = function(data) {/ S$ a- z4 H( z* |* {1 L
  13.         console.log(data.data);
      D" Y$ Q) t0 W: o
  14.         image.src = data.data;1 a- ~9 r* d4 f( {2 H) R5 l
  15. }8 o3 c2 A! }) Q4 S) ~4 j$ S' D
  16. </script>- c5 |1 ^8 u2 ~1 \; Z% w0 `0 U
  17. </body>% f8 c3 D* x4 @4 f
  18. </html>
    2 d3 U* R0 ~* m& g! t8 o

  19. 0 d' f' H# `# p
复制代码
9 t2 Q2 g  x7 Y- I

# `" S* ~9 k8 h3 Z7 P
, c: N- c' h6 h0 w0 X# s/ c4 I$ E8 J7 t/ f4 N9 k/ [

, y' q& M& ^: C2 Q2 T8 n1 i; |3 f8 s: u; E' ^* B' a6 M5 }6 t6 |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 00:17 , Processed in 0.054962 second(s), 20 queries .

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