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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
9 g) a$ H3 O( d+ d/ _9 Y+ f
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);" u, D1 K2 @: s# u" I7 \7 C# U' Y$ Q
  2. $client=array();5 N$ Y) G8 p' e2 ~+ \
  3. $serv->on("open",function($serv,$req)use($client){+ Q  p; F0 ^7 _; |
  4.         //echo 'connect'.$req->fd;: H1 ~# v4 |: \9 h
  5.         $client[]=$req;/ O' ~9 p/ k$ t1 u+ Z
  6.         //var_dump($client);
    : @" }8 N# Q$ C- ^' x; u
  7.         $serv->push($req->fd,'aa');1 t6 J/ e0 E* K# [6 v
  8. });; H/ w# G0 a" L: I
  9. 9 V2 R4 w, s0 y4 i: {, E* T
  10. $serv->on("message",function($serv,$frame)use ($client){( o6 u- L4 S6 N. _% X
  11.         /*var_dump($frame->data);
    $ B4 U& y' p' }* h1 {
  12.         foreach($client as $key =>$val){
      M9 Q' Y9 P! Y7 L
  13.                 $serv->push($val->fd,'aa');
    " D8 j( s: n: i
  14.         }*/5 I4 D7 {  q( l# B% r
  15.         $client=$serv->connection_list();! I9 e) j7 @" M8 {5 ~; y. Z3 _
  16.         var_dump($client);
    - i2 R4 u+ D) T$ O  z, }% \9 q: E! Q
  17.         foreach($client as $key =>$val){; i% M" \! Q4 x
  18.                 if($val!=$frame->fd){
    0 Z$ c& U/ N, t6 K1 w
  19.                         $serv->push($val,$frame->data);
    , k" C+ B: v  u/ {
  20.                 }
    - c7 b! M3 T. R4 C4 {' o
  21.         }
    . d9 [) \; N" G
  22.         
    4 M% W/ w* I" l( ~, f
  23. });) H: M# D* a2 {. t
  24. - K2 G, Z% [8 u" f; V
  25. $serv->on("close",function($serv,$fd){
    ' i! q* L' I, w) `
  26.         echo 'close';% W  f3 ^1 f! G8 Z
  27. });
    8 `, w5 V+ n: I' P  g0 {

  28. $ h9 t: v; M+ |% m: X+ F$ m
  29. $serv->start();* A- n! s4 g+ x5 P9 j9 A

  30. $ k. z0 ]$ A+ l: P0 N( P- y
复制代码
主播客户端
: Y* i  [9 B% K
  1. <!doctype html>
    $ _! R) w, j. v- ]% c: [9 A
  2. <html>
    - t" {/ S- I1 X5 m$ `/ Q: K* z' ~
  3. <head>
    ( |" V- ^7 q6 H( L! \
  4. <meta charset="utf-8">
    # v  u9 w$ {' @
  5. 3 `' Q1 A. h! m! ]8 k1 w9 ~$ w
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">0 k9 x# X- [) |) K8 s3 W
  7. <title>404</title>6 H, L4 O1 @; K
  8. <style>
    9 N* X7 Y$ s- a
  9.         body{# N- v0 y# W5 f; I9 \
  10.                 background-color:#444;2 V# h* @  n) @8 L* ]( p
  11.                 font-size:14px;
    / }$ H- T5 @' J+ U
  12.         }
    ! N% ]6 S& Q" Q4 M$ |- j
  13.         h3{
      Z* p5 ~; s1 R: A- O$ J
  14.                 font-size:60px;  b& c# m6 O- O2 _
  15.                 color:#eee;) T4 s7 C& @  d+ D; |" G  E
  16.                 text-align:center;. x' [+ H8 _' f1 p$ F* K5 U
  17.                 padding-top:30px;  B; z& y( \- N) h  {  z. r! M% i6 V
  18.                 font-weight:normal;5 @7 o% X1 A+ k; c
  19.         }
    , m2 c7 A4 h* a% T" i5 y* D, y
  20. </style>
    ; k$ t3 _  f2 p: s. y1 S1 e
  21. </head>
    7 S, M! w3 B3 F$ w8 D3 ^

  22. / x5 j, p$ T  Q# U
  23. <body>
    ! v" `1 |: A" O" a
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ! D- U( n) ^, J/ N# o; l
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ) S7 F: {( I8 z6 @" W0 h. k
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    6 u1 x. _- r/ {/ P" G# g
  27. <script>; D) x0 [: z* N1 _
  28. var video=document.getElementById('video');
    * G+ ?3 F# i3 {8 h
  29. var canvas=document.getElementById('canvas');
    7 I& z2 n5 V7 p  y2 e2 X+ x/ |
  30. var canvas2=document.getElementById('canvas2');
    ! Q9 z0 f0 Q  L# N( [$ U+ g3 y1 H
  31. var context=canvas.getContext('2d');; w3 H0 I0 i3 w7 u/ G# D8 \
  32. var context2=canvas2.getContext('2d');
    4 W3 k3 L( @2 L" D. t* X% c
  33. function draw(){
    ' d$ S2 K3 O8 H5 }2 K
  34.         context.drawImage(video,0,0,400,400);
    # N, _, x; j# C; b
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));. ]: x6 }8 O' G# k" O
  36.         setTimeout(draw,800);
    2 \, V: n. P7 g; R% @& o- A8 `% P5 F
  37. }
    ! p' N, {3 N) ]) n6 }9 E
  38. 2 _! _6 c! ?- V" U1 u7 K, {( R
  39. //客户端跟服务端通讯9 p; v6 {3 `3 s6 |# b
  40. if (window.MozWebSocket)
    ' k" r% I& Y6 R: _1 e- f) e
  41. {% l/ b7 l1 }# R: g- P3 s
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");. n- l: h3 K8 w' T
  43. } else
    , L% m" y& ^( q
  44. {
    ( E- X4 e1 h$ r9 x; P+ S) l
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    ' a/ ]5 L; t/ K6 e4 C
  46. }2 z" ~4 @% m( p0 Z, G4 z$ V" i9 l
  47. 4 k% r3 y$ Z: f/ h4 H1 e
  48. ws.onopen=function(event){
    # f5 \# c$ W2 N
  49.         alert('连接成功');
      \% v4 w$ t7 B5 f( n+ a
  50.         ws.binaryType = 'arraybuffer';0 S$ T6 V* a, s8 C" X
  51.         draw();" z( K9 R0 a/ A' N3 ~1 a) ?
  52. }$ s$ c; P, G4 o. S) Y4 [
  53. ws.onmessage=function(event){( b) O' m) L+ a
  54.         //alert(event.data);
    ( j  o: k9 U1 S* |, D2 U
  55.         //ws.send(event.data+"client");
    % Q- `5 B1 ]5 C( f- L( H: ]+ A
  56.         qrCodeImg = new Image();
    2 P. }' R! y$ R
  57.         qrCodeImg.src = event.data;
    8 G8 t  S* B. |+ l
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    0 f: `0 Y% g& t  @1 h. m
  59.         . p& Q5 E4 E% M1 f
  60. }
    / M: _- f5 x6 Z& L! _4 {3 B
  61. ws.onclose=function(event){  [- F* b! N2 q% w4 g5 z9 b% F4 y8 _
  62.         alert('close');
    / P  t% e, `' O$ ~0 E: t
  63. }
    $ H9 q* {; F, x% l9 X8 N) Y
  64. ws.onerror=function(event){" D7 Z( H/ X/ I  F( }4 I
  65.         alert('error');
    7 h( s- f7 c# d2 m! {0 _
  66. }
    ; A" d- H! ]* T8 c8 _% s3 i3 k+ f
  67. //video,标签模拟视频8 f5 W3 U5 x( X' y+ y% ~

  68. : B# [! i* s( Y* Q- Z- e0 a6 M
  69. </script>
    4 }3 W5 U5 j! W7 Z6 T7 L2 `6 e
  70. </body>* k# ^# j1 U* I4 D. ?
  71. </html>" r# r* W0 b) K, f+ ~% j

  72. ) ~  W- F" h% p* f& U4 V
复制代码
客户端:( j+ b1 a% e) ^/ n# B
  1. <html>/ g7 O( `: i* r
  2. <head>" @2 y$ r: K& l
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    1 S0 g4 M7 S4 @0 q/ b
  4. <title>客户端直播页面</title>
    5 |8 t" Q) |: @  V4 ?& M
  5. </head>
    ( `' U# o0 A2 v6 U& M
  6. <body>
    $ M. X8 o$ c$ U: G3 H$ r* L
  7. <img id="receiver" style="width:720px;height:480px">; f/ S" Z3 B( {4 Z* X

  8. ) i  {$ c- I  V
  9. <script type="text/javascript" charset="utf-8">
    ( l+ G4 r9 ~" k# U
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
      V" l0 n& [' K
  11. var image = document.getElementById('receiver');
    ' q$ A/ o' s" k7 m( M4 I3 H
  12. receiver_socket.onmessage = function(data) {
    ; o3 W3 @+ p5 A+ w0 r
  13.         console.log(data.data);
    ) q' i: _& I* h9 Z1 R( s
  14.         image.src = data.data;9 N* p* a: h' y- s! G( S
  15. }/ q# I- S3 F4 a' D2 e. t: d
  16. </script>8 m7 B6 F+ Y3 y# E8 c
  17. </body>
    $ J& F& {& T7 u; s4 T+ b3 ~8 W
  18. </html>+ t5 Z0 s, d/ t( _, G( ^7 W; F

  19. ) b0 m- M3 p7 k( s
复制代码

" E& S5 [% C& i: h; x" O, R& {3 j. M) @3 d
- q! ^' T& M6 X/ }

0 V# K: C0 c6 _4 p$ B* R- D% l; y

6 D0 n2 _' q$ n$ O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:17 , Processed in 0.077424 second(s), 19 queries .

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