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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码  M8 [: N4 [/ B% k, d( l* [) ~9 q
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    3 D( J0 ~- D+ ]' |
  2. $client=array();
    " g" P* `6 d8 B& D+ o
  3. $serv->on("open",function($serv,$req)use($client){
    ! s' ~5 L+ j+ Y4 u( o5 `) Q/ y
  4.         //echo 'connect'.$req->fd;
    % |; ?4 z1 k+ w: a/ q6 l
  5.         $client[]=$req;
    # \! v9 [% \% b
  6.         //var_dump($client);! L% O6 Z7 @! g- `7 S
  7.         $serv->push($req->fd,'aa');
    / t8 \$ e/ C! I% H
  8. });
    " [. f5 C+ J& P3 O

  9. % e! X6 G. {2 [
  10. $serv->on("message",function($serv,$frame)use ($client){
    $ P5 A2 r, R1 v7 r3 J
  11.         /*var_dump($frame->data);
    - ~+ l5 A4 l+ z+ w
  12.         foreach($client as $key =>$val){
      p9 s9 {8 ~3 M. b
  13.                 $serv->push($val->fd,'aa');
    " p" }/ k/ l, y3 ~
  14.         }*/
    0 P( r: I5 E! u7 r
  15.         $client=$serv->connection_list();% u4 @  `! ?' X
  16.         var_dump($client);3 v3 @. k. P2 `
  17.         foreach($client as $key =>$val){& a* x3 R. i  M7 p4 S% F' j( D
  18.                 if($val!=$frame->fd){
    ; b( D- k4 C( ]7 O
  19.                         $serv->push($val,$frame->data);5 b" D4 |  H3 u( i+ b7 h& J
  20.                 }
    : z& o/ g, \5 w' i! c
  21.         }
    ' R4 K" n, R. |2 U: S' z$ Y8 A
  22.         4 r9 q1 `# h: e/ _- \- t4 N6 \
  23. });
    - v9 M; g1 C) A# }+ \) W# j

  24. % I) O7 M# u5 s* P: {
  25. $serv->on("close",function($serv,$fd){5 s6 T) X9 [/ m: H. D
  26.         echo 'close';* R8 v* F% u* L# L
  27. });
    , U. D- o/ R9 ~% }7 U! G! G
  28. " }1 Z  Z4 V  }; Y# `' W5 g
  29. $serv->start();
    8 C3 K, A% N7 {

  30. ) Z0 s" S, {- X2 B. {% ~
复制代码
主播客户端  T/ ?5 p" V) o, M
  1. <!doctype html>
    ; Z9 |9 G% v% J* f1 Y$ e
  2. <html>( s" `( ]$ R+ }
  3. <head>
    ( w0 y( Q% L8 R/ R$ A7 m) M3 M& B- N
  4. <meta charset="utf-8">  p( v( v6 c! R/ e

  5. ! M, n; p8 s7 r: s% S
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">" w7 p% v* J. b* N
  7. <title>404</title>6 ]  O; ~, D3 ]% p- H" ~- W
  8. <style>1 Z# @% g, {2 G* j, |+ f/ j
  9.         body{
    4 X% Y) w& _- r9 _
  10.                 background-color:#444;
    9 z: Z7 U, W3 p* {6 }8 T" G
  11.                 font-size:14px;
    0 w8 p4 |+ r* ~0 V1 H# I
  12.         }
    : E. B/ _' h& F5 D+ Y+ h* Z, ]6 x: ^5 U
  13.         h3{
    - x- a* U/ }# [' N" E. `; }
  14.                 font-size:60px;
    $ g+ w. b6 u% H* R8 W
  15.                 color:#eee;* j1 k* O5 n. N/ y7 c' ^, o. P
  16.                 text-align:center;2 P* `+ _+ v. |- F' m# a/ e4 r
  17.                 padding-top:30px;: g/ O, s. q8 L$ P% ^
  18.                 font-weight:normal;
    , j. w  a0 N+ X5 c) S! z
  19.         }8 j2 \7 x- z' s5 M" `
  20. </style>6 @/ p5 p# L) r3 L, @
  21. </head>
    $ a/ A  c" r( w

  22. ; u; V) q4 b' Q; ]; ?8 c5 X
  23. <body>8 B" o1 U3 \, I
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>; Y3 `9 ~( Q/ ~- W: f; J
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    - |% \# [5 `4 H# i0 m
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    1 o! Q+ K& {8 }8 Q. D! P
  27. <script>
    ! ?1 a5 U  D- i4 J8 x( g
  28. var video=document.getElementById('video');/ Q; w, w' I: S7 ?" ]
  29. var canvas=document.getElementById('canvas');4 W# N' U, e4 k7 q
  30. var canvas2=document.getElementById('canvas2');
    2 F) X) M- c1 _7 n! g' `
  31. var context=canvas.getContext('2d');# d6 R4 s' Q1 z1 y4 T7 h
  32. var context2=canvas2.getContext('2d');
    7 J. d6 @0 s2 u5 w0 p9 _8 j8 u& i
  33. function draw(){
    8 }, ]' C( t  N% f9 G; [0 J0 z
  34.         context.drawImage(video,0,0,400,400);
    3 s/ Q. `/ b( P" \. i# s  {
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));( E5 N3 u$ M: g
  36.         setTimeout(draw,800);0 K9 A* U1 z0 K8 Y# Z9 c8 u
  37. }" `+ X, ^  R5 F7 Y, a( W

  38. 3 V: a* u! \2 j9 a4 r& Y5 A. P% i
  39. //客户端跟服务端通讯  K0 ?1 Z+ H! [' |- O8 s5 A# N3 d- l
  40. if (window.MozWebSocket)/ S1 u& c1 V2 H! S3 y" K1 B& y2 q
  41. {
    4 W4 ?8 T1 ~, j4 ~: C
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    - }1 v. N; {; j, a7 {
  43. } else* ^+ d  w6 s5 ^. H3 f
  44. {  ?$ ^$ F; c) H3 B/ p% V
  45.         ws = new WebSocket("ws://182.61.42.187:9501");7 k4 H% X. Z6 F6 p
  46. }$ c7 ?6 p  m) p. m
  47. - w. m% c2 O# X6 b* T7 c  \# W1 `
  48. ws.onopen=function(event){' k% v3 {/ F6 H7 B9 L! ^: _
  49.         alert('连接成功');6 a( r0 ?2 Y; I2 {* I( E. v1 K1 J
  50.         ws.binaryType = 'arraybuffer';. s- w9 e5 m+ p9 m( {
  51.         draw();
    ' s% w; z' ]8 i# J
  52. }. Q0 O0 i: L' d. X  R
  53. ws.onmessage=function(event){
    1 U; P- S8 {4 f+ {, v/ y
  54.         //alert(event.data);. M# L( x4 C+ j# |% S  y3 g
  55.         //ws.send(event.data+"client");  p1 p4 W0 c( N9 X& ~# D
  56.         qrCodeImg = new Image();
    ; {) o6 N2 q( s2 `# b' M
  57.         qrCodeImg.src = event.data;! z0 |8 _3 Z0 M* [8 I$ h
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    " a" S' w* x4 U2 P
  59.         7 J! O; {' Y$ K+ [1 S. w7 H
  60. }8 o8 ?+ `9 ]. @4 c
  61. ws.onclose=function(event){
    4 F/ ~" E* Y/ v5 p1 k1 V" [- t
  62.         alert('close');: K0 L( v5 R' H
  63. }
    / \% ]6 y4 |) g( c+ i' C
  64. ws.onerror=function(event){4 S+ d) @# b: r) a
  65.         alert('error');0 T; ~; l. q4 j8 Z! r8 n
  66. }% b$ N3 A8 {7 _: |9 U) ~
  67. //video,标签模拟视频
    ; K7 }- t' d- U1 [+ k
  68. & ]" I3 z# k2 E
  69. </script>% [0 }$ v% D  s  z0 s' U& L
  70. </body>
    1 M6 d. b  O" @# v5 N% d9 R
  71. </html>% Y# x& g6 S& z, ]3 C' c

  72. ! \, `& W, W+ t' j/ `* Y
复制代码
客户端:  X9 c. P/ _8 \
  1. <html>/ M! f. E# Y" P. t6 Y6 A' V0 F
  2. <head>
    2 b0 U$ P% @# b
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">: ~8 i$ U1 p! ?! `
  4. <title>客户端直播页面</title>; z; \# _1 U) Z! L
  5. </head>
    ) |+ k4 ]6 ^$ X4 X) b( m5 [
  6. <body>, v% d  {# T) T$ G( ?+ }7 u  ?1 f
  7. <img id="receiver" style="width:720px;height:480px">" @7 v. b( a, Y/ O/ ^

  8. $ a9 f/ T: e, W/ H
  9. <script type="text/javascript" charset="utf-8">) U" Q( k( I% e" m
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
      E/ k! P0 p" K
  11. var image = document.getElementById('receiver');
    0 c( @1 D, y0 ^- S. P0 T6 F% ~" k
  12. receiver_socket.onmessage = function(data) {
    ' U: k3 s$ S* ?5 T& z
  13.         console.log(data.data);
    / U- B% Y) K3 m
  14.         image.src = data.data;
    ' g: p+ Y! Y/ R0 M
  15. }
    + z+ T8 q) m/ }' f* E6 @/ X. Z5 m
  16. </script>
    ( |! J/ n% G* I! V' O& b' a
  17. </body>& K8 ]6 ^) ?' T! i1 N: E$ P5 L
  18. </html>6 P, y: B0 Y* \/ Q) @; P

  19. * J. F" f) A. f# b0 h* j
复制代码
, Y) v5 w- L0 \1 E, |( Z  q. q
' L$ |. h# h' B% w, M

8 U2 R6 R# y& g% S* I) Z
: m) ^$ x# v- y% k" E% x. n  a) c) S  K1 y0 Z: H  J

/ o  N5 z+ ?# E7 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 19:57 , Processed in 0.106711 second(s), 19 queries .

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