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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码) e2 ?/ T# Q9 l  W
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);8 y# ?1 @0 g) X: v6 D; q
  2. $client=array();
    : Z8 I7 |4 t, ^9 @7 q
  3. $serv->on("open",function($serv,$req)use($client){- m! l% c/ }7 B* x0 l$ Y1 Y, x
  4.         //echo 'connect'.$req->fd;; {; d( L" j7 r9 H6 @* r
  5.         $client[]=$req;/ c7 U1 h) N7 k2 Y+ W* ~8 y, y$ l
  6.         //var_dump($client);
    & o, U4 l( S( x7 W$ T
  7.         $serv->push($req->fd,'aa');
      C! a" U/ R/ m8 C# E. C
  8. });
    2 O1 @4 `3 \0 M2 _5 v9 v

  9. ' K' W+ X0 t0 H- I/ g+ x
  10. $serv->on("message",function($serv,$frame)use ($client){3 D* h7 {- q' E* [! T3 N  a# O
  11.         /*var_dump($frame->data);3 [3 x9 f7 l  E
  12.         foreach($client as $key =>$val){
    ) p$ Z1 j- r( J* e5 c. r* t
  13.                 $serv->push($val->fd,'aa');0 Z9 d) b) z" ?
  14.         }*/+ {' Z5 n, r4 X% Y, @, e
  15.         $client=$serv->connection_list();) b7 B/ N' ~0 P! N
  16.         var_dump($client);
    " V. _( G4 _* }2 Y7 a
  17.         foreach($client as $key =>$val){) _. H8 s6 K+ v& }3 a9 m
  18.                 if($val!=$frame->fd){) }4 g9 d- L  ~0 G( ^3 Z
  19.                         $serv->push($val,$frame->data);& T$ Y  U$ H$ I/ y
  20.                 }
    4 Z0 |: C6 @) U, p, t, _, m7 t
  21.         }7 z, `6 `8 X$ P/ s. j8 U! a! Y
  22.         
    ) u3 d" n8 g0 H- h" D) Q) F0 d) \
  23. });
    * E& l9 [0 Y, u. v  l) A7 B

  24. 4 K% _. X# x9 t" k
  25. $serv->on("close",function($serv,$fd){$ _) ]3 \: v1 e" y6 D
  26.         echo 'close';
    , @+ A; F/ b1 p# u! a- a, N
  27. });" D- U7 H2 F- T4 I; R: r

  28. # @- ]3 v& ~3 V) \3 {- N
  29. $serv->start();! ?% E2 [/ S" `
  30. $ B) I7 ?5 u" r+ _
