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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
6 a' U0 F2 t0 g  _, s
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);; \1 S  X! c% `" f- ^6 v
  2. $client=array();  B0 h# v+ N' K+ [
  3. $serv->on("open",function($serv,$req)use($client){9 N, J, }' H+ S* b
  4.         //echo 'connect'.$req->fd;
    5 x: N" w4 c- p, q% ~  a
  5.         $client[]=$req;
    ' t4 S' E1 W* |; o. J6 ?; C
  6.         //var_dump($client);
    ; _% P7 p1 E$ |" }4 o: w( J2 R5 ^
  7.         $serv->push($req->fd,'aa');  P$ ~5 {: R! v/ Z' V
  8. });
    8 s; N" Y  C3 P5 g, U. x# B
  9. 5 G% e1 C8 |2 V7 H
  10. $serv->on("message",function($serv,$frame)use ($client){" j! @! I, D4 k" o" v9 {
  11.         /*var_dump($frame->data);, G6 q" j2 B6 U$ F3 I! D
  12.         foreach($client as $key =>$val){
    7 a8 T3 \! }3 h+ p2 m* M8 h) m4 z
  13.                 $serv->push($val->fd,'aa');  m6 y' i# c& J
  14.         }*/( V) ^- u, e; P; f/ L
  15.         $client=$serv->connection_list();$ J, j2 X7 t6 U" B: a2 [
  16.         var_dump($client);
    3 O1 S, k; K- @! I  O- C
  17.         foreach($client as $key =>$val){
    . m; S0 c( `1 R, T/ B- y+ j
  18.                 if($val!=$frame->fd){9 P# S8 u4 |. X) f: a) _- R
  19.                         $serv->push($val,$frame->data);
    + V0 ?* B" U6 j2 }9 ~* F! R
  20.                 }8 W: [$ N+ H" W! w
  21.         }
    0 G7 X1 e1 D9 s; G5 J
  22.         # O1 K6 i: y9 m8 @% K+ R
  23. });
    6 H' C% N2 l% i, o; v! K+ E

  24. $ h5 A  M% B+ @) }4 f
  25. $serv->on("close",function($serv,$fd){2 u# c7 Z6 s; L/ `  d9 h% |
  26.         echo 'close';
    # L* K7 B" j; Q- D, z, q0 O, X
  27. });: y, s# h( ?; U  j; w8 D

  28. 8 S! C6 ~: |$ `0 B2 t  v, u# V
  29. $serv->start();
    % ^& r7 \6 h, y$ ~/ Z

  30. ! y1 N! r$ v/ M5 i& X9 V
复制代码
主播客户端2 [" L3 I' j8 S8 s
  1. <!doctype html>( X; u1 I+ R1 A* a, D) x
  2. <html>
    , s4 N5 G/ N8 H2 ]2 k
  3. <head>' I. W: H" n$ M9 Q% J& A
  4. <meta charset="utf-8">
    + R# f6 {" J* ?) i

  5. ( Y/ h6 o8 o) ^
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    1 T& L: X+ B) a! w6 W. `5 |! s
  7. <title>404</title>
    % Q- Q3 d8 m, b1 x, k6 Y4 c( M
  8. <style>. {  n! W( [1 }5 U, S
  9.         body{
    ! c- y' ?, f- h* m& Q' i
  10.                 background-color:#444;
    ; \. v6 A0 s' y. C
  11.                 font-size:14px;
    9 a- n* C" @- E7 Z4 `1 }
  12.         }
    8 K) a9 m' A. o/ x
  13.         h3{- V, p* t6 ]9 M/ ^- I; O
  14.                 font-size:60px;! E% |# g  r; l' P9 i  [* ^! s( h; P
  15.                 color:#eee;; f; ^2 ^( Z0 w. ~# Y- \
  16.                 text-align:center;* N' n$ [) a: M6 J( b
  17.                 padding-top:30px;' r8 d2 K, l% Y! f5 X% t$ L2 C
  18.                 font-weight:normal;
    7 p- D) x8 w: E7 l
  19.         }  O, ]3 D% d3 d
  20. </style>; k5 Z/ Q% J9 O7 N( I7 }; V' E
  21. </head>
    / W' E' Z" Y% ]
  22. + Z8 f" ]# u2 b8 v2 |
  23. <body>
    2 w3 W# P* k% ]6 `" q) c5 Z
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    , W9 S& Z: q7 T" F* j4 a/ m4 }
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    + Y8 [* |% N# b$ s9 Z2 G% L
  26. <canvas width="400" id="canvas2" height="400" ></canvas>4 l; k3 `4 J  m, L, b' m
  27. <script>
    / V* j3 e* G. k* b- ~2 s
  28. var video=document.getElementById('video');+ w! o, o8 a& y5 q2 k
  29. var canvas=document.getElementById('canvas');5 n9 @7 Q1 O' Z( Y! b- C
  30. var canvas2=document.getElementById('canvas2');
    . a0 v1 t) C! Q# P3 H% j
  31. var context=canvas.getContext('2d');$ Y4 `3 A; ]# l$ y5 `
  32. var context2=canvas2.getContext('2d');
    - V0 g3 K$ C* \. j
  33. function draw(){
    # _* u$ }5 _: b3 F: [
  34.         context.drawImage(video,0,0,400,400);) H# p. @2 s. @' K% V
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ; o/ N8 U( }1 ?
  36.         setTimeout(draw,800);0 G9 Z3 d# e  l, z, n2 }# X* }
  37. }
    6 s; a& m5 N1 X! v% w' n% X+ w! \
  38. 2 f$ I# |" e8 D0 G# s0 v
  39. //客户端跟服务端通讯8 F. W  l  K* j6 F9 `, m% P
  40. if (window.MozWebSocket)
    2 ^# B) e* X( I5 R
  41. {
    2 Z! Y( B" M! @7 Z& p# Y
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");$ g2 h: p3 i' ]" ]# O# u; @& B
  43. } else
    ! `' Y2 e' l( F' T; n
  44. {8 V3 u( ]6 J9 n' P1 g4 F
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    9 ]6 \1 j8 x. f7 c3 l0 y
  46. }
    " P: N- L% x. N: u9 E, V/ G

  47. 8 K$ r- Q: F1 A* z) L2 W! |- d
  48. ws.onopen=function(event){
      F* q$ k/ E5 d( N* z' y
  49.         alert('连接成功');  R; w0 s# h6 n* }
  50.         ws.binaryType = 'arraybuffer';
    & E- k  e" M# d6 K
  51.         draw();3 C8 n& o8 S7 c" x6 o! l2 y
  52. }8 U2 Z5 H/ M, E  K2 i0 A( [- u
  53. ws.onmessage=function(event){; ]+ T6 @1 k3 X9 o
  54.         //alert(event.data);2 K. D2 b9 _" Z/ x
  55.         //ws.send(event.data+"client");
    # A8 _  E. o! M! m
  56.         qrCodeImg = new Image();9 }; R/ d9 C) O% v" k
  57.         qrCodeImg.src = event.data;
    5 V4 X$ L* N7 ]% n( z2 t0 H
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);( i: ~% B* [# r4 |2 F
  59.         
    0 A# i% |  P& \6 ]
  60. }
    ; R- P2 I& w! m( \* @
  61. ws.onclose=function(event){
    & Y/ q2 ?' _! |' Y
  62.         alert('close');, X9 T! }" N$ G
  63. }
    " X- i9 R8 T  _$ ?/ R! t
  64. ws.onerror=function(event){
    7 S8 `1 ^0 G+ t2 z. n  y
  65.         alert('error');
    5 M2 i% j, R! @. X& @3 a
  66. }# }9 s! `8 _9 l' w- p9 u- l( l
  67. //video,标签模拟视频% Q9 t: E( S0 _: A

  68. . z2 S3 B0 V3 F! U4 P  e
  69. </script>6 [9 X! z  f" P# _6 r8 L( n
  70. </body>
    - L- {( F- Y0 ?" y, W
  71. </html>: d& ?/ X: [* T0 X" o& c0 X- k
  72. 9 M5 l. o- D6 S3 K7 E
复制代码
客户端:
, X2 ]4 C, U: D, f
  1. <html>5 U5 e) w6 J) f" Z: n( u: A
  2. <head>8 _; z' z' e/ }5 G0 [. a7 ]
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">5 W7 s) \9 H4 i% o' M
  4. <title>客户端直播页面</title>
    : \  J2 B( _5 M
  5. </head>
    $ g1 H" T; {4 f. M# U: t
  6. <body>
    0 K5 y+ ?, g! W, x- @8 K- X6 f7 e! v
  7. <img id="receiver" style="width:720px;height:480px">
    ) R( q! V+ b( h6 X

  8. / k* b, b- k1 i
  9. <script type="text/javascript" charset="utf-8">
    : w! G2 A: ]3 O8 `2 c3 X) F
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");9 i2 L% H/ {* m) g* {; e
  11. var image = document.getElementById('receiver');: o% u* }9 k5 j5 X
  12. receiver_socket.onmessage = function(data) {9 ^6 r9 I5 Z0 Z5 f+ F1 R2 N; Y
  13.         console.log(data.data);5 S8 g5 Y! e9 j* A
  14.         image.src = data.data;' T, E6 e3 C4 }4 y' t
  15. }, v  w; b' |. ?+ T. x6 j' H
  16. </script>
      S3 b/ I! i1 c( J1 W8 D
  17. </body>3 F5 X$ O( ^! @8 \, K1 t
  18. </html>
    % c1 T6 r8 G: J5 x  I( P

  19. 1 Q+ ?9 o5 w$ h' E+ u3 r
复制代码
. {+ \, q1 v0 e; _. ]0 B6 f, v
; n1 U9 G+ ]' X8 \/ s7 `
/ `  _1 r: b3 h9 |% ^/ f: `# z

* B+ V) C6 R4 v9 u6 n; x, C
# Y  f  k! z* R( ~$ w7 N8 o6 L5 v0 N- x# k# n$ G1 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 14:55 , Processed in 0.138618 second(s), 20 queries .

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