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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码* T0 P4 R( R( U$ a
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);4 s2 W% q2 Z9 x! j- D! c# j7 f
  2. $client=array();+ R8 A" r7 _* H) N+ c, g8 f" x7 v
  3. $serv->on("open",function($serv,$req)use($client){, b1 L; l8 @0 k, h$ O
  4.         //echo 'connect'.$req->fd;
    5 q# b, B+ }, p0 {1 n. h
  5.         $client[]=$req;
    + _  Z3 S6 R5 X
  6.         //var_dump($client);
    7 q3 f$ {! D! T" H) Q
  7.         $serv->push($req->fd,'aa');
    ! d) a' q  \& Y! E
  8. });
    + n8 Q# \$ o% p

  9. ' O" \- O4 G8 t6 e
  10. $serv->on("message",function($serv,$frame)use ($client){
    5 s0 \9 [# l/ c6 t6 p
  11.         /*var_dump($frame->data);% n6 {- t4 r  R6 r9 [: o/ x1 f
  12.         foreach($client as $key =>$val){; k0 c3 j, L" Z  v% T) I& U
  13.                 $serv->push($val->fd,'aa');+ Q$ ~* @- V3 @* r+ a
  14.         }*/
    3 Y3 p9 E# j+ b- I  I7 ]: r
  15.         $client=$serv->connection_list();# d& p$ n+ Q5 O7 e- I
  16.         var_dump($client);0 B3 j; I: G' k; f; W3 K* `
  17.         foreach($client as $key =>$val){
    " ?  N0 Q6 O3 w. E
  18.                 if($val!=$frame->fd){
      S4 r$ Q" A2 l% H% ]
  19.                         $serv->push($val,$frame->data);6 }4 u/ H" z) @0 w; l' e  F, F* i) v
  20.                 }
    2 F* Z4 C# [4 C: D, v" @
  21.         }
    % S8 L" L% {) o1 G
  22.         3 W- j' J4 c6 l. [* \( A
  23. });
    % p0 L$ [+ c4 m( j$ ~
  24. - A: ~9 K+ t( X0 Y' m. M
  25. $serv->on("close",function($serv,$fd){0 K# X4 |. K- W( |5 k2 V
  26.         echo 'close';
    1 q* L6 \, k$ d# e: a8 j
  27. });
    6 w  H+ N! Y" ]8 h8 d: s$ a
  28. 5 W2 j7 L2 {' N1 v$ ^6 W- k. Y
  29. $serv->start();: }! O( t# v' v" W% [- X4 p. E8 |
  30. " W2 u$ J7 l1 e+ e9 j5 u3 J
复制代码
主播客户端
( T/ I3 X1 E% k% z8 s" t
  1. <!doctype html>! q. {* H6 q/ C( x
  2. <html>
    & e  b& ?4 d: k
  3. <head>
      b& I' z' x, v0 q* g
  4. <meta charset="utf-8">
    # V  t" ~  A0 D: B4 D
  5. 6 }( x5 _  X0 I% L/ j/ _
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    * |6 N% ~, c' X4 k: U4 `& z
  7. <title>404</title>2 K6 y' l. `' I
  8. <style>& H% ]5 f& ]# v! r* t6 L& F7 l) T! A
  9.         body{9 \2 o+ H7 L( n: \: g4 b; ^+ v
  10.                 background-color:#444;# n) B6 L+ R4 w3 Z6 o  K1 N
  11.                 font-size:14px;
    4 Y* G! s$ L- l# _- Q+ A
  12.         }6 h0 C) M9 P6 x
  13.         h3{* F9 {) @9 z8 D4 m
  14.                 font-size:60px;
    + T1 I0 `9 L; ~- G1 \
  15.                 color:#eee;
    ) x2 n1 g7 P  }$ \  q- F
  16.                 text-align:center;0 x, Z- v! l" f) K5 C
  17.                 padding-top:30px;
    ! w8 [* e' @( U+ Q+ d# J' Z5 K
  18.                 font-weight:normal;
    ! S/ C; H( Q. d
  19.         }$ j8 F% f9 o; Z+ F
  20. </style>) k8 L: _2 Q9 k/ P. l
  21. </head>
      n  b3 m1 y. w. A% e5 u

  22. / v8 u8 }* Z3 q, _/ f- q/ S0 L
  23. <body>: s! p+ D4 o, T) l/ W7 k. n9 \
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ' K3 p* i# n' u0 P" @
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    + h+ p- Z; p  r; T" b' W
  26. <canvas width="400" id="canvas2" height="400" ></canvas>% ^& T7 y! N# m" j( ?+ g/ L) z5 I
  27. <script>3 V  b. S/ H" Y% N' v# t/ V
  28. var video=document.getElementById('video');+ Y% _6 V& v( n, j5 k1 a- p
  29. var canvas=document.getElementById('canvas');( i9 Y/ t5 }6 j/ F8 {
  30. var canvas2=document.getElementById('canvas2');& f3 W. W8 E6 w0 L. L, N
  31. var context=canvas.getContext('2d');
    8 t" M3 F/ ^6 G0 `$ F7 J
  32. var context2=canvas2.getContext('2d');0 j/ g- ?: a4 r% |! s
  33. function draw(){- s6 W* _% d* x- m
  34.         context.drawImage(video,0,0,400,400);
    % w# V* q! g9 s; L
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    . l. K6 W: [" I* \7 A& U" s6 C% M5 I
  36.         setTimeout(draw,800);
    * C) R& Y9 c" T$ s4 B+ U1 d. }
  37. }( N' v, `  z; k
  38. 9 g, W% v1 L8 }. F  q
  39. //客户端跟服务端通讯8 C3 C! J/ O$ P% j* ?
  40. if (window.MozWebSocket): \# s+ v) k  b8 C4 Q" y
  41. {( D) X& M4 N! n
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    * _. q7 [' ?5 R  n. R
  43. } else
    . m* W* u9 Q8 }, \* s" B; D
  44. {
    / e! e. S/ }1 y. D  e
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    ) b# E0 ~; o( E/ Q' k. ?, }
  46. }! ~; q2 X6 u! u* X% [
  47. 9 ~+ a7 M$ R6 I5 q
  48. ws.onopen=function(event){6 Q+ o, X& t9 E9 U) }' H/ K1 ]
  49.         alert('连接成功');
    8 P5 v0 a  E9 {# x/ n  I
  50.         ws.binaryType = 'arraybuffer';5 u* P3 o8 M/ Q4 |
  51.         draw();3 x5 A& N8 O# k, \( u3 _( j# b& {
  52. }) d* B6 I, G( Y
  53. ws.onmessage=function(event){
    / Q! U% P; a$ S" h4 R" Y! x$ V: e
  54.         //alert(event.data);
      ?" P5 Z5 X" U4 X
  55.         //ws.send(event.data+"client");1 e- J( e1 V, A& p
  56.         qrCodeImg = new Image();
    6 [( `8 m( H6 ?1 N' u; v4 `
  57.         qrCodeImg.src = event.data;
    7 ]! z. g0 j4 _0 n1 ^! {4 C' r1 @+ L
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);, @# u) N( q$ k3 {$ m& L2 p
  59.         " `6 x" ~* [+ u. C
  60. }
    & @! d( c+ g1 y
  61. ws.onclose=function(event){# L( x, U1 I' e: e$ H9 T
  62.         alert('close');
    / F, y5 m( b8 C- @1 P0 D8 |) K
  63. }
    7 i5 A* y2 w; D
  64. ws.onerror=function(event){/ ~3 b8 L' O1 o
  65.         alert('error');
    3 C& q0 ]" Q+ C7 \6 e
  66. }. B7 G* ]0 B; j5 I7 e
  67. //video,标签模拟视频( t5 w( q* n/ P: ?" z- S" m

  68. 4 p6 n& Y8 `; C6 J& x! F
  69. </script>, M6 j8 M, @9 I$ D/ x7 S
  70. </body>* k0 @9 T: V8 @
  71. </html>2 M- T: @1 s; O5 f1 ~: T/ R
  72.   r8 ?$ n- ~) J  ^1 I$ d8 H
复制代码
客户端:
( J8 O2 ?# v0 T7 {# A* D; ^
  1. <html>/ j/ h; @3 w5 ^4 k! Y
  2. <head>
    3 z2 g" X1 I3 x8 X; ]7 R
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">& f2 b1 F& K( z: P) {2 R
  4. <title>客户端直播页面</title>
    % `3 F2 m6 n5 C3 h, W
  5. </head>) O0 J0 k# ?) v) b0 F' t( ~* O1 Y
  6. <body>  a+ W! e! u/ X  N$ Y# }1 m& g
  7. <img id="receiver" style="width:720px;height:480px">+ O; M: Q1 r; ^; y0 [$ ?+ X
  8. ( G& d$ q, ?! J) q
  9. <script type="text/javascript" charset="utf-8">
    / t# P7 s8 F  x- C" p
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    + t6 i: _: P5 O) k2 Z$ ^& X  [
  11. var image = document.getElementById('receiver');6 z. V, v5 ?4 x* g8 g
  12. receiver_socket.onmessage = function(data) {# T* G" ]% U- N
  13.         console.log(data.data);+ V7 J- Y- Y9 [. f
  14.         image.src = data.data;/ S3 i2 z0 d% z1 F
  15. }
    2 }# w6 H2 Y2 d9 q' @+ S
  16. </script>, E' H9 g) d9 l6 H, Z0 M2 j# `
  17. </body>
    ' i& z( c6 w# V0 V* Q7 a- v: I
  18. </html>
    - g4 l  a* o2 h, C4 J3 x0 k  y& h1 f
  19. / N- p/ G3 }8 G8 z9 _1 U4 s1 C
复制代码

& {7 H6 n' c' l, [, |! Y
2 L. ?: u% e- M4 g! M- R
; ~. d- W* z3 D# T
+ ^$ t1 X/ Q' t/ z
% U0 M/ h( ]7 G- l+ d1 u! N# A1 u2 O; z2 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 18:09 , Processed in 0.065688 second(s), 20 queries .

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