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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
3 a( R7 u- `- b/ G' W' I
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    1 n. ]+ v$ b- R$ {% t
  2. $client=array();
    8 U0 y& S6 Z) ^, q5 U  S! T
  3. $serv->on("open",function($serv,$req)use($client){3 i* X# [) K. ^+ e3 T
  4.         //echo 'connect'.$req->fd;
    % ^( y1 ?6 F- l  h0 H, W, |
  5.         $client[]=$req;0 {# L# H& |9 Q; Q
  6.         //var_dump($client);
    ( {: ]5 f4 u3 l8 |! M4 Q5 h
  7.         $serv->push($req->fd,'aa');
    1 G( Y! a+ B! `5 }/ B# D% `
  8. });# c" \* ^- w" \) p7 \6 l' j& h

  9. : {* p+ V$ _, h9 |3 B& }; C
  10. $serv->on("message",function($serv,$frame)use ($client){0 O) u* e4 u- S6 |4 b3 }& h, P
  11.         /*var_dump($frame->data);
    " f; q% B# |* h0 x1 Q: `9 ?
  12.         foreach($client as $key =>$val){( B% ^4 k3 U" h) t
  13.                 $serv->push($val->fd,'aa');
    % P0 s; I( I' N, O( N
  14.         }*/# n  F( `1 A+ m4 E( P
  15.         $client=$serv->connection_list();
    3 J9 g/ Y' F  z2 n5 p+ l, u% y. L
  16.         var_dump($client);' H* M) Y. H, [, k/ |% z
  17.         foreach($client as $key =>$val){# Z$ ^- V4 {% L  i& O+ r
  18.                 if($val!=$frame->fd){" l) q' u0 S0 i
  19.                         $serv->push($val,$frame->data);
    / b5 U. B  |' X4 y0 v' ]5 V
  20.                 }
    / I0 t+ P  ~9 T9 P4 v2 m/ e
  21.         }
    . T- n# r. U0 g: v3 x( v* F8 Q
  22.         
    & l8 W# V$ H) @
  23. });
    , t3 L7 I( P2 b1 F
  24. 2 a' ]' ^8 H( G* _. N1 t2 |) j! Y
  25. $serv->on("close",function($serv,$fd){, ^  I0 o9 _) v
  26.         echo 'close';+ S  p% Q9 d0 M( b, _
  27. });5 t) p! [" P, c/ {' j  t
  28. 5 z4 P9 T% s) \9 S* F9 D
  29. $serv->start();: @/ k/ ^3 ]9 I. G  i
  30. ! O8 U! [3 j0 E
复制代码
主播客户端- f; T8 v; i1 n' g' k! k
  1. <!doctype html>
    2 K/ K4 Z  x% I+ ~  I& `: E9 G
  2. <html>
    ; }' }, H# R+ K  ^
  3. <head>$ o  o1 ~7 g: p4 l! n( F% t4 E
  4. <meta charset="utf-8">
    % W3 c4 {! v6 h- U

  5. $ P* y  P3 n5 F8 q: Q: l  H: M
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    2 v$ ^; a* l0 b2 i- t$ M
  7. <title>404</title>
    . ]" H$ ]0 V% @4 K
  8. <style>) ]% N% n+ x% v; m4 `" F8 n  H
  9.         body{
    & \& Y- y7 f4 m( D  G' q
  10.                 background-color:#444;5 U9 i# _5 H3 J/ P2 s
  11.                 font-size:14px;0 N3 R, F1 h1 n- w- ]% m, i
  12.         }
    , M0 S* L$ x9 x8 ]7 a  N7 ^1 A
  13.         h3{
    7 a9 {0 ^, ~+ @- l7 c6 X% _
  14.                 font-size:60px;
    8 }! t; K. H, m: j. ]: J
  15.                 color:#eee;( }, i# F0 g1 C! u9 K
  16.                 text-align:center;
    " I5 D4 B4 j+ ?* Z% R
  17.                 padding-top:30px;$ r7 v8 [" g% i: y0 L* N5 o
  18.                 font-weight:normal;! k: s" \4 a# I* U4 a; o
  19.         }1 J  C0 d5 K! C9 a7 }8 [2 s, l: `
  20. </style>" F1 c( U( _! _( \! ~
  21. </head>2 D3 j: j1 s% ^2 R* C

  22. 7 ^/ y8 `6 I6 O+ u, u  d# ]
  23. <body>
      h- w+ U6 b0 {
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>9 _6 ~8 O) I" B4 f1 K. }
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    $ s* C( u. B, p. N3 M- Q, f4 m
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    . M0 E& q7 z" n1 [2 ~6 e. T
  27. <script>
    4 A' {( a3 ]: x% d1 y  K( |' Q
  28. var video=document.getElementById('video');, }5 j- R: r& H: Y' L, x
  29. var canvas=document.getElementById('canvas');3 r3 f# }6 h  C) r
  30. var canvas2=document.getElementById('canvas2');
    # K5 H$ \" |( n& D
  31. var context=canvas.getContext('2d');5 t/ ^* I$ h# b* F: ~
  32. var context2=canvas2.getContext('2d');
    % A6 {7 b8 X4 e  Y" J* l* N' i
  33. function draw(){
    ! _" @2 S2 A  A0 Q/ {7 i# U8 B
  34.         context.drawImage(video,0,0,400,400);; u! d: U6 T" v8 T
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));! Q4 q# d: w, V9 i' G! t
  36.         setTimeout(draw,800);  m, B; z; N6 u8 e4 t
  37. }  w' j2 P6 M! e( y+ H- p
  38. ( Y' [% a1 ~2 p& v1 [! T) s
  39. //客户端跟服务端通讯
    4 Z& O, Z0 V# O& s* z$ |& z- m
  40. if (window.MozWebSocket)! l8 j: w; t) H: j% N
  41. {' e+ F6 f, a: o% b7 n
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");  A/ m" c+ C/ T0 S9 i; q  Z5 W4 q
  43. } else
    ; ^8 q& y( C/ Y8 n& ~
  44. {; _8 ]6 M% B- R, {* R( g, a: H; p
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    4 v* p- q8 c+ N9 T' i3 K( W5 v
  46. }# U- Q. \0 E3 Y" c
  47. 5 y: }' A' n2 E0 K
  48. ws.onopen=function(event){" [/ j& ]" c; h5 G
  49.         alert('连接成功');: ?. p; c6 G6 v( m% y, b& [' |$ P- [
  50.         ws.binaryType = 'arraybuffer';
    1 J' `  o8 O/ E5 T
  51.         draw();
    * k$ `1 I7 z9 R
  52. }
    . j5 J. B9 m, v, X( o
  53. ws.onmessage=function(event){
    / J1 Z( r+ ~3 `7 ~7 x
  54.         //alert(event.data);% p3 @' N* a7 Q; |) |1 X+ K5 t0 Q: E* I
  55.         //ws.send(event.data+"client");$ U+ S. p+ }& w
  56.         qrCodeImg = new Image();
    / J! h( z# `; `1 ^% t
  57.         qrCodeImg.src = event.data;7 L6 Q( h9 R& p& S: y
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ' x& f- e' f- c6 t+ N3 U
  59.         
    # r& F8 D# v7 V
  60. }
    3 D1 P8 B  d- ~: z3 I4 x% w
  61. ws.onclose=function(event){
    8 [$ p; E( y& u1 c, x0 k
  62.         alert('close');
    3 ^' s- Z( H% p( n  s9 m/ F
  63. }8 X' L. }7 m+ _' P" l
  64. ws.onerror=function(event){6 u, c% b/ k1 ?9 K% B% [1 b7 D
  65.         alert('error');
    / t6 C& ?4 i. f* `
  66. }
    7 M; P( S) ]/ U( C+ E% k
  67. //video,标签模拟视频6 p8 o  V. R8 U8 {0 v1 r
  68. 9 M7 n1 ^; W' k! V2 v% i* a: x2 {3 n
  69. </script>
    8 o9 r8 g/ L3 m& {% f
  70. </body>" ]9 W; K$ m4 F# N# S
  71. </html>
    , o: x, q$ e6 Q1 j
  72. 1 _3 @+ q, z! \$ M: n* F: v7 `
复制代码
客户端:
" X/ B: y5 x8 ^- x
  1. <html>! h' I& X1 r/ F" k) z5 Z2 O# E3 }% k
  2. <head>
    * H1 g" u, |9 p8 f
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">3 A: X4 f0 f4 i# J2 ~( @" F9 `
  4. <title>客户端直播页面</title>; C( f8 v  ^$ C, @7 ~+ N1 X
  5. </head>
      w3 e' c+ W( x, Z
  6. <body>
    ; ^6 O, ]" x: `$ v  [% A
  7. <img id="receiver" style="width:720px;height:480px">, J$ ]. c' D* U! s5 o1 y% `
  8. 0 q5 X: T& t. i" ]; ?( e: {
  9. <script type="text/javascript" charset="utf-8">; F3 P6 D: W8 @; V$ h( _$ S& m1 g
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");- ]6 D* N, K. ?/ w5 v, Q+ F
  11. var image = document.getElementById('receiver');  e4 ?& m: E+ F9 r" j# C: P
  12. receiver_socket.onmessage = function(data) {- M( F5 n6 N. G5 z
  13.         console.log(data.data);. A# {* Q; i# O! G+ ~
  14.         image.src = data.data;
      Q1 l1 c7 }6 ?. C: ?9 E; z
  15. }/ D' @# I; S( s8 `$ a0 l' T7 I- y$ _
  16. </script>. }7 G; J  y) N, f% ?3 v: }
  17. </body>0 H: H; I. R+ m7 ]
  18. </html>
    , }0 E# b( {! g; A( B8 Q

  19. 4 _4 @5 j* C( P6 {0 K* l
复制代码
2 A9 M& M5 V/ P- k' L

: i- `9 o! T2 U: m, L2 A( S
% X9 [% ?0 m% d* T  ~. q% p2 z. L- ?4 `* [
; p% P9 H* Y7 c' B# F0 ~5 F
) ^( n- D: N# `# U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:08 , Processed in 0.057729 second(s), 19 queries .

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