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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码; b6 `4 U1 K1 v7 s
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    2 J& |0 @3 Z( |4 K6 R7 I4 ?& y) i& _
  2. $client=array();
    3 S& H4 I0 G8 H& s: @
  3. $serv->on("open",function($serv,$req)use($client){# }9 n2 x' W" Z
  4.         //echo 'connect'.$req->fd;
    5 _/ l6 K' t7 K& o+ a0 v
  5.         $client[]=$req;' m9 ^* h7 O* z2 b
  6.         //var_dump($client);$ n( [( v0 x5 [0 V: N9 O( U
  7.         $serv->push($req->fd,'aa');& U+ G/ W. h& b' N
  8. });+ n5 B1 J* y' B; E

  9. 7 y3 j8 m9 `' H5 {
  10. $serv->on("message",function($serv,$frame)use ($client){' R2 S1 ^* ~. B5 W
  11.         /*var_dump($frame->data);5 E: ~& ^) O$ O7 v7 D* W
  12.         foreach($client as $key =>$val){9 v5 W9 N( r" n
  13.                 $serv->push($val->fd,'aa');/ O# Z$ C7 B8 D3 S& t6 r) X
  14.         }*/
    " ^$ j2 L7 Z0 e1 b. W1 ^
  15.         $client=$serv->connection_list();' O9 j3 t/ @2 e8 l# U0 d# e
  16.         var_dump($client);1 @: n1 n+ z3 c1 n, w: e. Q
  17.         foreach($client as $key =>$val){) O5 f9 a/ u9 V* S6 R
  18.                 if($val!=$frame->fd){
    ) k3 A& f  w/ G8 g% e
  19.                         $serv->push($val,$frame->data);
    , z% A) J' @; G
  20.                 }( }' ?: j: h3 O" p
  21.         }
    8 e! ^0 G# j6 k2 ?; H3 p7 [& k
  22.         
    . o( f. a+ T* A! ?" Q- U
  23. });
    ( y( ~, ^9 M9 R, c
  24. 3 I' a& B- z% j2 v- T
  25. $serv->on("close",function($serv,$fd){
    $ D2 D% L7 H% ]2 [
  26.         echo 'close';
    3 K& ^3 \- l' r* R4 ?% }/ n
  27. });4 y  P0 e' ?( |0 H' x$ k$ l$ @$ V2 O

  28. 4 U6 C) G: O& N0 v
  29. $serv->start();
    - x0 }+ C& b6 X1 J

  30. ' n" K9 a) \+ [% [) i% Y
