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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码4 B  T9 Z" O2 Z4 F2 F) p# e
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);: i% y. I3 l: T% L; [  o
  2. $client=array();" H* @3 T) n( r3 ~; l( @& q' o
  3. $serv->on("open",function($serv,$req)use($client){: x3 j" U4 w. M5 [/ ~! s& j3 V
  4.         //echo 'connect'.$req->fd;5 ]6 `# h  ]3 n+ [
  5.         $client[]=$req;5 ]  R3 j5 I2 B, z/ C: b6 b$ y
  6.         //var_dump($client);
    + P2 M5 R) L2 C8 i( Y1 k
  7.         $serv->push($req->fd,'aa');
    ! [+ N) e( \. \+ \& Q  f  D3 b
  8. });& Q  R  }# F4 ^$ J" R

  9. - _  h& x( b0 q( t
  10. $serv->on("message",function($serv,$frame)use ($client){
    " I- s4 X, R7 ^# B; Q5 j4 Z
  11.         /*var_dump($frame->data);9 k- b/ E2 c" z8 L
  12.         foreach($client as $key =>$val){
    . d* v8 Y5 E7 ^" B
  13.                 $serv->push($val->fd,'aa');$ d; F% s. o% Q% y- p/ V
  14.         }*/
    6 J- X' e7 g, b0 Y' I
  15.         $client=$serv->connection_list();2 y% e8 ~# L4 n6 [' G
  16.         var_dump($client);2 B8 ~2 h1 X# u. b
  17.         foreach($client as $key =>$val){
    5 B! ?" Y8 [5 I2 E9 {4 z
  18.                 if($val!=$frame->fd){
    ' F% R& r0 w1 f) |* P6 x
  19.                         $serv->push($val,$frame->data);: D: w: ?$ k5 ?- C6 O0 K
  20.                 }- h( R4 [7 P* \) c
  21.         }
    ! o7 _& ?2 r. T: N
  22.           a+ q4 Z; m* i2 V/ ^
  23. });5 P% q2 ^5 l, i, x* |( Y; U5 ?" U5 s/ K

  24. 7 D' s' I8 z+ L
  25. $serv->on("close",function($serv,$fd){& S- n4 b6 v( O
  26.         echo 'close';0 K4 K6 R* T4 b" j0 b
  27. });9 L" D9 u% O5 D- \3 t* G. g

  28. 6 {* W/ u# m2 Y- k! n0 m& d
  29. $serv->start();$ ~" [. m7 C9 {
  30. . S' Z. q5 [3 X. o9 `# ^
复制代码
主播客户端% u* s/ k& a: [2 X' f
  1. <!doctype html>1 ?4 }5 U: \7 F$ M
  2. <html>& V5 u8 s8 T" `: k$ v
  3. <head>, O* o9 h, w8 R% _- w' H
  4. <meta charset="utf-8">
    4 @# E7 I( U% h5 v
  5. 3 L  \4 U* C  o
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    1 t) M1 j8 y4 `3 y
  7. <title>404</title>  @& ^: L  P+ W7 X
  8. <style>
    " p0 `' L5 H6 b# w
  9.         body{! j! u& z, L* q6 m6 c5 D
  10.                 background-color:#444;
    3 ^0 p- `& F% s) ?. F
  11.                 font-size:14px;, p+ B% J. p4 v; q
  12.         }
    7 w. _! o- P$ e9 o
  13.         h3{1 V: o1 N/ m8 r. N$ L9 L$ _
  14.                 font-size:60px;: u6 g% Q7 {; C# ?1 z9 X
  15.                 color:#eee;
    ( [: G1 V/ E; H) j
  16.                 text-align:center;
    1 |6 X" N9 p4 l! f: Z+ |
  17.                 padding-top:30px;* Y6 z# B( f. ?
  18.                 font-weight:normal;6 X/ c" n7 f6 W& `3 o1 ?
  19.         }
    0 T# A& h; m0 Z! O/ J! `
  20. </style>: j! E( K1 ~8 i) K( o! Y- Z$ e2 p( L
  21. </head>. b* {. [2 G& G0 \/ t
  22. % k- v* q0 h' U) |+ S
  23. <body>) z" o3 ]4 t8 `* B3 g3 x9 ^/ K
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    / v& I8 |* U8 }& f
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    # Q" s- y+ i# J) B5 A
  26. <canvas width="400" id="canvas2" height="400" ></canvas>4 C( @/ h; m5 C7 b' k6 M
  27. <script>/ t+ _! L7 V0 L; V0 g8 u1 |
  28. var video=document.getElementById('video');
    + ^. ?7 b5 I8 d; t% @4 i( C
  29. var canvas=document.getElementById('canvas');
    + |" W; R. k( q( E* {
  30. var canvas2=document.getElementById('canvas2');
    + ]8 `( g1 m7 Y& N- Y
  31. var context=canvas.getContext('2d');
    3 e5 l9 n% z; {+ U: v% S, T
  32. var context2=canvas2.getContext('2d');
    % L+ T; f5 S* Y3 b3 A' @; b* ^4 l
  33. function draw(){
    , e2 \* v3 N; P! U
  34.         context.drawImage(video,0,0,400,400);7 h1 P. @- ^# f9 \- R( [9 q4 F
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    : {) F0 h+ }, S* n9 `% z5 a
  36.         setTimeout(draw,800);6 b+ `9 e/ i7 z2 S, ?# u. Y
  37. }
    $ W" _/ j" c! ]7 E& t3 K

  38. 1 V' |8 Z2 e+ _1 K$ O. L/ v2 w( E
  39. //客户端跟服务端通讯4 a) H2 C. R2 O7 [, Y* ^/ J1 n2 `
  40. if (window.MozWebSocket)' G  u4 Q: K& o8 F
  41. {
    ( e# C& ?# k9 |( p+ G% j
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");& S: S* H7 q' [
  43. } else" l, S5 Z0 m4 i/ V
  44. {0 x5 ]% E! i9 a! @. e: N
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    - p$ p3 ?! `8 H3 n
  46. }
    ' l4 ^' [0 f; y1 ~& B  h& |
  47. $ P9 A; o" ~6 I, @  M6 a$ @
  48. ws.onopen=function(event){) }$ i% l( Z2 _+ X/ H; A5 l, h
  49.         alert('连接成功');
    / |9 T' w% N& o# F+ `. a
  50.         ws.binaryType = 'arraybuffer';4 J# O( y) }* |* f8 ^4 f
  51.         draw();
    . a' o9 S( O' n4 |$ \' j8 [8 w
  52. }
    5 i! d9 [9 }& k( t1 F' K
  53. ws.onmessage=function(event){# v$ N- h9 U. M
  54.         //alert(event.data);, C( Z2 e! C/ D0 Q
  55.         //ws.send(event.data+"client");  |5 d; r: ^  @* U1 E/ }4 W) m9 p
  56.         qrCodeImg = new Image();
      O. D. S; y, W- ?$ N# e9 I* W
  57.         qrCodeImg.src = event.data;) [; l8 ^9 g4 {! P  z" v9 h1 a
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);3 Z4 X5 U3 T& G! ~( M8 F
  59.         . I9 M* U# J( _* G' E
  60. }
    3 e' _5 q. S# l* H2 x
  61. ws.onclose=function(event){8 E) z, y0 W' i1 h8 ?% |( N
  62.         alert('close');  l1 ^" L+ e0 `# w' o+ o  P
  63. }
    2 J5 k4 [* Y% a  _. \9 S
  64. ws.onerror=function(event){/ E: H$ M8 u7 h
  65.         alert('error');
    2 f/ X: u4 U0 t! H3 i
  66. }$ L6 I  p8 N2 u: N4 a% S0 m
  67. //video,标签模拟视频% P4 M' d' n5 a3 k1 C, ^* o& h

  68. 6 ~( e% w4 s$ r( E% P
  69. </script>  w/ n  o$ T/ c9 a1 F! E3 k
  70. </body>
      V) t7 v% u& Y8 e  C% u, o3 N
  71. </html>
    ; ?% h& G' n7 ~: H) Y( `
  72. , K/ C  _2 q5 f. Y
复制代码
客户端:
" K  u  u9 g+ w5 G
  1. <html>
    % S$ B$ b" q- _4 ?
  2. <head># g. ~7 Y8 H3 s# V# }. O# E7 y
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    3 V$ z- I# E6 ?+ s0 h
  4. <title>客户端直播页面</title>
    # Q' f- y# O5 |; c0 `
  5. </head>  V- f' j) c6 k
  6. <body>9 K+ d/ ^0 o" N9 f0 Y; H4 a1 F' L4 {
  7. <img id="receiver" style="width:720px;height:480px">+ G2 z% N- B) T

  8. 0 |- \  g7 n0 b4 V* \) _4 f
  9. <script type="text/javascript" charset="utf-8"># q! N/ |4 R0 d$ f& y( v5 t0 Q
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    " X/ B5 C$ ]+ e! T
  11. var image = document.getElementById('receiver');
    ' Q" V5 M5 H: F- t" c+ T. Q
  12. receiver_socket.onmessage = function(data) {
    5 R  y( x# T. Y. ]7 R
  13.         console.log(data.data);
    # M0 J4 S( s% f/ N- b
  14.         image.src = data.data;  n/ h6 Y' p6 f, \4 w8 E
  15. }
    8 `) W& g# i6 a: v$ ~1 g
  16. </script>) |) E. v/ c# O2 P
  17. </body>- c8 f0 W' ]; o( }, C/ d
  18. </html>
    & B% N0 ~3 {% j1 v( X! r& l

  19. 1 O8 Y7 j# a( @, `
复制代码
& q9 r: g1 a' B# H

0 M% P) r; w6 L5 Y- o0 [2 n+ L2 D9 A& e. W
& X  b4 M1 q! p3 S8 A6 s8 l% y
. N4 @% }- J( i: Q+ R- m* G& e

  [1 ^5 g, f  K) Q% v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 00:52 , Processed in 0.069356 second(s), 19 queries .

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