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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
4 i# Y& y" d7 ~# L7 D# D1 g6 l8 c
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);6 M5 L* P0 M& Y. ~" u
  2. $client=array();5 o  w4 l& h6 Y- w3 A- W! i
  3. $serv->on("open",function($serv,$req)use($client){- Q$ D$ B& u0 I7 a0 m1 J
  4.         //echo 'connect'.$req->fd;1 O4 b/ B3 I, B. W$ [7 t
  5.         $client[]=$req;- G& U) c* l6 H9 [3 q
  6.         //var_dump($client);
    2 y/ q% C  F( {, }
  7.         $serv->push($req->fd,'aa');6 p3 d+ P: l2 }' F' \; o$ V
  8. });$ v1 t0 L. I  r$ R

  9. " ]5 Y" V: {: v
  10. $serv->on("message",function($serv,$frame)use ($client){
    6 z2 s' K$ e8 N( ^, }
  11.         /*var_dump($frame->data);
    0 U$ X: U3 R/ s  ]% Y( a% \
  12.         foreach($client as $key =>$val){
    / V) U5 X1 |/ z+ M2 P
  13.                 $serv->push($val->fd,'aa');" @  K, P8 d) O2 @6 q4 C! C0 N
  14.         }*/
    6 ?' c$ D5 c7 D1 k
  15.         $client=$serv->connection_list();2 @5 p8 {1 m8 m. }) g8 G
  16.         var_dump($client);
    ) z6 ?; N3 ]9 x6 x# n
  17.         foreach($client as $key =>$val){% F9 \- n* X3 ]* V
  18.                 if($val!=$frame->fd){" B6 P9 {' o, J6 C/ ~( [
  19.                         $serv->push($val,$frame->data);; ^+ l* G; M; C
  20.                 }
    . M7 r8 y  ~2 T% Q# O
  21.         }
    ) f: Z1 O# C, W& _
  22.         
    1 n3 h: o; {& c) U! s
  23. });
    8 H8 ]: L- S- q; F3 a

  24. * Y+ U" \3 Y& f% ~
  25. $serv->on("close",function($serv,$fd){
    7 T# q: L7 E! }$ p8 O0 V
  26.         echo 'close';
    5 o2 T9 N9 s6 g& ]- w# J
  27. });9 A% M& T( Y0 Q2 ^; x/ w

  28. + }# Z! d: b' f4 B8 f
  29. $serv->start();( e/ }7 [& C: e- z( s" ?

  30. 0 x& W! x4 Y, }! C- ~! j( j* N4 G
复制代码
主播客户端
* Y. I$ W0 K  f4 G. \& g5 `6 P
  1. <!doctype html>" M0 j- r, q1 }3 o0 \
  2. <html>
    : c; b( y% B, l" V2 O
  3. <head>
    4 d/ g# ^% L, v: l3 Y& _: Q6 ]; V
  4. <meta charset="utf-8">: r" Q, l3 C( h$ x. o' ], r
  5.   [, e2 i3 Y. y6 i
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    . f6 _; }: K# l+ B6 ?
  7. <title>404</title>
    4 ?+ B1 O. g/ r' T& [! R( s$ K
  8. <style>1 k) n  r. W- `& k5 a2 ~8 n
  9.         body{
    # R9 {+ Y  u* M/ r
  10.                 background-color:#444;
    . I3 U8 c/ {6 b  ]% Y
  11.                 font-size:14px;. S* p4 B% X$ |# D' P0 ~
  12.         }
    9 [% I$ H  @% Y  P8 T9 S
  13.         h3{, ~. B' z$ [, z! i
  14.                 font-size:60px;
    6 [% X: e3 y  B) g3 \. Y3 H1 z  w
  15.                 color:#eee;* N; g8 F( q* h/ m
  16.                 text-align:center;# q) [  u; r1 q5 v2 v$ a
  17.                 padding-top:30px;! U& n( f) b+ ^9 F+ r" ~
  18.                 font-weight:normal;4 W' K% o) f# l7 d$ U
  19.         }
    & Q) N- I' V. V) z
  20. </style>; p; ?/ `/ {5 j1 s1 g
  21. </head>7 |( }8 n! b  @9 p4 C

  22.   w+ q( r7 l+ B
  23. <body>
    4 U" j- P- k4 t# F/ ~8 P. L
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>8 i; ~2 Q$ J7 }) ^
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    # D# x, y: q" G9 G5 y: Z$ M
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    4 q& F$ ]0 I1 ?& J2 I
  27. <script>, o$ @' @0 l& n8 b5 D
  28. var video=document.getElementById('video');1 |" v/ U# [, ^4 w8 ^7 P
  29. var canvas=document.getElementById('canvas');
    4 t( C. X7 p; k* Y6 j# I- h
  30. var canvas2=document.getElementById('canvas2');; R9 L8 Q0 U+ a9 E3 Y+ @8 P* B1 W
  31. var context=canvas.getContext('2d');
    % m8 O9 d9 U! j
  32. var context2=canvas2.getContext('2d');, |2 O5 q, ?$ N; K
  33. function draw(){5 H3 U/ u" _: P7 U6 r* y# W
  34.         context.drawImage(video,0,0,400,400);
    & v3 a) E/ a1 j! {* S
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));- O/ D9 M3 R5 B5 ?) ]) n& x
  36.         setTimeout(draw,800);
    7 y, [, ?' ]0 E  K0 \" [
  37. }
    , c7 K' |6 R$ o* d7 l: E  Z% Z
  38. ! Z( W7 w. F* F, m; m; l
  39. //客户端跟服务端通讯9 H: M; o* O7 a6 v$ _; o
  40. if (window.MozWebSocket)# O* S  y5 K6 x
  41. {6 j- M/ B+ N' F  L3 Q
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    $ b5 [0 H1 @( c, J/ [
  43. } else
      Y3 j: K" }5 h1 }
  44. {
    # H  D% w# o% W. c) @0 L3 `# w
  45.         ws = new WebSocket("ws://182.61.42.187:9501");1 F% Y6 b: J1 c- ?% T
  46. }" ^$ a% Z$ q* ?0 p. h7 W  h' g
  47. ; V/ V" O1 u: y+ Z6 @
  48. ws.onopen=function(event){
    6 Z! _; S/ z( V, z! h9 }1 b$ }
  49.         alert('连接成功');; C, y- F2 h2 L: [/ |  A7 E2 M
  50.         ws.binaryType = 'arraybuffer';& d" O9 h8 i3 r+ {& M" K8 J$ }
  51.         draw();: O; ]) l! G6 d) W* W% ?3 t( U
  52. }
    + f" v" M8 L% D; h9 p# p" F
  53. ws.onmessage=function(event){
    4 r; x/ S- n4 o" ?  c3 m* n
  54.         //alert(event.data);
    ; b/ L: R: |# d5 \! c7 W( z+ {# g
  55.         //ws.send(event.data+"client");) b& Q1 W- v; O" P. e7 F
  56.         qrCodeImg = new Image();
    ; @! h$ _% I' S
  57.         qrCodeImg.src = event.data;: z$ n) t' N) z2 e+ p, F3 g
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ) C( o: B* j  B# M3 @2 c
  59.         
    ' h! k' f8 d  }3 c* C6 C! i8 I
  60. }% \* q* s; e+ k+ U! k1 W
  61. ws.onclose=function(event){, o) y7 @/ j0 f& F4 t. j, R# L( \
  62.         alert('close');2 g1 z# a) a0 q0 a" Y" i
  63. }
    . e+ i) D. ]7 l, ^2 `
  64. ws.onerror=function(event){- \2 s) u0 M3 I$ A& d
  65.         alert('error');
    # Y# h, h/ N6 b! E# S0 I
  66. }
    8 A: D. p7 G* |: I. G
  67. //video,标签模拟视频$ g' g. l( h! n/ I% q

  68. / `( r& [( s/ T: i+ {7 ^0 C0 R
  69. </script>
    * ]& y) N3 [; H5 N5 F* [
  70. </body>
    . ~2 t0 a, ?$ F* k- N% k$ H; l+ c( i& h
  71. </html>
    9 n6 i3 J/ F* p) _9 k& }1 ?3 h
  72. ( `6 ?) E9 J/ U1 Q" l5 h3 j/ k
复制代码
客户端:  V: e8 o& ^& w- `# l2 o: z
  1. <html>. @7 w$ e7 [! [: b% J; {1 |
  2. <head>
    ; p+ O# e+ J9 o; K8 ^
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">  e6 c( h! B- p2 @3 L
  4. <title>客户端直播页面</title>7 I7 M' W) ^0 X% ^8 N2 M
  5. </head>6 C' i+ I% r$ Z4 K: @# l
  6. <body>
    0 R/ s1 h' p3 p2 z: Y3 p: O: t* h9 u3 Y
  7. <img id="receiver" style="width:720px;height:480px">6 C4 H  ?5 S) u% Z
  8. & I5 X  @2 i( S- ?( |1 H7 c
  9. <script type="text/javascript" charset="utf-8">7 a; v" h1 C$ D$ y- Q. w9 ]+ g9 h
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");' @. ]2 O* d* f8 s) m$ u
  11. var image = document.getElementById('receiver');
    " f  B4 B/ T& [& g* k9 X! l
  12. receiver_socket.onmessage = function(data) {: i2 z: L8 u# @! z/ L9 O
  13.         console.log(data.data);0 b$ K0 J6 I: \7 K
  14.         image.src = data.data;
    : o5 C9 t; ]" z
  15. }
    ( j; Q: Z3 o* ~# n- O0 e
  16. </script>
    # W: s/ {5 e) Q* ^0 |* o( }! C1 T
  17. </body>
    1 Q9 I7 W; |! R" w: {3 q! _2 Y2 j
  18. </html>0 n5 B1 K: P) |! G

  19. + v" Y2 k, o# |$ J+ ]
复制代码
1 L9 L; U3 k+ [* F. o

& k2 |  V$ Y" {! e( \; H, s5 N- @# p( R( p5 ^2 ^; s: w

* Y6 `% N, H  z, K7 e- L+ W* E9 s* }: h8 B
& |1 k, Y) d% v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 13:04 , Processed in 0.049025 second(s), 20 queries .

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