复制代码
主播客户端# k* J8 z, z& J4 }! |$ e/ g8 B
  1. <!doctype html>4 x# R2 R. @9 F' I+ H. |+ \  Q' ~
  2. <html>
    , A1 F. E$ [$ A+ {- d
  3. <head>
    5 V, U. P% @4 P- q/ I0 a( t
  4. <meta charset="utf-8">
    # U" R- d6 J! R* Z. Q
  5. % b$ c4 ?0 i3 B4 \; W3 i  ]
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">+ d2 B8 W1 R9 ^
  7. <title>404</title>
    . _+ R0 d# c( \+ e9 L
  8. <style>  o5 o* i4 Q$ R$ u4 L/ Q( [
  9.         body{
    8 h; b" i" |8 n  n
  10.                 background-color:#444;  y) `3 R$ c. S' u$ T7 V# |
  11.                 font-size:14px;
    6 X3 x2 f3 P6 k
  12.         }
    5 Z7 m5 `6 W# s0 @$ ^' [0 i
  13.         h3{
    , {# [! d# E/ A$ t6 |. X+ j9 |
  14.                 font-size:60px;$ m4 [6 d% V& ?1 ~: t
  15.                 color:#eee;! `7 K  I3 C: c, i0 S
  16.                 text-align:center;. Y/ m( V( P. s$ @0 W
  17.                 padding-top:30px;2 Q% ]: l5 _! F6 f3 ?
  18.                 font-weight:normal;9 B' g: I: S: G& }0 B& h1 e3 R  @" L
  19.         }
    $ o1 {3 Y' k! I; k
  20. </style>. h  P2 t& K4 I9 w
  21. </head>) l6 w0 o4 h7 J1 r( B4 X% J

  22. 9 S9 b/ `+ K  X3 n3 \( N' R
  23. <body>
    7 B( {6 K7 ]& A0 j; T  V
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>7 O& I, q% Q- B( H
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ) V4 Y6 t0 L  Q6 Q* F( T, m
  26. <canvas width="400" id="canvas2" height="400" ></canvas>* a- G: B# v& Y1 c5 B; ]$ @
  27. <script>
    3 }9 K( z( D/ s0 k0 `
  28. var video=document.getElementById('video');* D3 I$ ?& h. Y
  29. var canvas=document.getElementById('canvas');
    + A/ s( ~* @  \$ R1 g
  30. var canvas2=document.getElementById('canvas2');' e* {6 G( [: Y
  31. var context=canvas.getContext('2d');7 n; `8 K5 s5 a: ~' ~* z  O
  32. var context2=canvas2.getContext('2d');
    1 y2 I% D8 ~$ ]6 a: j
  33. function draw(){" a0 @  e8 Z" p3 |
  34.         context.drawImage(video,0,0,400,400);
    ! X7 N9 M" A! a: w
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));; X  p# O4 p4 P9 H
  36.         setTimeout(draw,800);
    & f0 q7 W* j4 T7 f
  37. }6 T5 z3 N$ `0 v5 o6 X3 z

  38. ( t& V& N; j1 l7 Y
  39. //客户端跟服务端通讯7 N3 o4 \* u3 {% w4 L
  40. if (window.MozWebSocket); w$ w) j. @- Q) J
  41. {
    . a% a/ i  P5 {  p
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    * k2 H: z! N/ H  Z- l* i; V7 s8 w  E
  43. } else; H, t$ v# N; q0 C- n* C
  44. {
    2 C: x( N6 H0 Z' k2 U, |
  45.         ws = new WebSocket("ws://182.61.42.187:9501");) k/ m2 t( N  |9 l
  46. }
    8 l1 s2 l4 [* p6 P- q: `$ S3 l
  47. & H1 }; _" X) Y& t( m1 P/ P" f
  48. ws.onopen=function(event){
    9 k- P! R) {/ a* Y* b* E
  49.         alert('连接成功');
    - O% ^7 x5 U) `5 \: i
  50.         ws.binaryType = 'arraybuffer';  k- n6 E2 p/ |7 h4 ^
  51.         draw();
    $ f7 Z6 j9 ^5 j7 `
  52. }' X+ A8 X' a  m& k6 m
  53. ws.onmessage=function(event){# a* }* H& f) B
  54.         //alert(event.data);1 {. G9 f6 |% O8 v; V. k4 ^% q
  55.         //ws.send(event.data+"client");/ {# B% h0 U3 F! w8 F3 v) W
  56.         qrCodeImg = new Image();
    9 a0 A7 M+ a1 |4 A
  57.         qrCodeImg.src = event.data;5 j, U# n& p% G# f
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);2 Z8 u3 O1 Y+ m$ f
  59.         
    ! F8 S8 C& z2 \2 j) u
  60. }
    5 @% d$ b. N$ V1 D- H  [6 K
  61. ws.onclose=function(event){
    3 a9 j& L" U) J9 P2 Z& ~
  62.         alert('close');8 b4 b8 v& m; z* k& g; i- I9 o
  63. }+ @7 q5 X6 S0 N3 H! x
  64. ws.onerror=function(event){
    ) k  S$ D( V9 z5 ^
  65.         alert('error');
    6 e- b3 d% J3 a+ Q* Y( l
  66. }* z+ B9 f4 ^9 V3 H% z( |
  67. //video,标签模拟视频- a( @* O* m- |5 \: J/ }; A

  68. * Y4 G! r' ?$ i7 z8 J3 s
  69. </script>7 ~6 `: ]5 q- n8 P: Z6 O- ?/ O' }
  70. </body>
    4 ~2 c/ _7 u" x. I7 P
  71. </html>
    & M: u& K: V8 t0 _  R$ u

  72. , n# p# t& \9 m2 ]! W
复制代码
客户端:' I* H; z$ s9 W0 k- o8 I3 Q
  1. <html>$ t. S, \) d9 z5 U  Y" m
  2. <head>
    6 W# K. y; }  c% Y6 g' h
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">/ n' x3 R1 E2 |
  4. <title>客户端直播页面</title>
    8 ?* p6 s8 [9 d; K( p
  5. </head>
    0 W1 T: b$ j, {5 `+ Y/ `
  6. <body>
    9 z* j0 |& O2 J/ j$ a" l& `1 ]
  7. <img id="receiver" style="width:720px;height:480px">" w0 z0 f# r+ w3 M& ?$ A

  8. " Q9 J; q/ ?+ B1 V! \  J
  9. <script type="text/javascript" charset="utf-8">
    % ]' M5 j2 B! R  |; t/ V
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    & c5 D" W1 j9 G/ w+ N
  11. var image = document.getElementById('receiver');* F4 `5 O4 o1 O
  12. receiver_socket.onmessage = function(data) {
    : @! F' \( c  H- |
  13.         console.log(data.data);
    2 ]2 h1 \6 L3 [8 a
  14.         image.src = data.data;6 e, ?3 G% ~& C
  15. }
    - {+ s0 V* _, Z5 ?- J
  16. </script>. q. J4 Y5 `1 \% Y& T
  17. </body>
    ' c3 ?, }: E6 H' Z' S: o
  18. </html>. N) c( N& k( m, Y% r# ?4 W
  19. & m7 ]- G& i% q
复制代码

! R9 @/ {8 G; A
( R# m' v& k4 w4 j* |/ ^* N5 ?6 w6 t
2 z4 Z  r" {! j  q
9 V% V8 a2 E/ y) Z" e
0 t- n, y/ T8 l! r+ j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 13:22 , Processed in 0.104883 second(s), 19 queries .

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