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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码! G6 \9 g: ~& s: U0 G
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);6 {% h# F# W8 C* D4 `, }
  2. $client=array();9 Z  b5 \3 H3 ~; A" e
  3. $serv->on("open",function($serv,$req)use($client){
    0 O6 `& a, k6 i- m
  4.         //echo 'connect'.$req->fd;2 X9 @, {9 T' x* e7 E  B
  5.         $client[]=$req;
    - j! Y, S, \, c/ U8 D1 U$ j
  6.         //var_dump($client);0 M7 O2 O0 U2 |  i
  7.         $serv->push($req->fd,'aa');
    ) X) m$ c3 Y) c5 A: Y1 z
  8. });
    9 m, `$ k4 }! B* M
  9. 2 o8 T' q4 H) U% Z& o' H
  10. $serv->on("message",function($serv,$frame)use ($client){! b- ]: B8 o$ |9 i4 }( O
  11.         /*var_dump($frame->data);
    # u0 f1 N$ I6 I1 E& ~. v: V5 k
  12.         foreach($client as $key =>$val){4 b+ P- W  P! I9 X
  13.                 $serv->push($val->fd,'aa');
    + I, Y% A7 r1 F+ O
  14.         }*/( v( P6 k# U, L7 Y- L* m+ V
  15.         $client=$serv->connection_list();
    ) a/ r# y4 u1 |
  16.         var_dump($client);  a, p4 `9 w; G* A9 s
  17.         foreach($client as $key =>$val){
    : `8 o& G& |# m9 A' b. H
  18.                 if($val!=$frame->fd){! P/ R4 q; d% D0 _. i1 s
  19.                         $serv->push($val,$frame->data);# b8 @" T/ s. C! C
  20.                 }8 B- q7 N+ B2 x4 w
  21.         }
    3 v2 s& @& Z6 {& e7 @; H
  22.         ' ]4 n! d, o7 e8 O" o& E
  23. });
    4 J; n$ W& j5 H. d4 _" ]

  24. 7 y  T* V+ m; N$ a: C
  25. $serv->on("close",function($serv,$fd){( C# J1 e5 h" H- i5 K. {) c
  26.         echo 'close';
    3 C! t7 N9 ~& {- [8 k
  27. });
      U/ m* `2 P7 H9 f; m" \$ B
  28. % ]% ?9 ]" ^0 ?9 B4 \3 Y' U" j* B! J
  29. $serv->start();
    8 d9 }# t  T; p  o
  30. 7 u/ p7 j. b& w0 [5 W* Q
复制代码
主播客户端* U0 z/ q1 _6 P6 Y0 @. `
  1. <!doctype html>9 B' s  V$ M( l
  2. <html>
      \8 x) E8 B7 D' a  L: j# s
  3. <head>
    9 N! p# a: k0 R6 g% x
  4. <meta charset="utf-8">5 I3 v: r4 v4 W- m
  5. ) H4 Z% p" p/ E+ W9 M
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ( K+ \+ S) T4 _6 S
  7. <title>404</title># C) h- p" }1 n1 r% a8 g
  8. <style>2 n" @5 i+ _3 v* o5 C
  9.         body{5 `$ m+ P- \! _7 \! [
  10.                 background-color:#444;2 \, }' Q6 ~8 s" ^6 l
  11.                 font-size:14px;# g3 B2 r) W1 G7 t/ W8 M; ?6 b4 {
  12.         }
    : [/ c# M- i! n; z7 P; c
  13.         h3{
    0 }5 r- a- L' x& {+ p6 q) i
  14.                 font-size:60px;1 t; U  F/ u" }& f4 f" X+ r6 A
  15.                 color:#eee;  R' x: d9 ?! W- Q% m
  16.                 text-align:center;0 i8 `& M4 f6 A6 U
  17.                 padding-top:30px;
    ; [  r, A% n4 W% L; }9 {
  18.                 font-weight:normal;) J& c) I, V' k% b
  19.         }4 p, G* b( t/ e. E  C" H  z
  20. </style>
    1 s4 c; {& @# s) {& f
  21. </head>, M. `: D8 e% i

  22. - y* Z% d2 K2 }" G3 G- K9 a
  23. <body>
    1 l8 P0 v, M, e% \5 W+ \$ `7 E* R0 z- e
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    * q2 }" G2 i3 E
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    + `$ z& E0 F3 J% I) }9 Z
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    6 K( _. _. @7 l( k8 [
  27. <script>4 V4 C( L8 j* C
  28. var video=document.getElementById('video');
    # K( Q6 z% B" v, z; s
  29. var canvas=document.getElementById('canvas');
    4 C# q$ O$ _' S+ z
  30. var canvas2=document.getElementById('canvas2');6 j  E% V- b( ?
  31. var context=canvas.getContext('2d');5 }8 O* W2 P: u1 p% [. ], y$ W6 A. |
  32. var context2=canvas2.getContext('2d');9 D, Z4 _7 J, ^( b* K
  33. function draw(){
    : n5 G" {+ _* {& c# K3 I8 E' J
  34.         context.drawImage(video,0,0,400,400);
    ! b+ ]0 l% r/ r/ m# u+ @
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));  x) k6 s) ^) Z; [3 G+ ^
  36.         setTimeout(draw,800);
    2 D* q3 K1 y# s
  37. }0 R: P* N; Y9 h6 u2 m: N$ j
  38. : I; E6 G0 A, q' j  |
  39. //客户端跟服务端通讯+ f5 O: i  J2 C
  40. if (window.MozWebSocket); P4 z/ B. l% m1 h
  41. {0 L4 v  D( k, M- `5 ?' e
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    7 k% ^, t9 ^3 m, F1 ~# H
  43. } else
    % ]. I! J+ w3 r. p3 r
  44. {
    , ?5 b, D. L1 y( I
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    * m$ \, @. f" H1 Q
  46. }& B( p3 e8 Z  n  a) B$ u

  47. - ]4 }$ i3 |/ B: T
  48. ws.onopen=function(event){) K9 e9 d: d7 X" H- c- c% t
  49.         alert('连接成功');1 S2 x; O) t/ ~4 q2 h3 S6 [0 W: Z
  50.         ws.binaryType = 'arraybuffer';/ _* _- U  p1 A
  51.         draw();
    * i" O/ v: ?; g8 K. u
  52. }& g6 j4 _+ F$ k2 R( ^: X; K
  53. ws.onmessage=function(event){! C0 u6 R! a4 W$ X/ P: d: I8 J4 t
  54.         //alert(event.data);6 r4 q8 q4 V) \" u% b0 P- {
  55.         //ws.send(event.data+"client");
    ; q, X7 \) x! J! s" n5 i) M
  56.         qrCodeImg = new Image();! U. f- D$ I' F% J- @9 g
  57.         qrCodeImg.src = event.data;
    4 q1 h+ a2 f* B7 k& y( `% B
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    1 V& _% O; X, I7 w: c( m5 c" [
  59.         9 v1 O7 i7 q8 F' q" i1 h
  60. }. S- z) s, G* l+ A7 Y8 \. p0 ]# m% X8 Y
  61. ws.onclose=function(event){
    ( ^! J3 }' `# I4 T3 c
  62.         alert('close');/ j3 J& h& l; P- P! {6 ?1 S0 r
  63. }
    ' `/ H9 G: X8 f0 g8 S# M7 h- ^; t4 d
  64. ws.onerror=function(event){# |+ H% w+ l3 I- S1 f, \$ R
  65.         alert('error');
    8 o- W' r' g" \
  66. }
    * E# K5 ]& ]2 o( s0 f( J
  67. //video,标签模拟视频8 D7 x/ i  J( d/ }

  68. 0 v5 B% c3 e3 L4 e% _& T- y- C
  69. </script>
    ( b& `; u: w" |  J3 {! n
  70. </body>
    2 ?% ]6 v: F8 A6 a5 a
  71. </html>
    0 i# {, G7 R/ f

  72. ) N- n8 X5 e- |4 I% H- z3 W
复制代码
客户端:: \; {$ W- _* k$ z9 c
  1. <html>) o- j6 F# k# G5 e9 ^4 a% m8 e
  2. <head>* B6 H3 k2 q5 n2 o( J0 `4 k
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    3 c: M! i  r( F+ w( k' C  A" E/ \
  4. <title>客户端直播页面</title>, Q; h3 M3 ~* L8 B7 Y5 S4 ]+ C
  5. </head>
    3 O/ _& |$ {+ {. C6 |2 J) N$ Q
  6. <body>
    2 E5 q! |; l+ J& a, X
  7. <img id="receiver" style="width:720px;height:480px">
    % ~, S5 u# P. \3 o4 B, \

  8. ! L0 W6 H0 n9 n. [- ?3 ]6 D
  9. <script type="text/javascript" charset="utf-8">
    . v: u# l7 _7 B/ O# P/ p
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");3 s3 _. E- F% p2 v! S3 K( a+ M$ d
  11. var image = document.getElementById('receiver');- G1 u% t# [/ W' q, @
  12. receiver_socket.onmessage = function(data) {
    - C% M& E* E2 ?" A
  13.         console.log(data.data);% N: `  l& d  g
  14.         image.src = data.data;
    2 ?! Q! r; z' i* t3 d
  15. }' R, Z+ \6 C$ R7 v; u
  16. </script>
    3 Z! n! h2 o, Q! a+ m, U
  17. </body>
    8 m* ]) \- f  {6 r  C# u
  18. </html>
    7 y" {' A4 j$ P8 [% d! p

  19. - z  q  U: U# v& q" w1 R+ ~
复制代码
* q, r. o$ `# C5 O8 ~- w

) t) K$ n$ z- G0 u) V) r- B4 V
) J. x# P$ L& A8 {' W! \0 `1 R' Q$ f6 [0 T6 T

: P- D9 e% O" v7 t
( L$ |) _$ z& ]0 o( O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 04:36 , Processed in 0.110952 second(s), 19 queries .

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