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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码% f( B" {. }" g# J2 a' y& _
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);9 ^# M; I3 p) q  y; N5 w
  2. $client=array();7 m- L' S  b5 e. S  n& s
  3. $serv->on("open",function($serv,$req)use($client){$ ^: t8 n! p4 f6 N. r. T
  4.         //echo 'connect'.$req->fd;
    7 ^1 @- `3 |' }4 j
  5.         $client[]=$req;+ k9 F0 l  C% Z
  6.         //var_dump($client);
    % Q, r  }2 c' W, c. t: J
  7.         $serv->push($req->fd,'aa');
    9 X" ?' I. c* O* _3 Y6 `9 P
  8. });( h+ Z9 O" i5 {7 L, J
  9. 5 S, U+ n$ p% G: m) k' S
  10. $serv->on("message",function($serv,$frame)use ($client){3 n$ W1 l) u% s; x( h
  11.         /*var_dump($frame->data);
    7 u$ u: ?. ?( k. Q
  12.         foreach($client as $key =>$val){
    & v8 ^* K3 C) U9 Y' |
  13.                 $serv->push($val->fd,'aa');3 \  L! P5 ?2 ^; W+ j
  14.         }*/- O: n7 r- L6 b! B5 h, X
  15.         $client=$serv->connection_list();
    ' Y1 T2 q& r$ A5 k% Z
  16.         var_dump($client);0 Y" ?2 ]1 H& @) {
  17.         foreach($client as $key =>$val){
    : d) _$ ?7 f4 [% k6 q$ J
  18.                 if($val!=$frame->fd){' V! j4 T& k; H, S# P" v
  19.                         $serv->push($val,$frame->data);
    - x/ N! i6 V/ P0 @. s9 G4 T( t
  20.                 }) @9 E: m* G0 J7 h
  21.         }4 f9 ?) q# K! d  K. W- h% y. R
  22.         
    5 g# p* W- [) F+ u
  23. });
    9 L4 m7 h! a6 J3 x0 o
  24. $ ?; _$ F( J, k# A3 a7 l$ L
  25. $serv->on("close",function($serv,$fd){
    / [$ F% n5 i. _8 L3 C
  26.         echo 'close';
    ( U+ N9 J* l1 u0 r7 c
  27. });
    / d  Z7 t3 V& q9 V3 Y# s2 y1 H

  28. 7 r0 X5 P3 F! A# K; o0 [& H
  29. $serv->start();$ G1 i/ L# `2 F) @9 m3 K

  30. 3 C* Z& q- ]( a/ ?& \- N1 e+ _/ a
复制代码
主播客户端% a3 r+ H& H2 q0 K' |
  1. <!doctype html>
    9 d! x1 I4 r; t& p. g3 ?
  2. <html>
    : F' _5 a* V6 m7 S
  3. <head>2 m; x9 ^( v0 z5 r$ F7 h: e
  4. <meta charset="utf-8">
    1 i5 W" q/ `& N  z" h
  5. " }9 q) O% e' z) Z- ^) d
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">4 b0 b/ e  M3 x0 T$ Y4 Y
  7. <title>404</title>9 l5 `+ ?# G% Y! D9 d( h% C! i' K9 z; J
  8. <style>- S5 N- g9 l6 F  g6 u/ r! H
  9.         body{. d& S- }6 n! J* e
  10.                 background-color:#444;
    0 s8 R' ?4 k% ]- ]: C
  11.                 font-size:14px;  }3 y) k) F6 }% I" M
  12.         }
    % {5 ?+ K# Q- j+ y
  13.         h3{
    , O) A5 k0 Y% R. E% {3 @
  14.                 font-size:60px;7 I. p2 C+ y5 l# y
  15.                 color:#eee;) w, I6 T9 j. R6 T0 h
  16.                 text-align:center;* \5 l( k- `) d  Y& ~2 q: Q' N$ b: Q2 U
  17.                 padding-top:30px;
    5 L0 h( M& g5 q( j$ j# X/ K0 @
  18.                 font-weight:normal;, `/ i' K0 B7 H1 Q
  19.         }
    % _2 e$ n8 S4 l8 Z9 r" F" M  ?
  20. </style>
    " K  F: z4 Z( R5 d5 n& y
  21. </head>
    * `* y, x8 |# `6 m- q0 h' |4 i7 ~
  22. 4 v7 p" f8 H7 v! g* d/ ^3 M, r+ L
  23. <body>
    1 `& }; }* `9 a4 }5 W+ S
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ! J( _0 s) G' \
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    $ e5 m' J" H3 B: z" G' P4 ^
  26. <canvas width="400" id="canvas2" height="400" ></canvas>% j4 K5 B7 t# R' M# G: G. I
  27. <script>* V: j1 {) G+ z! [/ T
  28. var video=document.getElementById('video');$ ^! h8 L9 |$ Z, ?/ O+ ~6 `4 D# d
  29. var canvas=document.getElementById('canvas');! D4 g7 r" o6 L5 e2 P5 x( @
  30. var canvas2=document.getElementById('canvas2');+ M: D: m5 v! @6 x1 V' C, [' }
  31. var context=canvas.getContext('2d');9 m3 b. I0 Z3 P* b) g& Q- T! a) s
  32. var context2=canvas2.getContext('2d');, @5 G# `/ Y! F  k( Q# m$ P( q
  33. function draw(){( A) s8 e0 h: P( g8 U
  34.         context.drawImage(video,0,0,400,400);
    ) `) R. Z+ q4 N0 x0 m5 o
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    4 R; P8 o/ s# }- v
  36.         setTimeout(draw,800);3 D0 B6 o$ E" O
  37. }9 K& ?  ~; ^: I+ ?1 K% ^

  38. 4 t% N  I1 q4 `+ @3 ]/ y5 |% p2 A' g
  39. //客户端跟服务端通讯1 F  l/ y9 k8 v, n* s7 y( Z
  40. if (window.MozWebSocket)
    % E8 `, a8 i% G! K/ k# N9 h
  41. {
    * ~, ~, G& [8 }- M2 o1 Y: ]( h
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    / N# M2 o- l# H0 l
  43. } else
    : Q; \9 d  y+ `% H
  44. {4 w9 ^. l, A: c
  45.         ws = new WebSocket("ws://182.61.42.187:9501");5 h5 D+ R' j7 U9 L; ^( J( t5 l& T
  46. }
    6 z* K5 U. s+ W# `1 a
  47. 1 F! _2 u; o" e3 D7 y4 \+ _" c' g
  48. ws.onopen=function(event){) n! m/ n: k! N
  49.         alert('连接成功');
    6 p$ k! }1 i2 H5 F
  50.         ws.binaryType = 'arraybuffer';. E$ Q$ h9 O8 B7 L
  51.         draw();, v, o# L/ B& g7 }& s
  52. }
    5 \" `. X& H. I8 r
  53. ws.onmessage=function(event){
    : h" a; \3 N7 p. C+ e+ ~
  54.         //alert(event.data);
    7 p2 M2 N! w* [8 F7 a, M* c1 P
  55.         //ws.send(event.data+"client");
    % C& O  ^: N+ r2 G1 a0 q
  56.         qrCodeImg = new Image();* ?+ [2 _( f$ E( j9 @! D. f; T3 w% A
  57.         qrCodeImg.src = event.data;
    6 F+ B  u; y8 a! b7 h
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);8 }' y2 b: ]4 |5 Z) k5 _; f& L
  59.         * r% D2 `& J6 N8 N' A6 D& \
  60. }
    7 b( M) g0 R/ {
  61. ws.onclose=function(event){6 v2 p( k% o, x1 [: {4 f% Z4 m: ^
  62.         alert('close');
    9 q5 t; F$ z* {1 D& s: }7 g+ H, e7 a
  63. }8 C4 y% j  O5 h" I1 ^' f
  64. ws.onerror=function(event){9 |$ x1 [' h2 Z' f4 ]
  65.         alert('error');
    2 r$ {+ Q) ]0 @: `7 h- h& x; {
  66. }
    6 M% x2 c+ J% G8 _3 G* M) m
  67. //video,标签模拟视频% ?/ x! Y: n& W# h+ c
  68. - P# F0 C; _& M9 ?0 e- p
  69. </script>9 L! e( p4 h+ a: I/ n/ v/ j
  70. </body>+ A0 p0 ^" Y- {" h$ O
  71. </html>- L. J  b0 C) m0 M9 J+ m
  72. 5 K. B; G* {6 C- W1 S3 u0 v
复制代码
客户端:% e$ B/ n: q$ l$ l- l' s9 N
  1. <html>
    9 O3 Q; m1 h2 c1 i
  2. <head>
    / o7 Q$ H1 d1 K) B7 v8 O
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">5 ?' u/ g" [) j. V
  4. <title>客户端直播页面</title>- L/ Y6 }) i+ F( v5 e
  5. </head>
    9 \2 R4 Y. y# d6 K  u
  6. <body>& i7 y: a5 {1 P; @
  7. <img id="receiver" style="width:720px;height:480px">& P7 _" c9 O$ ]& r5 I3 c. W* U

  8. ( v7 T; B5 Q+ d  y7 T& W3 t# R
  9. <script type="text/javascript" charset="utf-8">4 Y/ h5 L0 S! C5 t$ o2 q) F0 D/ p
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");" j- n- y/ J5 S+ e. Y
  11. var image = document.getElementById('receiver');+ G1 h- X2 V: j; L$ O
  12. receiver_socket.onmessage = function(data) {
    1 P) \. o6 R; O" R; r/ ~" J
  13.         console.log(data.data);3 w3 ?6 O- w+ y: D- w" W$ T
  14.         image.src = data.data;1 n+ o$ ^: U! |
  15. }  \! J9 s# t+ J4 }4 T
  16. </script>
    % C) |+ e, M5 Z6 s6 M& X4 N* e
  17. </body>
    8 {- j! o$ c! e: t* Y6 w, G
  18. </html>1 i9 ?7 y7 Y) x/ z# K1 u3 _
  19.   ]: s7 ^2 A) R) H, x
复制代码
1 \1 v. |" B# p1 C# S
  I) D5 ]' e. w; |

3 [( n: h( L5 X& T: A" @1 y
0 d: v; m! n) z* g5 J0 n; ~& m2 U; e8 T, f6 ]( j

& _+ y6 z; I* o4 }) R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 20:20 , Processed in 0.053935 second(s), 20 queries .

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