复制代码
主播客户端9 O; h5 @1 l! J! b9 j! R5 @3 M) b
  1. <!doctype html>$ o: m( I. e' ^; n: ^( J" `9 o! d
  2. <html>9 c+ m& l  v- p, E( O& Y
  3. <head>
    4 S" Q2 ?4 K9 k; _7 Z" o
  4. <meta charset="utf-8">
    # t' U+ w$ P* w
  5. . _6 H- d" O9 ^, z1 j
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">" r" x- {3 P# b  [% X
  7. <title>404</title>
    % R. h2 e% F% m3 l2 n/ Q: I
  8. <style>
    5 Q" l2 u' g; g, ]: R
  9.         body{9 f8 r" L: k' G; J) }- N2 _
  10.                 background-color:#444;
    ( U& ^, v( o  X- ~
  11.                 font-size:14px;5 ^7 q1 c! Y8 I$ h0 I, m
  12.         }
    7 r) k7 A+ I' W3 C. m
  13.         h3{  ~7 ?* _* _8 o! c$ z* I, q4 I! Y
  14.                 font-size:60px;
    " G0 Z% V. D2 l8 @+ \
  15.                 color:#eee;* P" L0 Q& {+ X( M
  16.                 text-align:center;
    , G9 K8 o5 E8 N& G+ _3 {8 Y0 T
  17.                 padding-top:30px;, x; Z. P7 c" N5 e. a
  18.                 font-weight:normal;* G8 [7 A  H& S8 P# H) v$ y7 y
  19.         }
    / Y0 f2 ^* L3 U) ^* W+ q
  20. </style>' X. h+ r' R: R% K, h" [
  21. </head>
    . Z- V. j( s' {0 y' m/ D

  22. + G# o5 y! Q/ r7 L# Y8 F7 @$ J5 C
  23. <body>7 i0 y0 m- z4 w1 s1 L
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    ; X, @; D! A. h9 A3 E# n
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    . s0 l: H8 ]1 F3 w: {
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    9 \  w, A; F; k  M- }' }
  27. <script>2 D( I/ G% o% n! R/ f! a! S2 y
  28. var video=document.getElementById('video');
    2 F% m  y" Q2 K+ \5 p
  29. var canvas=document.getElementById('canvas');
    - }2 i5 C. y$ d8 n2 h! j. A( b9 j
  30. var canvas2=document.getElementById('canvas2');5 R3 C9 ~* v; w, A5 F
  31. var context=canvas.getContext('2d');
    , l% a- s+ _9 Q, Z, w( F) r
  32. var context2=canvas2.getContext('2d');4 `  ?" `1 E" m" B1 H
  33. function draw(){
    4 D) U3 ?: P" ?. H$ y. }
  34.         context.drawImage(video,0,0,400,400);) e  C: U, X% {5 F3 b; K. S
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));' C2 W4 j- C! ]% n/ H) N, N
  36.         setTimeout(draw,800);' o+ I8 j  M& b# }, d+ s
  37. }: U. Y' a2 d. f; l6 ^6 H# b
  38. 0 X* Q) `, l' e/ `( P% J1 g
  39. //客户端跟服务端通讯
    ; ^. {4 p4 Y' B9 E* a6 q( }7 V
  40. if (window.MozWebSocket), K2 h$ E/ Q) f; p
  41. {2 t. _+ L5 _$ x4 b7 A# @
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");3 g- s& R* o7 b3 A+ E5 q# T% w
  43. } else
    ; L& c7 h( _9 [8 b* V
  44. {4 O, j! X$ P& [. ?
  45.         ws = new WebSocket("ws://182.61.42.187:9501");9 q( C+ f+ h6 |
  46. }0 _+ g! p3 Y$ i4 u
  47. $ M7 l+ T/ g6 B8 G) Y$ V& R+ m4 M  `3 ^
  48. ws.onopen=function(event){5 C2 [2 O- H; i! g5 ?+ x
  49.         alert('连接成功');
    ( L  R% u* K& h( E7 b
  50.         ws.binaryType = 'arraybuffer';2 W7 S0 U8 N. D! O5 x" ^7 C
  51.         draw();) t7 f( ~& w+ t$ |
  52. }
    8 A3 Y: E, J# `6 t
  53. ws.onmessage=function(event){! z# s$ l6 q' t" ]4 T
  54.         //alert(event.data);
    ( q9 Z! v+ b* n% f1 ^
  55.         //ws.send(event.data+"client");$ c. \) }+ }4 ?  Z2 k7 o" T5 {
  56.         qrCodeImg = new Image();
    1 r3 R# r2 ]% I" }* Z' R' A, K& _
  57.         qrCodeImg.src = event.data;
    # ^6 A+ X; |" V; S1 z; I
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ; ?3 V3 o4 \9 `% c3 |
  59.         4 v* R( C/ \4 X% |
  60. }9 g; t2 @$ t4 ~2 R  d  A
  61. ws.onclose=function(event){  x8 h0 G9 \; V8 X, q& N+ T& }0 B; q
  62.         alert('close');7 @0 G! q# X: }  j
  63. }1 p6 ~/ N9 \) k5 u1 C2 K9 k" G
  64. ws.onerror=function(event){0 l# F  m2 l' v4 Q. e; t8 X% ]
  65.         alert('error');
    0 G* C! k; q/ b: m% R
  66. }7 P3 Q1 r4 R: n% o9 p2 B; v8 P7 n1 ?& ]; W
  67. //video,标签模拟视频
    5 ^" s. X9 k8 a( d
  68. ( P3 ?8 i% t8 p
  69. </script>
    % N$ w9 D. `6 r9 s* Z0 I
  70. </body>
    9 M6 B4 B/ N7 _5 x/ c7 y
  71. </html>
    : m- T$ U( p' i& D2 p, u3 g  o* s( O+ l
  72. - {- ~3 L- B+ E! _
复制代码
客户端:& w- h8 a  B9 [
  1. <html>( D4 ?: d) f7 q0 L" M. g" p
  2. <head>
    ; ?* ^( I. e+ m; m' l( \, r# \0 }6 T
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">, }- K% r: S. b# n0 F, R
  4. <title>客户端直播页面</title>
    ) V* z7 a3 ~5 H) `# e7 H% C- B
  5. </head>
    & t% X/ w/ P+ o' v) Y# Y2 D
  6. <body>
    3 \( e/ G9 z$ F5 C6 j5 W
  7. <img id="receiver" style="width:720px;height:480px">
    $ C6 y/ j+ h$ V

  8. ' d: E- `! J. R5 A+ g8 n$ O9 q
  9. <script type="text/javascript" charset="utf-8">% j0 T3 n  i9 F. `. j/ W
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    + o- E9 e' |2 d# `: Q6 l
  11. var image = document.getElementById('receiver');
      d& H1 \" P" J2 H( ?3 E  a
  12. receiver_socket.onmessage = function(data) {9 e6 R! f" p4 t( x6 w
  13.         console.log(data.data);
    ' w3 ?; w0 S" b3 j3 h
  14.         image.src = data.data;% w4 e' ]) R2 T  N
  15. }
    & a" m, Z+ l( `7 ?: K- M
  16. </script>7 L. n8 }( w' v+ c7 }4 A  g% K
  17. </body>
    1 s1 s+ e* U. ~6 i: k+ s' P  U
  18. </html>
    & \1 N/ [1 ]0 i0 ?
  19. # A, ~3 d% y4 Q5 |9 u6 [- S
复制代码
* i3 S; c# ]) P7 M1 @5 m9 q" y
& W1 Z7 N/ P+ i- p' V# `) P/ N
2 Y2 K% l3 G1 u0 Z  D3 B9 ~
/ _) y  ?1 u. s$ i6 h/ D4 L
& T% h8 a0 f- M" r/ Q0 G

  w) U( D4 N0 E; r! f  i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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