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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码
) E$ R" J8 L4 b" b: k4 k4 @
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);. O8 ^9 ~4 I5 K( a) b
  2. $client=array();
    # L* O1 s7 z% G% k1 o/ e4 T3 o9 U
  3. $serv->on("open",function($serv,$req)use($client){. k' J! I( H. ~6 J/ ?
  4.         //echo 'connect'.$req->fd;% ^9 ]" i5 Z4 I
  5.         $client[]=$req;+ T  I( I& `9 \
  6.         //var_dump($client);
    . n4 Y% l+ g/ g" `7 J' Q
  7.         $serv->push($req->fd,'aa');
    5 ~: C/ ?$ O- r) n6 s. r! m
  8. });
    # y9 S$ E  ?, t" y) j
  9. - U' o, G6 b6 B4 Z, u9 _
  10. $serv->on("message",function($serv,$frame)use ($client){
    4 H  _, k& O0 c1 n
  11.         /*var_dump($frame->data);
    ! z( A/ i, B, ?$ i0 [9 ~1 p- |
  12.         foreach($client as $key =>$val){
    3 U6 V7 Y0 y, j, w
  13.                 $serv->push($val->fd,'aa');3 m) t- V5 s$ ^1 O! w2 J3 j
  14.         }*/, y8 K. X: M, x, y8 M/ G$ Z
  15.         $client=$serv->connection_list();
    , }' N, b; O7 b* U& |  j
  16.         var_dump($client);
    % R4 r' i# _$ l
  17.         foreach($client as $key =>$val){
    2 w5 d/ q. e7 B# Y0 D. s
  18.                 if($val!=$frame->fd){
    # A: ~9 d0 L& s2 @: [
  19.                         $serv->push($val,$frame->data);
    5 K% [/ C% N" u4 l9 L$ j' \
  20.                 }. s3 R, a. X  d4 w1 Y+ y
  21.         }
    ; N3 X; m8 ~- Z+ z* j
  22.         % B$ J8 B$ k# ^: X- q6 q
  23. });
    $ l: h& v& P; g7 T- w

  24. 5 x  Z  q9 ~. [" K& t3 k" d' L/ ]
  25. $serv->on("close",function($serv,$fd){
    4 Z: `- D# S8 e& k, H
  26.         echo 'close';
    / y: s# f0 F( C8 B# ?% Y% e  o1 e+ M
  27. });
    / Y$ W$ t# K; ]7 m- B
  28. : B& H4 E5 b  i% v( E( O# d
  29. $serv->start();8 j+ g7 f4 X, J; l
  30. 0 C* }5 ^; i) g9 o& m4 E
复制代码
主播客户端
  n8 T7 [, Z& ^
  1. <!doctype html>9 i  S9 Z( ]& K! @3 y* K! u
  2. <html>8 l# z6 K) S" S6 r9 e$ Q' A
  3. <head>
    " H3 K+ M% k( f7 s* p
  4. <meta charset="utf-8">2 L7 P6 I) K  `( o; ]
  5. ! w, d  ^1 B: u5 ?9 I+ M: @
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    " N9 S/ d* t9 J
  7. <title>404</title>$ ]2 h7 v+ P& d$ r1 B8 ~
  8. <style>. r+ i  n1 D3 w) i( h. X/ {9 z
  9.         body{0 N5 Y$ ^/ i$ j) {; W# y
  10.                 background-color:#444;
    0 e' c$ B+ F6 I. E% W5 o! S" |+ d3 n2 `
  11.                 font-size:14px;/ _" E- h% k  x5 y+ O* h* F/ ~7 J
  12.         }
    " U8 B! F% o  }
  13.         h3{
    ; W8 b( Z4 A: X/ E
  14.                 font-size:60px;7 L8 h3 j; ?* b% \( M5 H
  15.                 color:#eee;  M; D0 Y/ `; u3 ]2 X
  16.                 text-align:center;
    6 O: ?$ _$ v1 L$ Z' r& k6 R6 k
  17.                 padding-top:30px;7 P+ ^) g9 j/ Z9 S
  18.                 font-weight:normal;
    5 k" h  M$ ?) a" t6 w
  19.         }8 Y* m0 ~5 q5 [3 r1 a
  20. </style>
    : G# O% D2 V0 C, B# I
  21. </head>, b! \7 H( W- X% ]- R* g

  22. ( q% h; [/ |3 t0 s
  23. <body>
    . H2 U& e4 V5 u1 V' e
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>' I+ r& s( G+ h- i+ K) C: P
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>, N) `5 H6 ~4 e# v! i( l" F0 m- {" I
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    $ m5 E" M5 E. u- \7 H  f) w+ J
  27. <script>7 d# h( |9 {  E/ S$ c8 C
  28. var video=document.getElementById('video');
    ) ~9 `% E( @; N; k- i
  29. var canvas=document.getElementById('canvas');0 y; s2 P( g, R" c5 ]' [# n, h
  30. var canvas2=document.getElementById('canvas2');
    $ Y. I/ J4 o' E( Y4 I, |9 f
  31. var context=canvas.getContext('2d');( H3 N& y: [- y, W8 F, e
  32. var context2=canvas2.getContext('2d');
    & }0 W& T2 u& [$ {1 D) c; ?/ i) x
  33. function draw(){
    5 j7 W6 N$ j8 X* o/ }/ Z( [
  34.         context.drawImage(video,0,0,400,400);
    ( s+ I. W3 Z2 ^$ @- _" P
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ( H2 c5 K5 ^' e, d' v6 r& k# _: G
  36.         setTimeout(draw,800);. I; b1 D, u6 r( N
  37. }  J* x; T5 T! U9 Y$ `
  38. + l6 J+ {- D5 v9 m; b" K
  39. //客户端跟服务端通讯5 ^3 y  O% s& Y1 j
  40. if (window.MozWebSocket)
    6 D; q) O. D4 Y+ j& }
  41. {
    $ k* p) Z" W" x8 H1 \: |; \. {. z( X
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    2 h/ s( G6 f0 W; A
  43. } else' b+ Q: r; C7 p: g* r1 j  A. J
  44. {
      V# P3 q# z# C! T
  45.         ws = new WebSocket("ws://182.61.42.187:9501");. I5 w! Z4 L" e1 x% e
  46. }
    0 o; C: Z0 w" V3 ^
  47. 9 J# k. E% w3 t3 ?
  48. ws.onopen=function(event){  ?/ X' G# j1 w% x- {
  49.         alert('连接成功');
    + `4 T  \  C0 P" v0 [1 G6 v
  50.         ws.binaryType = 'arraybuffer';
    & A% h! Z0 s# f5 X5 F
  51.         draw();
    ) d6 {4 v; X) }% y- m: e
  52. }
    ( G0 j& O; u$ y" ~, E+ H# e
  53. ws.onmessage=function(event){
    : D3 |6 l$ f9 L8 a9 i. h4 V
  54.         //alert(event.data);& C/ q+ W1 i9 U- k: R8 c$ W
  55.         //ws.send(event.data+"client");* a9 o& {" D4 L" X
  56.         qrCodeImg = new Image();8 w" B! Z, V5 H! V5 c
  57.         qrCodeImg.src = event.data;# ?7 q' Q/ Y  |5 L$ o- \
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);/ e, y- }; N- }' X$ L
  59.         . v6 J' X- u$ a( Z" m0 C
  60. }
      R1 r; s: E- Q) P
  61. ws.onclose=function(event){
    ) o: q8 a. O; b: v2 j; P3 V
  62.         alert('close');
    ) k0 _( @! `% v& G
  63. }
    ( C" p( s; m( u3 _6 y
  64. ws.onerror=function(event){9 j4 R; v6 k5 E. t; o& Q- @& g+ @- K
  65.         alert('error');% G8 n2 h5 z1 k  L& i& G7 _2 f
  66. }
    # X9 ~4 W- m  k, Z: \+ E* s. Z9 \
  67. //video,标签模拟视频
    $ c; O0 q: X  t9 \# c+ x( q# C$ {

  68. , \, H7 {  ~4 Z# Q  G2 U* I
  69. </script>) z' G" R6 Z: n. L
  70. </body>7 e2 d  L1 U* @( o' B) m
  71. </html>
    4 k& [- w1 l" k4 J6 g& P
  72. . H$ h( M+ U' a1 z) {* C
复制代码
客户端:
" k# F! Y, R; d1 i
  1. <html>
    1 e6 G1 g+ W8 a9 U$ q& V  W2 s, G
  2. <head>
    5 F* p  @1 p+ b# C
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">6 ?3 }- C* |: u& N
  4. <title>客户端直播页面</title>- n: E: C8 ^& [0 H3 K  g: L% ]  ^
  5. </head>
    + V8 L( `+ E3 z$ p* L' t
  6. <body>
    ' Y4 a' I) g! b9 j! c5 v" v# n
  7. <img id="receiver" style="width:720px;height:480px">
    . `  F- L9 L. b, z
  8. # ?' ^+ [, o$ Y& V" _
  9. <script type="text/javascript" charset="utf-8">
    $ o7 ]4 H8 o" m3 [9 i- Y( c
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    # V- _& K# `  C- ]- H6 J; t9 E) W
  11. var image = document.getElementById('receiver');
    8 A# _. ], B8 D2 h) ~8 T: C
  12. receiver_socket.onmessage = function(data) {6 D& _: m4 i/ o# p* M3 x
  13.         console.log(data.data);) h2 L' e  m% [8 |& C5 u4 \- W% c3 \4 I
  14.         image.src = data.data;
    6 l3 p  x7 j. j8 t) F
  15. }
    & J9 r& |  S" D: N7 M) g1 K
  16. </script>% ^8 H3 W, E: m& N4 H
  17. </body>
    % v$ y2 o( j/ M7 q/ B( m
  18. </html>
    % @, _0 g! W9 N- l/ ?7 [; R

  19. 8 R  C  J$ v! |+ [5 t! O+ ?. T8 l- A
复制代码
2 [3 y% g. v2 @
% H7 Z! j; L& G  i3 s

0 z0 W- m+ |. n  h
8 y7 {3 n# g/ X9 D# ]: Z1 e; f) T( ?- f- Z# h4 y1 V0 N

$ E/ ?0 a5 T7 q- ?0 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 17:21 , Processed in 0.120688 second(s), 20 queries .

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