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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15990|回复: 0

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

[复制链接]
发表于 2020-3-29 18:53:53 | 显示全部楼层 |阅读模式
服务器代码
5 S. S5 t: h0 S6 i
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    * @! q3 B5 c" T/ o
  2. $client=array();
    / M* M/ E5 f" g  J2 D1 @) @
  3. $serv->on("open",function($serv,$req)use($client){
    8 ~" n% g. X! J
  4.         //echo 'connect'.$req->fd;
    ! n$ F" c8 c6 ]' e- z$ h
  5.         $client[]=$req;1 K0 {; B5 B) P  _
  6.         //var_dump($client);  K$ h" V! h1 t+ `7 h; @
  7.         $serv->push($req->fd,'aa');9 y$ {6 f, n+ y% L, V
  8. });* Z4 G+ ?* f4 s. h& N, v9 o
  9. ( X! e! ~% @3 M& `6 Z% e" f' a% d8 m
  10. $serv->on("message",function($serv,$frame)use ($client){
    # |# u# c3 k2 K% u
  11.         /*var_dump($frame->data);
    ) j9 N9 Y7 k0 h' {# D
  12.         foreach($client as $key =>$val){: g! E: m9 h6 l9 e: R" ~
  13.                 $serv->push($val->fd,'aa');1 c) M& i' A$ g3 f  u) o
  14.         }*/% o& e" G2 F, Y8 Z7 N# k! t
  15.         $client=$serv->connection_list();5 F+ _8 P0 \/ b+ c! \# I( a7 L
  16.         var_dump($client);
    7 X4 L% P3 k# v$ G/ k
  17.         foreach($client as $key =>$val){
    % a6 d- i8 E+ s- D6 \  m$ F
  18.                 if($val!=$frame->fd){
    ; T6 `, s3 j) C
  19.                         $serv->push($val,$frame->data);4 `" H! r3 Q+ @. m  N- W
  20.                 }
    8 n+ j* |4 o+ v7 x
  21.         }
    8 h% i: d% A+ h: c
  22.         % X# u3 ?; x5 h# J
  23. });
    : m) x# A4 {+ m1 J
  24. # s& R' P* K- @  o  ^
  25. $serv->on("close",function($serv,$fd){5 V( z; o1 I, |* V3 x! J+ Q; |9 @
  26.         echo 'close';
    ' H: {9 D& l4 c
  27. });8 Z% o. X! q, O( w! _; k! F, }  A
  28. 6 M8 V  v9 h- T3 c9 o. Q% \* J
  29. $serv->start();
    0 \9 \1 ?4 B: ^/ |+ x

  30. ; m. K! z9 }, `" n4 c
复制代码
主播客户端1 Y) t3 f4 f, h/ n% _' `" I
  1. <!doctype html>
    ( h& B$ w- t$ ~  B* ~* l7 {
  2. <html>/ b! t$ r& p% Q
  3. <head>& \8 l/ U7 y; U" ~6 a
  4. <meta charset="utf-8">
    % p0 N/ j0 x5 F3 k$ r! D
  5. # B/ u, N1 A; U: k9 ?9 T) o: h
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">4 p: ]# u4 `8 C9 S: A: ]; e
  7. <title>404</title>
    2 r2 h5 _9 v& t2 N4 I" Q1 E% r! X4 E2 J
  8. <style>0 w5 k  B3 f# ^/ x$ @8 q
  9.         body{) D2 B  O% _3 H9 @( Q
  10.                 background-color:#444;7 R! x+ V4 ^1 d# }8 A
  11.                 font-size:14px;; y+ I5 J( U: t9 ~; H# N
  12.         }; ^% A7 `+ z& a: [8 c: x
  13.         h3{
    0 Z+ W& u- P( l0 z/ t
  14.                 font-size:60px;- _5 \8 {% f5 ]! z6 U3 G& l' o' O
  15.                 color:#eee;
    , ^/ Q* ^. ]& M. A
  16.                 text-align:center;
    1 k9 ~* |  p+ G1 N6 ~* B* f5 }
  17.                 padding-top:30px;/ R; X2 z; i) z" x
  18.                 font-weight:normal;& Z9 |0 e* v4 d! t
  19.         }
    4 v- k) ~- c# Z& _1 ?; R
  20. </style>
    " b% t# E) ?; K  Y+ ?/ t3 ^
  21. </head>4 i# @: Q. N1 z# j

  22. 4 q$ o8 T5 N0 s1 p( ^% }7 _, r
  23. <body>
    $ Q# W! w8 L8 r1 {
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>  I9 K0 P* {1 y  b  ?$ Q" e
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    4 Q6 y9 Q  z3 R
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    * e& R% }2 s, E( J
  27. <script>
    , B; n& K+ L! o
  28. var video=document.getElementById('video');
    8 G* |( T0 q8 v8 J! i2 e/ T& T, y
  29. var canvas=document.getElementById('canvas');- _/ R7 `8 {. _
  30. var canvas2=document.getElementById('canvas2');
    1 ]+ M4 V: s: y/ r) C! s7 S( Z- ~6 P5 y; c
  31. var context=canvas.getContext('2d');
    . J/ N) o2 @9 d
  32. var context2=canvas2.getContext('2d');" j/ h. Y2 z) ?2 V% l1 d4 G
  33. function draw(){$ y, c4 i0 `4 x1 M
  34.         context.drawImage(video,0,0,400,400);
    8 U- _$ E$ C. R0 }( X
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    % t& g. r- q  v2 ?7 I$ H  |
  36.         setTimeout(draw,800);
    0 ^1 e* D7 l6 _7 p5 q2 Q/ `( q
  37. }
    / j" c+ ~$ W+ Q; T9 x! `' i' D

  38. ) l; q- r/ D( i( j0 U
  39. //客户端跟服务端通讯0 E( g  U0 h! Z6 b1 C1 H
  40. if (window.MozWebSocket)
    ' \5 p" V( o, R2 J9 B
  41. {1 j" Q+ E7 j5 a! {- \
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");* f* D% g9 V, @( z
  43. } else
    + F& z6 G1 ?0 W
  44. {0 U% v+ r$ Y! \4 C8 S% j
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    6 u, _+ {, H2 S7 Q; K8 I8 q
  46. }
    * [% `2 L+ F# |$ Y2 e+ B4 T

  47. ( ~$ E: n% \" r9 [: ?6 d
  48. ws.onopen=function(event){7 `( W. @" c0 V. d
  49.         alert('连接成功');: y( X2 ]& \$ Y- C: i! S# h
  50.         ws.binaryType = 'arraybuffer';) ^& @3 A, o0 o& X+ J* p
  51.         draw();. n; M1 m6 s9 e) ^' `! z' o0 o
  52. }
    % @4 m3 J) y3 ^# \3 R* h
  53. ws.onmessage=function(event){6 I9 r, l) |9 C1 T8 V' z* a1 Q
  54.         //alert(event.data);! u8 _. Z( x. [$ H) l, ~
  55.         //ws.send(event.data+"client");
    $ h% k* T3 F2 F( d/ F' O3 \
  56.         qrCodeImg = new Image();4 j4 g. J2 I8 K9 s
  57.         qrCodeImg.src = event.data;* }  e% X3 s6 I7 i
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    # R# o/ z  r- O5 j
  59.         
    3 B2 k/ F3 ~; b" i
  60. }
    6 u3 h2 p( Q( c1 D3 L# Y6 M
  61. ws.onclose=function(event){
    % M1 d' V' E( c0 O, {7 v
  62.         alert('close');
    . n! v! G8 d" O( [' A" P
  63. }
    1 N' U) O) k4 `
  64. ws.onerror=function(event){
    " A4 C% n4 i& U7 D. w/ y
  65.         alert('error');
    7 [* ~  D3 c1 Z% i; V3 i. k
  66. }
    - G* ]% x! @9 U4 j/ i! {* Z
  67. //video,标签模拟视频
    ) @+ n" s2 ~1 y1 b. W
  68. / h# k( E, B2 A
  69. </script>3 F. q+ ~* \4 W( r3 B
  70. </body>
    ! e) ~6 }& N! p
  71. </html>
    % c' }7 E  V; Y- r1 M2 k& d9 _2 l; ~

  72. ) g1 N7 L, F# b5 K3 L
复制代码
客户端:
7 h; g  h7 \2 }3 s# z8 i- N, P
  1. <html>1 `3 @, ]9 O+ W* l( K. E: l# e
  2. <head># i+ `! H7 s6 J, h! c; l
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">1 g$ X7 `5 P5 \
  4. <title>客户端直播页面</title>" A' J+ c+ Z$ j) `' t2 {
  5. </head>. z* p2 W2 V/ Y  L( _
  6. <body>% R8 T* Z2 U4 D# t2 ]% e
  7. <img id="receiver" style="width:720px;height:480px">
    . k3 x7 p6 p1 D7 X
  8. " g/ ^( a) x* A+ q" |! y
  9. <script type="text/javascript" charset="utf-8">
    ( g% O; u4 I/ t( [. _1 B5 \
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    0 Y+ n. j$ d7 H7 A4 C
  11. var image = document.getElementById('receiver');9 `) ]0 A- ~* K' h, `* }
  12. receiver_socket.onmessage = function(data) {, t- ]. M. t7 |9 K& o; N7 G
  13.         console.log(data.data);! A5 g) g( x! u% S$ Z
  14.         image.src = data.data;
    " v6 O5 H6 L- f( X0 C
  15. }
    & v' Q( x; W; J1 e: s
  16. </script>
    0 e) _9 y  H; l5 B# F
  17. </body>( n) W" b7 k; x& Q
  18. </html>  H0 J/ {$ @* i

  19. 5 e3 f+ `4 k, s1 {" W
复制代码

, i( k1 ]; F) D+ R: t" }0 f
& L% H/ M3 C4 x5 W8 M" s. t! N3 y% ^, P$ _

0 |  b( w' F( h( U; m6 ]# Y6 Y2 N4 d9 g' O/ }

  |/ h1 M6 Y0 U7 Q- k  I
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-10-10 19:18 , Processed in 0.058491 second(s), 20 queries .

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