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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码: R0 u+ {6 ^3 g3 l3 E. \
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    1 \% z1 y& v0 x$ m
  2. $client=array();) c2 h) V/ t; h: r' T3 `1 f/ M
  3. $serv->on("open",function($serv,$req)use($client){7 Q% H) L+ v) T& C; o
  4.         //echo 'connect'.$req->fd;5 W9 E+ b- z  |+ R: B% }
  5.         $client[]=$req;5 {) X1 h/ p! e5 h/ X; v
  6.         //var_dump($client);! ~5 p* g% \) p
  7.         $serv->push($req->fd,'aa');
    0 B! f$ U2 D+ n; {2 \% |4 ^
  8. });) R$ x: p& K$ k8 {) W

  9. 3 y: l7 M* S9 d+ J/ ^
  10. $serv->on("message",function($serv,$frame)use ($client){; ~* R) I4 O% M6 Q2 I
  11.         /*var_dump($frame->data);
    ; d; V) g4 D; D' R; K5 B2 {
  12.         foreach($client as $key =>$val){6 W. Q6 z4 G7 G6 n& l& I0 G
  13.                 $serv->push($val->fd,'aa');
    / N  O- \2 E9 L% r. t: G1 l  F5 ~# A
  14.         }*/3 A  ]1 I& \6 Z' F% P# D. r( R
  15.         $client=$serv->connection_list();8 y* r) K% Y* h* k1 c# W2 E4 j7 y
  16.         var_dump($client);  f$ p* K4 u  k
  17.         foreach($client as $key =>$val){
    7 j* j1 T7 x- v1 ]4 N; Q1 V4 A* L& A
  18.                 if($val!=$frame->fd){# U/ Z; |1 U- y
  19.                         $serv->push($val,$frame->data);
    # B5 O2 h/ K" z4 T+ d& A
  20.                 }
    % M) K7 q, o2 V% ]( q+ x
  21.         }
    ) P2 V) k7 ^: _
  22.         
    $ s  W) j! O5 t, X1 k
  23. });$ t% }' H6 h1 ^8 N. @, T& i3 L- i

  24. 5 K" k' {( ^# a* Y. ?1 V7 m% H. u
  25. $serv->on("close",function($serv,$fd){0 J5 ~$ ~4 }2 U7 z- u0 Z$ V; j
  26.         echo 'close';+ a" K9 A' V5 Q3 X' s. U
  27. });4 H! M% {: {$ m
  28. 7 f! B+ X7 T; [6 E3 e. r% R+ k
  29. $serv->start();0 Y+ {5 c* X! v! C8 J, T
  30. * \4 U% T5 n- z7 m, g
复制代码
主播客户端: X* n/ K* a  h6 N# o1 R2 U# V4 i$ s
  1. <!doctype html>
    9 p. t) u: D- V% ^
  2. <html>
    ; w6 O+ ^! T9 c3 h; _
  3. <head>$ U# m" Q4 z) |  k, ]
  4. <meta charset="utf-8">- j# G6 R$ G1 R: @6 q+ W8 n

  5. 7 H$ V9 F1 ?4 O' \5 `
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">! ~- y8 c% v+ Z; \- h3 b4 H: @% R9 l
  7. <title>404</title>
    $ H. X8 m" l. r! R$ m  M
  8. <style>
    7 M0 E1 A, ~! [1 c
  9.         body{! D" f' ]$ @/ \1 c/ {8 E/ T1 a3 u0 |
  10.                 background-color:#444;
    ! a" y4 O4 o- x2 x0 q8 v/ n
  11.                 font-size:14px;/ Q7 F: U" |* Q3 ~3 R  m
  12.         }' Y" W" z7 }( P/ @  J
  13.         h3{
    : x( U+ g8 c' s0 F" G* `6 ?
  14.                 font-size:60px;$ J7 x" G1 N4 x/ e- W
  15.                 color:#eee;
    . o3 v* ?( B5 Q! p0 x
  16.                 text-align:center;
    $ a8 V. d; L( j0 e- V
  17.                 padding-top:30px;+ c7 e9 _% _, p! L$ J# H" ~! q
  18.                 font-weight:normal;
    # B. t* |) f0 w: B
  19.         }1 ~6 d. L! P6 P  w$ @# p
  20. </style>9 J; ?: x' L( g! J& A
  21. </head>
    + W$ S& G4 n* A# W2 ?  ~- X7 J- ?
  22. 6 K3 ]+ s! R: E
  23. <body>4 \- w1 w4 E, A# [! I$ l' m! V
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>1 v. K+ A; u/ b3 I' P7 l
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>1 e, a' W1 Q& ]8 D% q9 h# t
  26. <canvas width="400" id="canvas2" height="400" ></canvas>8 o, X  T% u( ^" j( A
  27. <script>: o+ \, M0 `  k* f3 I9 l
  28. var video=document.getElementById('video');
    " q8 i  M+ ?* r  g# f: a7 m
  29. var canvas=document.getElementById('canvas');% J  V: X# q. t3 W" C
  30. var canvas2=document.getElementById('canvas2');
    + s) q$ O/ c5 n+ k) L) X8 D1 ]5 [
  31. var context=canvas.getContext('2d');
    0 R0 Z: n! O9 o, `% x9 k
  32. var context2=canvas2.getContext('2d');/ t. H) O5 f, p# i
  33. function draw(){
    5 R" T1 j0 ~6 g$ x8 x
  34.         context.drawImage(video,0,0,400,400);
    . r: m8 B% A: T. H" w5 ]
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    . I, P& d6 ]- W  G7 X, y& q  ?
  36.         setTimeout(draw,800);
    , g. {# D; B1 f
  37. }
    ; _6 F+ Z/ y1 A( [+ s0 Q6 O- @

  38. 3 r5 c- n) M+ u
  39. //客户端跟服务端通讯( ^5 R: ?$ j# s; f
  40. if (window.MozWebSocket)" Y* D9 c5 g5 ^" J( }1 A" K6 {
  41. {
    4 u1 j1 r; p2 I& }, t+ u
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    . Q  h2 ?, ]  i- O& k7 V& E( \
  43. } else
    5 Z4 R  E3 S6 ^% W. D
  44. {4 G7 p0 S3 c! E1 i0 {+ y
  45.         ws = new WebSocket("ws://182.61.42.187:9501");* l& P7 i2 d5 ?' h4 p
  46. }1 L" V+ n  q7 q7 {% f% K# i
  47. $ K% p. w" [9 S. [9 Z
  48. ws.onopen=function(event){' X* W9 g, w+ E: V8 }
  49.         alert('连接成功');
    8 Z, n- W  H  j& A  o/ h
  50.         ws.binaryType = 'arraybuffer';3 r+ g0 g/ S+ O+ Z. {, _9 Q) N
  51.         draw();4 B; Y& _! v0 [' [9 Y% `; x
  52. }
    ! ^- I2 g+ y5 y6 J+ C: f
  53. ws.onmessage=function(event){
    2 E1 ^. V5 l, y' H
  54.         //alert(event.data);
    $ M# M) q8 Z( A( e; |$ P; n/ c9 Y& R
  55.         //ws.send(event.data+"client");, R0 q- e$ g" n3 d
  56.         qrCodeImg = new Image();# S( ^0 l" O; R/ m' k" Y2 ~$ S
  57.         qrCodeImg.src = event.data;# _' z. [+ u5 S" V3 K
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);2 e6 C* `  d( ~1 s- q
  59.         ) a! j& `4 o& }' C( w$ Z
  60. }
    $ U$ g( }8 e8 O9 ]/ l# S2 U
  61. ws.onclose=function(event){& P$ c/ l* w" J5 R
  62.         alert('close');
    : \# J. l' _1 V7 o  S' y5 m8 W2 m
  63. }! S) G: p' L# o! o& N2 R: E1 D
  64. ws.onerror=function(event){
    5 M# l' V9 h; \( h. c
  65.         alert('error');
    ' v% n. B, n% n  y. \7 m
  66. }
    0 w$ O6 Z1 _( o( _4 h+ d4 T( a
  67. //video,标签模拟视频
    7 @0 J9 \' Y5 \( G

  68. / ~3 K3 C6 J$ U, p. U* l( _
  69. </script>& q* P" X' Z: V' r$ k9 {" a& Y
  70. </body>8 `7 ?/ q6 M# J1 L' r! G
  71. </html>) m0 i8 Y  z3 d
  72. - k8 }+ x: J/ y6 o2 [( `( |
复制代码
客户端:
' n7 V9 s9 k* K3 I& W
  1. <html>
    / Z! A: C7 ]7 l) l! F0 @
  2. <head>
    7 d  ^% ~/ U6 o2 K0 A
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">2 i% h* Y3 k5 x" L/ a
  4. <title>客户端直播页面</title>
    0 ^6 r/ r/ y3 N& S
  5. </head>
    , ]% ^1 h2 T) G3 c& X* U  _5 c
  6. <body>7 ~% I5 M" I: n1 @- \9 q
  7. <img id="receiver" style="width:720px;height:480px">
    & U7 c  |; E! O" l, r! o/ _

  8. & G2 |# y1 J: ~( Y( w* ]8 U" M
  9. <script type="text/javascript" charset="utf-8">
    $ m$ |% x0 t! u$ e& L! c" m& o3 G
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");& S3 y0 S! o8 g) j! g& R! R- E. k
  11. var image = document.getElementById('receiver');
    : @6 k0 `* h, N- g* {; F
  12. receiver_socket.onmessage = function(data) {: E5 A2 l$ r5 k& d& k, `
  13.         console.log(data.data);1 e1 z  \: Z3 Z
  14.         image.src = data.data;: i  o2 J3 i+ f  Z, [
  15. }
    ( n; p! u) Y3 ?7 ]5 n9 \
  16. </script>. D" Q: T) m; x
  17. </body>
    $ \; e. e) T: A6 S
  18. </html>4 ?' b( o/ m  H8 v9 \
  19. 8 q: [/ \3 E# }; d
复制代码
, `1 S. ]  J7 m6 Z
; A5 ^: Z/ s( [* y' Q6 W
% ]1 }' F: E0 N8 [
3 [7 i1 L5 K: j) Z; b4 v+ k
; P6 r: Y, D6 i) j1 G

0 S/ v" `) \6 Z+ Z# K7 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 09:40 , Processed in 0.126252 second(s), 19 queries .

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