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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
0 R+ B4 m& \# x* N6 N5 H& c6 P0 ]* m
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);+ V! Q7 Y) w' U* W0 I; ^
  2. $client=array();: G8 O: m3 ~% B( v. e' D2 I
  3. $serv->on("open",function($serv,$req)use($client){, z6 x7 ^( r# g0 K4 f9 X
  4.         //echo 'connect'.$req->fd;; B. K; N9 ~3 {0 {
  5.         $client[]=$req;
    3 J" M0 B: ]% O$ U/ B# o
  6.         //var_dump($client);6 Y. n6 r5 c' W
  7.         $serv->push($req->fd,'aa');
    - l, @& [" N+ M. R* u' z& h
  8. });9 {& g; i( H7 t2 Q9 _5 k

  9. % T- o( X7 J8 p  A; R6 H
  10. $serv->on("message",function($serv,$frame)use ($client){
    , w) Q) K: j  Q) w8 G+ o- p
  11.         /*var_dump($frame->data);. c: ^  o* l* M
  12.         foreach($client as $key =>$val){
    5 ]& l, q3 K0 s! f! r; b
  13.                 $serv->push($val->fd,'aa');1 f3 I0 k9 y/ k- J7 k2 s& |
  14.         }*/# }7 I8 D( r' V$ m" S* K5 S
  15.         $client=$serv->connection_list();
    * h  t: J7 K: ~
  16.         var_dump($client);
    ! N  D! ^1 t! `. B( n
  17.         foreach($client as $key =>$val){
    ( a! p+ ?) [( `' h: {5 Y
  18.                 if($val!=$frame->fd){0 X; K+ Y, W+ t, n
  19.                         $serv->push($val,$frame->data);
    " N. |+ }7 l" c) C  `6 u5 R
  20.                 }
    2 `2 u3 Q8 r$ l: t' \
  21.         }" \7 B1 g  w/ _: r9 g+ P
  22.         + i; B2 }) x& ~: i" k' L5 P8 a
  23. });
    , }. n2 |( N) \( d7 P

  24. $ ]" s1 J; X- ?
  25. $serv->on("close",function($serv,$fd){
    3 X/ u2 |: n' L/ ^% W/ M8 V
  26.         echo 'close';
    & E# j  L( f8 I1 b* N" ?
  27. });9 g; U; q! ?4 Q) S$ Y: E( X, y

  28. 2 ], D9 _' \5 F6 ]( n! o: `/ D4 ^
  29. $serv->start();
    ; |! f* H+ r( W# D. B5 I6 d

  30. " \: L* X: _, r. D6 }" v
复制代码
主播客户端
5 A6 i1 q- L7 J. k
  1. <!doctype html>
    2 W9 B+ c! B* t0 H
  2. <html>4 ], \1 S4 o1 Y* n  b2 J  K
  3. <head>
    $ O* V$ Y. s* Y2 T  q( I8 t$ Q
  4. <meta charset="utf-8">9 d  a+ j6 m5 B# P. d

  5. 8 K4 Y7 e- N3 Q, S- W4 E
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ' G$ E# V& a( j, E4 I0 s
  7. <title>404</title>
    . w' b/ f: E& Q# F) m/ M
  8. <style>
    / R4 L- f. H5 l  G" V( R* h
  9.         body{
    0 o6 d1 k& X/ r
  10.                 background-color:#444;+ j9 `5 `+ e: x0 |' \3 _  j* h
  11.                 font-size:14px;
    - {) u: Q# `* ~7 J
  12.         }
    , F1 [* r# r5 ^9 ^: C8 O5 U
  13.         h3{
      B- }5 d4 N3 E, L4 j
  14.                 font-size:60px;/ y* E  z: F' }) h
  15.                 color:#eee;$ a( w( z1 N6 v+ @* o
  16.                 text-align:center;0 k9 ~, r+ z/ e, o# M  P8 J& _" d
  17.                 padding-top:30px;  m, Z% F9 _+ ]! ^# b8 A; Y. _/ ^3 `
  18.                 font-weight:normal;5 a" ?$ N4 [# V) X7 h
  19.         }
    $ r* R. q, Q0 G0 b7 f
  20. </style>
    5 m- s" e# A7 c) ~+ e. Q
  21. </head>) {6 \5 H! W& P' d

  22. : [6 y3 ~1 O5 t# m8 l' w
  23. <body>1 D% ?  k0 M3 Z. d+ ?7 J- h/ G5 C5 G8 ~
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>1 N, [" a% @/ v. b& E% n+ b
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>( ~  m7 `3 Y' z1 o5 J
  26. <canvas width="400" id="canvas2" height="400" ></canvas>0 `8 J1 Q* v2 H& }9 A7 C$ W
  27. <script>: _6 p" b# s% V0 R% K
  28. var video=document.getElementById('video');6 b5 e: c! R, y  B4 r+ B8 p/ G  q5 U
  29. var canvas=document.getElementById('canvas');
    0 g" Q; }$ N! N( [) ]+ D" @! `
  30. var canvas2=document.getElementById('canvas2');% E3 O% g: {3 b7 W4 B
  31. var context=canvas.getContext('2d');: ]8 D( V% O& N5 Y
  32. var context2=canvas2.getContext('2d');
    ; H; L3 w' O8 g$ y$ v% V
  33. function draw(){  W/ {. D& B/ o8 r' l, d
  34.         context.drawImage(video,0,0,400,400);8 j* w$ Y7 W% V
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    : j: t/ F' N) o. _5 _: E
  36.         setTimeout(draw,800);7 v' s. Q5 n! q1 ?6 z
  37. }% W+ A0 [) i, a

  38. 4 s( y1 D6 h# @
  39. //客户端跟服务端通讯
    " `+ g! y8 x* c$ |8 E
  40. if (window.MozWebSocket)
    ) J5 q$ B; }3 J# T0 L5 H6 ]
  41. {
    ' Z+ P; E9 K  Q4 K# }
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    + o6 u: N% ]/ }% `' ^2 }4 u! O# J( a7 r
  43. } else1 \4 r+ [9 \) f" D" M! x) A
  44. {8 A9 `3 |7 M  I6 N. t* }& j* x# s' J5 r
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    2 J3 n, p9 O; L1 ?0 ~
  46. }
    + I% P6 H2 l4 S3 V, x: e+ F
  47. ; a, ~* t. O1 Y: E; X3 E
  48. ws.onopen=function(event){9 H3 c  `: D' a( ~3 }0 w  S
  49.         alert('连接成功');
    8 t8 Z2 }# E7 \, |0 h/ D
  50.         ws.binaryType = 'arraybuffer';  ^1 G/ F( Y. Q9 b% w" U7 k
  51.         draw();
    ( v4 I3 Y, K* p, f+ v! z* U5 v
  52. }  b% w( T9 k% b, ]2 q: N
  53. ws.onmessage=function(event){8 D0 |0 q9 t) {  T1 c5 i
  54.         //alert(event.data);
    8 @& L7 e" v) L
  55.         //ws.send(event.data+"client");
    8 |! W8 X/ C$ y. Q; t* s2 ^
  56.         qrCodeImg = new Image();
    6 j! H5 K# S) ?0 K" t
  57.         qrCodeImg.src = event.data;" m( Q8 L+ ?3 J& o
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);) H) s5 e* {! V: }$ Q- p
  59.         
    % z! d9 i$ F8 p" e: k
  60. }
    " L# P  X- F& {2 D4 ?6 w* a
  61. ws.onclose=function(event){
      N! [, x! ?; s' q. Q* v
  62.         alert('close');
    6 L  X  A* s/ [
  63. }
    - J5 r/ P' g9 R& l1 `( f2 o% Z0 s( h
  64. ws.onerror=function(event){
    & `  ?. i+ E' B; w) ~  Z
  65.         alert('error');" m' t- _; g  y3 ?% D
  66. }% V- z% I! C1 Y: Z; b7 _( ^& Z
  67. //video,标签模拟视频
    6 [% N% c9 G( G2 v$ |
  68. / j3 S, d, M1 s% l8 z+ n0 n
  69. </script>
    % Q& ~8 q( J) G* ]0 E( D
  70. </body>
    : ~1 V, d5 M: m. f; I( C; g/ Z
  71. </html>6 t" a# d! y+ ~. x

  72. : s5 F0 f# P$ f6 S+ M3 v) O
复制代码
客户端:
9 [' _. }6 \) y+ k
  1. <html>
    ; L  N# o* Y7 S' _+ \
  2. <head>  m0 c  ]7 ~4 @
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ! C  c4 i+ e+ g  x& K+ I
  4. <title>客户端直播页面</title>8 T* k% h8 v! {, Y6 {* K/ Z
  5. </head>
    0 }6 o8 a3 ?: p4 I
  6. <body># }8 w! h4 P( R! M; `! Q! q
  7. <img id="receiver" style="width:720px;height:480px">0 Y# a, ?3 ]* X! G( s

  8. $ L7 o7 H  g1 Z3 y2 s) Z# v+ W
  9. <script type="text/javascript" charset="utf-8">
    " x2 q. {0 ~* e! v. G8 J
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");; {5 \4 }9 h9 j
  11. var image = document.getElementById('receiver');
    " b5 a! S) m. p2 H
  12. receiver_socket.onmessage = function(data) {
    % Y% \, ^/ K2 L
  13.         console.log(data.data);, B# O* E' G6 ^1 F3 v
  14.         image.src = data.data;4 P# T" i' e  A' y0 |% t
  15. }9 z& M0 C1 U/ b4 T
  16. </script>
    " `3 s- }, M9 ?- N0 B; D8 l
  17. </body>
    6 s% b/ H& f& F3 C4 E
  18. </html>
    2 b; C! i% l4 B( g% l- J) V* }

  19. 3 X  s1 s& W* Y7 D# x. [6 `- w
复制代码

0 A4 s/ ~! J/ g" V! N4 ^! n/ d5 |: ?/ s
  |  B5 }3 N) l6 M7 @9 r+ a& _

1 ^( N0 V) E* j; k: [6 J& a1 M6 F- a$ U" s6 }$ p
  A8 V0 H8 t0 z6 }$ M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:32 , Processed in 0.055180 second(s), 19 queries .

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