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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
/ N, C7 I5 C' n5 O# d% R+ v
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    $ v' L+ ?( K' V, z
  2. $client=array();
    ; w/ ^6 r9 m( R8 Z3 p8 N1 M
  3. $serv->on("open",function($serv,$req)use($client){% u5 Z: N! K: B/ x
  4.         //echo 'connect'.$req->fd;0 L3 t2 U3 y3 U+ v& B! a
  5.         $client[]=$req;
    - g- D" w# H; w
  6.         //var_dump($client);
    9 O* x6 v3 x  H1 Y$ X  x# l7 u, {; G
  7.         $serv->push($req->fd,'aa');* G( n5 r8 X9 P" P# i) r0 b
  8. });
    0 T1 L) B& R4 E* W  X. g
  9. % U2 D1 N% S5 e' O3 ?! I. w
  10. $serv->on("message",function($serv,$frame)use ($client){
    ) K( e: i( y/ ~2 \: N
  11.         /*var_dump($frame->data);
    ; d( T  q" R% w5 r5 w
  12.         foreach($client as $key =>$val){6 ~0 ~3 @2 z5 B# }5 E  ^: h2 C1 ^
  13.                 $serv->push($val->fd,'aa');
    4 U1 [# C, p! m' R
  14.         }*/- I) R- O! L  O# t6 W3 Q* e
  15.         $client=$serv->connection_list();
    ' ^% V' I% X; t. z/ z
  16.         var_dump($client);7 @9 @" _0 H8 b* [, G7 Z9 V4 ^: Q; L
  17.         foreach($client as $key =>$val){( n3 [& q" Y7 a. b3 U0 ~4 t8 `5 J
  18.                 if($val!=$frame->fd){. p8 G' H- c+ c% F7 ~9 h2 ?' }2 s
  19.                         $serv->push($val,$frame->data);
    8 q. K' v$ q3 q! ^
  20.                 }) t7 h- V+ P3 u& ^
  21.         }- q' G) Q& ^$ w' S0 V' }
  22.         
    9 X9 w  Y$ E! m+ p5 f; X
  23. });3 R$ G0 t) F! @+ ?# P8 p; L7 |2 a
  24. 6 S* `7 }+ O; p
  25. $serv->on("close",function($serv,$fd){8 ~8 j/ Z1 [* i9 R4 P/ _+ ~
  26.         echo 'close';& w( s# Y6 k, n4 \2 `
  27. });
    3 W; W: l* M9 S$ N* S

  28. $ |: u& [1 t  D0 F+ g% v
  29. $serv->start();' P' f. G( D% H
  30. 6 C/ X! k' Z7 Z, M
复制代码
主播客户端
. B- o& ?( f2 |0 H2 V
  1. <!doctype html>
    % D- g  o4 m% w$ V7 U- P$ k! o
  2. <html>
    5 n) Y% s8 _3 a
  3. <head>- Q! I; l4 S0 m" r
  4. <meta charset="utf-8">* H  W9 I* i# n+ Y1 `+ N1 z. W1 f
  5. ) X6 l7 h: L+ H  ^. y! i
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">4 x# q4 Z9 }. K6 @
  7. <title>404</title># J% w& U, v0 s' }6 u
  8. <style>
    8 v" Z' T3 ]! y( @% C; W# ?
  9.         body{+ M# Y! v7 B& ~4 n
  10.                 background-color:#444;
    2 _* L6 y! h) V5 y7 u
  11.                 font-size:14px;
    7 i* g1 B  G7 q+ w; _; o# ]+ d
  12.         }
    % b0 K4 b/ t, j  H! L* E
  13.         h3{
    & r. P8 _3 \- P( t1 m: l
  14.                 font-size:60px;! m, E  U- ~, Z
  15.                 color:#eee;. w3 c* D/ g- ~+ |
  16.                 text-align:center;- O6 e# W$ B& _& X% J; m( [
  17.                 padding-top:30px;
    - w, G; [9 a9 ]) F
  18.                 font-weight:normal;
    " X( C! t) i5 e+ w' ]/ ^' ]5 x
  19.         }
    $ m+ N/ B( n2 _$ P2 k% q
  20. </style>
    8 `7 p8 n- c+ l, @/ @
  21. </head>0 G5 U* Q1 h% ~# U1 K

  22. , }( n: p! \. c" K
  23. <body>
    : d+ d6 @$ k7 I% G/ g: X; v+ b. y
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>7 \; w) R* c# l% T6 e
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>6 V% g6 l5 }1 @
  26. <canvas width="400" id="canvas2" height="400" ></canvas>; I) Z: T: [! p, o0 G' Z& H. [
  27. <script>
    ; T$ G5 C3 o6 M
  28. var video=document.getElementById('video');
    : @& U# D, c* |7 J2 @7 ]; Z
  29. var canvas=document.getElementById('canvas');, X- m1 ^8 C/ R
  30. var canvas2=document.getElementById('canvas2');
    % J( b/ {1 e2 J& K% ?6 E
  31. var context=canvas.getContext('2d');
    & R, W& O' P& |# Y+ w. @
  32. var context2=canvas2.getContext('2d');
    , _' o$ S! G7 p1 K8 A5 f1 Y
  33. function draw(){
    6 |7 |( q' n1 L* \8 P6 f
  34.         context.drawImage(video,0,0,400,400);) a  ~/ r/ B, V) @
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    / i4 M1 X/ h- B* p, h- i6 C
  36.         setTimeout(draw,800);
    1 }: F/ ~1 k/ S0 i0 f6 T
  37. }
    ! a8 c/ I8 t+ b1 }
  38. $ E+ B0 e8 W1 d4 s  f! e. q$ O  I
  39. //客户端跟服务端通讯! k0 t% u' {- J, w: A
  40. if (window.MozWebSocket)
    - T2 C0 N0 U) l) R( i
  41. {
    6 |( q8 n) Y) {3 m$ h6 i% s/ u3 Y0 |
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ) ?( m* r% n$ q& H" F9 x2 ]
  43. } else" A# K7 T4 p: X  o# i; |+ ?* O0 P
  44. {
    ; z# y* g% t$ Z- C( g
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
      |8 @% x  Y% d( L8 a
  46. }! w$ [2 d& N! _/ y" |3 Z: ~

  47.   W- |) P) |" K! p8 ~7 M
  48. ws.onopen=function(event){
      `1 `% o- S( E9 L& e
  49.         alert('连接成功');2 Q! Z! i" P3 T
  50.         ws.binaryType = 'arraybuffer';& {% L% \3 \" s5 j
  51.         draw();
    & n+ f* {, _. k! F6 x
  52. }/ `2 {$ L# i" E
  53. ws.onmessage=function(event){
    + K; Y1 V0 O- |! o3 b0 B3 t  k& m5 Y
  54.         //alert(event.data);) p' g% G$ S3 [3 _2 i: {" V) y- u
  55.         //ws.send(event.data+"client");! l# J; y$ X3 k/ b4 A! K$ K
  56.         qrCodeImg = new Image();
    7 k$ [/ M: |" j0 }4 t& h
  57.         qrCodeImg.src = event.data;' y9 [% l. X$ T% W$ A
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);0 W( D% A6 b4 ~' P5 O
  59.         2 b( _. }6 w& f2 f, B( `$ ?
  60. }
    ( O- x# \4 z* v& @$ p1 P* N
  61. ws.onclose=function(event){! o- p5 _! Z* M3 w+ _9 B3 m
  62.         alert('close');6 a( _* n/ D, `8 m2 d( \( _
  63. }) G/ g& M1 [5 h1 s" n
  64. ws.onerror=function(event){3 E+ R: c% W; l  k. N
  65.         alert('error');
    1 L; y( z5 }& q% c4 O
  66. }( s2 Y& t4 B" K! J
  67. //video,标签模拟视频) ?3 n" I" @' N. y
  68. 0 x: X* I+ D8 X( B" {
  69. </script>
    6 x, ^. [0 A, |# ]$ V7 R+ v* [
  70. </body>3 I+ ^. _/ c" o" \7 w2 @# `
  71. </html>, i5 ?  T# L4 {  L/ c" b9 |
  72. / H* J1 @1 M( C6 S
复制代码
客户端:
- q2 y5 r8 U" e/ g( q
  1. <html>
    8 |1 Z. \. F" v8 Z2 Y
  2. <head>
    . c2 j/ k& a: Y4 ~+ n
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">7 d# _* L, I, d& [0 f+ l
  4. <title>客户端直播页面</title>
    9 s2 \8 K" O3 U: [/ ?
  5. </head>0 e9 T' {, Y7 g$ E
  6. <body># d; v+ X! K0 N6 M5 E6 h
  7. <img id="receiver" style="width:720px;height:480px">: s( r+ w3 e$ C4 }, H0 f; d9 z9 k

  8. ; y0 r. e. P( h9 l
  9. <script type="text/javascript" charset="utf-8">& o3 _2 X/ E; @7 b, E2 H" z; k
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    : ^0 h) u5 A! d" f
  11. var image = document.getElementById('receiver');
    5 A* l  g$ }* f5 Y1 ?7 u" p0 ~
  12. receiver_socket.onmessage = function(data) {
    % c$ w* |; f' J, y3 F- a$ P- Z( B
  13.         console.log(data.data);
    # `; y/ H9 b9 q! p0 J
  14.         image.src = data.data;
    ( M& f5 S/ a- X# q: @- ?% W
  15. }$ _) L* H# `7 k* X
  16. </script>
      m8 |0 S' c% O2 {3 X% }
  17. </body>
    0 P5 s; n# [# T0 q4 \
  18. </html>
    2 P$ b: B, `) s+ y4 p# a: B6 t  r- q

  19. 0 f+ D( O$ r. t
复制代码
& H  y8 |4 F' \

8 b" U0 Y: P9 |9 C" Y( g9 F2 Y5 s+ y0 o8 H

" L, z) u3 b7 y8 b
( @1 W% S7 r. o& U0 T  [: G9 \& M5 F( K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 20:00 , Processed in 0.052746 second(s), 19 queries .

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