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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
* |9 O$ p# K4 s
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);, {* A2 ~7 C6 [/ j3 q$ R
  2. $client=array();
    ) y3 O% t+ Q( `, Z# y8 F
  3. $serv->on("open",function($serv,$req)use($client){
    % d1 |4 p. c. {* v
  4.         //echo 'connect'.$req->fd;$ q0 I$ R9 h& Q! D% \2 O: C/ U; b
  5.         $client[]=$req;
    % c5 u/ L8 Z1 C6 E6 Y- g
  6.         //var_dump($client);6 o1 M% G6 {* n4 z) t
  7.         $serv->push($req->fd,'aa');
    % I0 t9 f4 p. X/ e) |  m' R
  8. });
    / T% |" s; {. v

  9. 1 g& u" z( A$ D/ @
  10. $serv->on("message",function($serv,$frame)use ($client){6 p4 ~* c+ c# E4 D3 D
  11.         /*var_dump($frame->data);
    ' i9 A9 c0 c" J% K* j
  12.         foreach($client as $key =>$val){# s' V. O; A6 _& @$ }9 O7 i0 I( r
  13.                 $serv->push($val->fd,'aa');" H9 ^" l# Y$ |+ Z3 |
  14.         }*/
    5 s0 u. L; W, n: U& U  _
  15.         $client=$serv->connection_list();( J" ]1 Y8 \4 n6 Q, n5 ?0 [
  16.         var_dump($client);+ N4 S( k. A* ]! l! ^$ ~& G$ P
  17.         foreach($client as $key =>$val){
    / {) P  u: B( f* P# b
  18.                 if($val!=$frame->fd){( i( ?, ~* J6 @5 C' E
  19.                         $serv->push($val,$frame->data);6 \" |& C& O0 j, H
  20.                 }! N( _- g0 _* m  w- h
  21.         }
    ! K0 P  n0 O: l& l0 ~, I
  22.         
    ' d2 m1 L) V% {" c; H1 m, w" Z
  23. });
    ' K6 S9 x& K0 ^/ {, |

  24. , q/ U2 n# W0 D  Q# b  }5 ^! n
  25. $serv->on("close",function($serv,$fd){
    9 }2 [8 R, T% D5 r0 [
  26.         echo 'close';' g8 ^$ o9 f3 H) {: W/ B$ v
  27. });, I& H" x' P& @# T' p" |
  28. % I, [& N. O3 E; c  Q! L
  29. $serv->start();
    6 a4 ?: [" [/ f3 J/ T
  30. ( p9 r0 g4 Z4 [  t) z
复制代码
主播客户端2 n6 K9 R( q: f0 {8 K' O2 ?
  1. <!doctype html>
    ( \4 M9 R+ ^3 ~1 n# Q6 R- U
  2. <html>
    / o2 U9 {6 X8 s- K5 Z6 p5 r
  3. <head>) S& D' D/ L3 F
  4. <meta charset="utf-8">0 {) x4 Y& d  g2 s

  5.   T' @; I5 D7 M1 m0 Q
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">+ T+ i; W) `2 }* `9 c6 V+ K
  7. <title>404</title>
    ; }4 H1 r( [0 \1 f3 C9 \
  8. <style>
    0 m/ q/ [. }9 v% O
  9.         body{
    4 o. z) I7 \* j
  10.                 background-color:#444;
    $ T$ Q& R$ m6 z$ I- B
  11.                 font-size:14px;4 R( R- b8 k' R8 v- u3 y0 g
  12.         }
    2 {% t- B  h7 l' y. c
  13.         h3{
    * g7 G6 D! {7 l2 M
  14.                 font-size:60px;
    * {6 R: @  w3 X
  15.                 color:#eee;8 |' x9 }* L* s4 v' n
  16.                 text-align:center;8 g8 X! y$ n$ B
  17.                 padding-top:30px;+ p/ ~$ N- H% [  R7 W  W: S7 J
  18.                 font-weight:normal;% L" O! X1 v0 N, Q+ S- l
  19.         }
    % r$ d" J& G/ o1 P
  20. </style>/ c5 Q3 k: ^" S! v4 m4 C
  21. </head>
    3 u0 Z# ?: _( A4 Q, @

  22. 7 s. g* V9 n! F
  23. <body>; ]! G0 o! Z0 e( q1 M* g
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>) \  f4 e4 q1 n! Z" u
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>4 n6 Q, h& |8 g: X$ {8 ]
  26. <canvas width="400" id="canvas2" height="400" ></canvas>! c: b. [) t! m
  27. <script>
    1 V4 J( o6 G4 Q7 `/ k
  28. var video=document.getElementById('video');+ {* d; b+ D; K7 T4 y- B
  29. var canvas=document.getElementById('canvas');
    7 R0 Z& h- Y" w6 ]. a. p* I
  30. var canvas2=document.getElementById('canvas2');
    $ q7 T7 `; Z7 Y1 K! c
  31. var context=canvas.getContext('2d');1 ]9 h. M/ h! o
  32. var context2=canvas2.getContext('2d');; b6 u* y3 V5 J  `) T$ N; E
  33. function draw(){# A" l' B) T7 q7 r, c
  34.         context.drawImage(video,0,0,400,400);
    - X. ]  o. i' ^3 g/ Q
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ' w# c& B; B. {7 V
  36.         setTimeout(draw,800);8 }/ Z( ^2 M& v- T! Z  u
  37. }# Q6 W6 f% ~4 f9 ^  Z" {
  38. 3 V8 R+ P+ E. K2 A
  39. //客户端跟服务端通讯; V- a+ _( Q2 `! X, I  u
  40. if (window.MozWebSocket)
    / J$ ~& D# d: V! F. V
  41. {
    # G. A! J3 i0 a1 d! h, F
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");# S5 k+ |& _% I
  43. } else
    / b6 p4 Q* y. j% Z
  44. {
    ; v, k/ r7 o/ n" c/ A  y
  45.         ws = new WebSocket("ws://182.61.42.187:9501");# H$ |) C0 P1 y" o
  46. }
    + w; P* U9 M& a. Y, g. Z

  47. 7 _1 Q1 v- N: I/ J) G
  48. ws.onopen=function(event){
    4 w! r" q2 f! q1 A2 J
  49.         alert('连接成功');1 h7 D2 u/ R6 t& z  p" a
  50.         ws.binaryType = 'arraybuffer';
    - x& T# O2 Y8 n, s! p7 r) `
  51.         draw();
    4 W2 `2 b6 @. \! K0 W$ q! E
  52. }* o$ S+ \& n1 x1 w' A
  53. ws.onmessage=function(event){
    " x; x5 n. D3 {6 ~
  54.         //alert(event.data);' R; r: b) A1 C
  55.         //ws.send(event.data+"client");
    , u1 t8 E' _0 M& c6 V/ @6 j1 D
  56.         qrCodeImg = new Image();! A4 |  l  y* o
  57.         qrCodeImg.src = event.data;
    , K: J9 \5 V) T8 {4 Q" H
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);2 A) E* [/ s. l4 J2 `
  59.         0 ~! {) [. g: L
  60. }
    $ R: t, Y4 T/ m5 i
  61. ws.onclose=function(event){
    ( U! T/ G; a, j( [: X+ g7 m( {" A+ u
  62.         alert('close');
    0 v$ q; z9 h  K6 b  e
  63. }) I/ [: ^# F! h3 p; j9 G
  64. ws.onerror=function(event){
    4 @- M, f5 y+ Q8 Q" a
  65.         alert('error');& G0 J4 P& R2 S) d
  66. }
    # o# k, o) e' n1 D
  67. //video,标签模拟视频
    : ~. Y3 t+ E- w0 G! d6 z; n7 m* h5 c4 H

  68.   G6 j- u2 a7 Q: R* R0 {
  69. </script>
    ( e& F' v* n8 K0 S
  70. </body>
    + Q5 p0 L! i. S% h( I8 a# j* b
  71. </html>+ I+ [! T' J% Q" n& K: l5 Q8 ?0 G/ {

  72. 1 f& I3 m' k: ]2 k
复制代码
客户端:3 T- k' n! Z# s0 G
  1. <html>
    - J* w: ^/ W) Q
  2. <head>. H) v- d/ G0 V2 w
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8"># s; j# ^4 j# x6 w. O6 [
  4. <title>客户端直播页面</title>
    9 Z7 b5 `2 a2 s3 ~0 _+ u! f' h$ Y
  5. </head>
    . O) l4 C. r; j- x1 U7 j
  6. <body>! s* h1 \$ w, w4 k: `
  7. <img id="receiver" style="width:720px;height:480px">
    * J( [+ A! q$ U8 R

  8. , e2 i! p) h+ e
  9. <script type="text/javascript" charset="utf-8">6 h$ l1 V5 N8 K5 J
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    # r! R$ F; v0 Q- v; U% a$ E
  11. var image = document.getElementById('receiver');
    , r6 N3 b7 G0 ?" X+ S
  12. receiver_socket.onmessage = function(data) {: c: P/ y9 ]- r& G
  13.         console.log(data.data);1 v4 ?& \, _2 e" T# f5 Q. L7 I% J  p
  14.         image.src = data.data;
    ( `1 ]7 g: d$ x* b
  15. }3 o7 L0 j/ A2 \0 D6 Z& j5 M
  16. </script>: b5 k2 t, \( L
  17. </body>5 d9 c) _) \: r: |7 H- z2 Q1 ?4 S
  18. </html>/ M& s5 `" D- }
  19. 9 b9 ~. j9 `. \! y4 p
复制代码

% p* j4 _$ d7 m% [( n3 M& r  @, b4 _) K
( m7 u7 R4 d1 F5 m
( ?! [% t) }  k9 C- ^4 r& S

) X2 _1 W6 x0 O* S& F% f$ k2 ?+ U1 O& C( R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 07:05 , Processed in 0.056259 second(s), 19 queries .

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