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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码4 m5 L3 v5 s( k! Y0 D) K
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);$ w1 u7 \5 m  y, V# N- ]! e% [
  2. $client=array();
    * z6 v2 C6 n8 J8 {
  3. $serv->on("open",function($serv,$req)use($client){
    - ^6 g  I) e- n  x! g, H: \
  4.         //echo 'connect'.$req->fd;( d& b3 }2 }& d1 u4 X
  5.         $client[]=$req;
    ' I* q# i# M/ T# m$ n" U& V
  6.         //var_dump($client);( @2 J# u* }4 w8 C' \4 ?
  7.         $serv->push($req->fd,'aa');5 P) J( Z/ d2 b
  8. });6 l5 {8 D+ v# m8 F) Q5 j0 p
  9. # M% K  ?1 B) C% B; T4 Y+ P
  10. $serv->on("message",function($serv,$frame)use ($client){4 o: w4 t+ p5 Z* q! q6 z
  11.         /*var_dump($frame->data);6 I+ g, Q" l1 c8 C* J
  12.         foreach($client as $key =>$val){+ x6 c7 y7 V2 Q0 `+ }  u1 z  l
  13.                 $serv->push($val->fd,'aa');
    + o. R6 Z8 I, m2 D0 w% B# ?
  14.         }*/1 ~$ ~' u% o/ A( B, h; |
  15.         $client=$serv->connection_list();( |" k! z  `6 H8 E: }8 e4 B7 D
  16.         var_dump($client);
    * M- [7 i6 D' J; N
  17.         foreach($client as $key =>$val){
    & u2 Z5 o5 Q; X5 Y
  18.                 if($val!=$frame->fd){
    6 {, D0 Z9 o! c: ^& m2 o1 T
  19.                         $serv->push($val,$frame->data);- Y  ]" \( z0 O2 s2 {
  20.                 }
    3 @! B5 B; A+ E$ G/ ]0 n
  21.         }4 {/ z$ Y8 N/ D2 z" z& Y" M; S
  22.         
    7 p9 Y8 z1 Z# u! _5 R& L) Q. P
  23. });, O( W6 R+ H* N- _+ ]
  24. - W8 H5 Q- H  p; V
  25. $serv->on("close",function($serv,$fd){% _. t3 h% @* g' _6 V% F
  26.         echo 'close';
    ' t/ F1 h* {) X% [0 j8 A8 r
  27. });
    - Y1 Z3 T  \$ T2 a1 l# E
  28. # I6 D# Y; W6 r, Z
  29. $serv->start();
    5 R  v; U4 V0 C
  30. 8 C0 G. j' F3 E0 v: ]4 u
复制代码
主播客户端
+ Z, v9 U' ?8 W2 e" O. T+ s
  1. <!doctype html>, v/ ]* p7 {: L! f6 w6 O
  2. <html>+ `+ N0 h- j' t# Y* M
  3. <head>' e- o! M+ A" r4 e' [- u
  4. <meta charset="utf-8">; @8 E7 y( W. g- M. u7 O3 }5 P
  5. % J' X; b9 [) w  t! o: U5 C
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    5 N, c) H& G% @
  7. <title>404</title>7 O/ h; R; Q5 _9 D
  8. <style>7 F2 E/ l/ x9 E4 Z+ y, ?* a
  9.         body{. B+ Z% [0 t+ K4 i. {
  10.                 background-color:#444;
    8 H* Z; _1 }6 _8 }5 z' U+ O
  11.                 font-size:14px;8 \. e0 D9 o3 [. h
  12.         }7 V* v  J! |: c( Q+ a/ D
  13.         h3{+ r- x& g% O3 G" y( }
  14.                 font-size:60px;
    9 B  J1 R  N0 d0 T3 h8 Q, X
  15.                 color:#eee;+ _* ]9 F) k8 @7 t3 i9 b
  16.                 text-align:center;
    3 h, _1 s  J/ w3 o* j2 d/ F
  17.                 padding-top:30px;
    + w. s3 \7 c, Y% e0 P" s9 E+ m
  18.                 font-weight:normal;
    % u' p% H1 ^  g! _; ^) G" r
  19.         }
    + W) v% |$ e7 V- o3 L" g: B( N
  20. </style>
    $ z' k" u1 B% s7 F
  21. </head>1 Z1 ]8 n. G, E) U6 K' q
  22. % K% Y! R" ^# O8 ?: z! u
  23. <body>) x+ n" d; y% E( }1 i; ~
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    8 w8 X+ Q2 B$ N
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>9 a- \5 U7 r, L
  26. <canvas width="400" id="canvas2" height="400" ></canvas>' i5 k5 @, c5 D& v* }" s, Q+ ?' E. C
  27. <script>
    # K& ^9 c) V6 \6 B* y! D$ F: |
  28. var video=document.getElementById('video');8 @5 L4 C5 F* H
  29. var canvas=document.getElementById('canvas');; E6 u2 g' o3 W1 l0 ~  P& B
  30. var canvas2=document.getElementById('canvas2');
    & s; x( B9 Z2 I! e5 ]' }5 V1 e
  31. var context=canvas.getContext('2d');1 k) A# ]4 a7 c: _
  32. var context2=canvas2.getContext('2d');6 G7 B! C5 }5 k  ~- k6 Q- K
  33. function draw(){
    1 S9 E" {* l" r2 K$ z7 R
  34.         context.drawImage(video,0,0,400,400);! e! D- g, I; B& ]) z/ J2 W& f
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));; m1 j6 i4 I/ d; B: s% k
  36.         setTimeout(draw,800);5 S5 E6 ]" Z  W4 ?& n2 u
  37. }
    5 R2 t6 G. ?  z2 |1 \
  38. ! ~! Z' [% n5 J: _
  39. //客户端跟服务端通讯3 t) ~3 D9 D: u4 m  z
  40. if (window.MozWebSocket)6 ^' q" R4 |5 |
  41. {
    3 M" `: `7 @0 D5 y3 X9 h" t
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");7 K# \, R* b4 C- f
  43. } else) n; o; @/ B- c9 P# e5 h5 e
  44. {) E7 r) n% I* g
  45.         ws = new WebSocket("ws://182.61.42.187:9501");# M. i+ l1 \/ @
  46. }& H5 c8 G8 v8 L0 o1 f9 y
  47. 7 J" t1 U, }8 ^% ~( l7 y0 R
  48. ws.onopen=function(event){
    , @3 z# ^' c+ ~& y7 }3 v' f' P
  49.         alert('连接成功');. u* [3 ?9 {6 o; _( ^- _
  50.         ws.binaryType = 'arraybuffer';$ f3 R# _* i8 |+ F
  51.         draw();5 K  t8 o/ h! K* K; U; u
  52. }* z* k; U2 O, A; P: Y+ V( M
  53. ws.onmessage=function(event){
    ! [% q2 m5 H$ v* v* a
  54.         //alert(event.data);  O. k& f* X: ?! W" d) D% r! C
  55.         //ws.send(event.data+"client");8 _6 ~; b( u. G- \, p- a
  56.         qrCodeImg = new Image();
    3 H+ l2 j3 ]( c8 M! O
  57.         qrCodeImg.src = event.data;
    , g9 c# y/ ~9 X
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    + a, r  i, W. R
  59.         2 g( i; o& C' ?9 g
  60. }# ^: g% [  z3 a
  61. ws.onclose=function(event){
      }; P/ Y8 g* M
  62.         alert('close');
    : m' B' H. M* Z* W2 R% o2 D, P+ P
  63. }: ~8 W5 ~' Y+ q
  64. ws.onerror=function(event){1 p% }; I! }+ |3 c9 d
  65.         alert('error');% k# w, r/ O3 k8 Q
  66. }
    6 R+ k6 u. d; Q4 d! |% ?/ W# m
  67. //video,标签模拟视频
    6 w+ n8 u+ `8 V  y

  68. 9 L: c& {9 V2 B6 @+ t% _( t
  69. </script>
    0 ]" K  R+ o9 M7 w( y. Z0 U
  70. </body>
    . t( z8 ~8 i+ A" S4 M, n$ t( a
  71. </html>' h6 e* L( E+ K3 I
  72. ! x6 X& M7 ?- n2 [6 x! c
复制代码
客户端:
7 C/ @" Y) o) u5 U( o: o
  1. <html>& l: i4 i- K1 F$ y  M
  2. <head>5 H9 g" U( v# H$ B* v/ I
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">% a/ w6 g# w" M& @2 b" }
  4. <title>客户端直播页面</title>
    ( B$ h4 E( H% X' _  y" v2 x
  5. </head>
    $ G* C( w. K5 c4 S! G# t
  6. <body>* ]: G: q: ^* N# w6 d3 O  D
  7. <img id="receiver" style="width:720px;height:480px">
    , Z! P) j& c2 i. o3 R+ ?) f
  8. % ]5 f# o0 S- k$ a* K& _8 J( W
  9. <script type="text/javascript" charset="utf-8">9 J) U3 L1 K! W
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");- k5 _+ k- V) E8 Z
  11. var image = document.getElementById('receiver');
    ; Y; |& {& a) {, }  J# u4 w* E
  12. receiver_socket.onmessage = function(data) {* `+ Y# Q' h- @; N
  13.         console.log(data.data);2 {) H% U7 F( b  u/ w
  14.         image.src = data.data;
    $ X) }4 p- i8 R; ~1 m0 r2 Y/ Y! T9 P
  15. }
    7 _) c6 ^/ Z1 U0 H
  16. </script>  N9 }2 l4 G3 k8 z
  17. </body>, Z; t! t% `" j' C$ G  u6 c! R
  18. </html>! S6 t) o0 M2 o/ K/ ~4 ^1 n8 M
  19. - v- q" A4 }% ]! V
复制代码
. q0 C# c# ^5 m" z* h$ ~* l1 v

  M; |8 z1 O$ H  u! L  h* R# D- d8 u# ~/ v$ B) C7 y
& A% y/ K0 K3 Z" s6 y8 U
- j5 I+ H$ s+ t! f7 ~9 Y2 F, i; W% D

; B' }/ g9 X! U5 V! ?" W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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