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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码( u% Z+ J7 ~9 F
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    1 O* a2 h6 U! B8 W0 G
  2. $client=array();
    4 R" p6 j7 d+ o! k( G
  3. $serv->on("open",function($serv,$req)use($client){
    : U- @8 j; k2 Z6 ]0 E2 ^5 K5 ~
  4.         //echo 'connect'.$req->fd;
    8 l% ]4 q8 Z3 |% S
  5.         $client[]=$req;
    5 K$ G& C" `2 h4 {3 R9 P7 x
  6.         //var_dump($client);
    6 o) w# E  I" M5 a$ @5 n
  7.         $serv->push($req->fd,'aa');8 }/ g+ ]$ }& p. p8 y0 V
  8. });$ |/ J( @$ y# }3 j$ n

  9. - U0 j& _9 o! L- M
  10. $serv->on("message",function($serv,$frame)use ($client){/ Z% ^( Q7 a  n3 C& ~
  11.         /*var_dump($frame->data);
    - U3 O+ `; y# G# J  l
  12.         foreach($client as $key =>$val){6 X) n& _1 V0 A: }! G- b4 `
  13.                 $serv->push($val->fd,'aa');. H; `3 z% x7 _3 ?7 v
  14.         }*/
    1 F2 H- I8 F0 Q: G% x/ }- e
  15.         $client=$serv->connection_list();
    " Q4 e# q: I( C* t3 k* J' \
  16.         var_dump($client);
    / i# Y! J$ U( Q9 V4 `
  17.         foreach($client as $key =>$val){1 c1 w" G, ?* w
  18.                 if($val!=$frame->fd){- X. T' o# Q) M: |1 m, }$ t
  19.                         $serv->push($val,$frame->data);! K7 y8 K8 d% ]) ?
  20.                 }2 k- O! c: o/ J% m0 W
  21.         }4 X+ K- X: D2 ]# }; H) W& K3 v8 v
  22.         7 R, c1 ~( j0 v* i! @6 `
  23. });" g/ z6 `) J  ?8 }& F1 u
  24. ; d- U  A' U, Q, a. r
  25. $serv->on("close",function($serv,$fd){
    8 I$ K$ W+ z. S
  26.         echo 'close';# ]+ C! ?- Q" ]/ y$ C
  27. });
    " t  q/ m% d/ G

  28. - M5 ^. O, v3 F1 ~
  29. $serv->start();
    1 X7 D' _# O# X5 j4 O$ P# b
  30. " r9 V( k# P4 e4 @' D* W
复制代码
主播客户端
2 M1 L9 [6 q9 w; ~
  1. <!doctype html>! ]5 R' v5 q6 x2 G% P' |9 j
  2. <html>1 a- A: l* X- u; ?2 C5 y
  3. <head>( h, |; F/ G2 N. ?
  4. <meta charset="utf-8">
    * i- d0 ?" D: ^6 Z" H

  5. # A% v6 l2 N# R) K1 A0 N
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">6 H5 U# G2 p0 v" y) h! y( r
  7. <title>404</title>- D+ |8 `( f. f: `! V  L' {
  8. <style>
    5 }( G; P; p2 m: b) R% C, r# c3 L
  9.         body{
    , h4 y/ B! P. }( `1 B/ r3 H8 E- e" L/ v
  10.                 background-color:#444;
    " z# n! t, D4 @; H- i2 ?
  11.                 font-size:14px;) e2 Y& p  {, @) f9 ]3 p- g
  12.         }
    3 E& e0 M5 b! u
  13.         h3{2 ?/ n. ~  N# a$ B
  14.                 font-size:60px;) ~- f  b/ L( V
  15.                 color:#eee;
    ! A. E" F% E2 E1 ^) G" a
  16.                 text-align:center;" d+ Z$ a2 K4 K5 t2 }% z8 h- T: Z
  17.                 padding-top:30px;- w* M, d/ k- U0 |& {. B( l
  18.                 font-weight:normal;# `0 v: g# p5 Q2 e6 \; w6 `# u
  19.         }3 m& Q( L8 a# D' A* B  H
  20. </style>
    - f* A& |$ C6 W: R+ j8 Y
  21. </head>
    / g3 M" v. z: A5 @1 U! C

  22. # H' {: u, X6 q8 Y0 p7 W' X0 A" u( C
  23. <body>
    ) u1 \7 ~7 L, V
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>+ a- G/ x* y; D0 K% l
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    # W) f3 V8 R- |' N
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    - Q- K' `/ V0 V, w
  27. <script>
    0 a% p. j2 b, l$ j1 @6 r/ m: C6 o
  28. var video=document.getElementById('video');$ y: ]6 Q% y  r: s9 {2 y
  29. var canvas=document.getElementById('canvas');
    + ~; B' V! \; ^0 G- A! b6 O
  30. var canvas2=document.getElementById('canvas2');; p1 J. z8 ?7 ?9 K7 G9 z: ]# b) G
  31. var context=canvas.getContext('2d');
    , o+ t; P" T" Y- B
  32. var context2=canvas2.getContext('2d');; a9 T' H9 F* V+ [9 X+ b
  33. function draw(){( |. O4 s3 p  F4 E; L; i  }5 S
  34.         context.drawImage(video,0,0,400,400);' R& Q1 C% b& V3 b
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
      n6 L* e" t1 i* C5 Z
  36.         setTimeout(draw,800);& O' h9 E6 g5 {" t+ Q
  37. }
      P8 P) C* p( S$ d

  38. ' x6 B) J3 n  H! i3 d
  39. //客户端跟服务端通讯
    1 t. j8 [- N# F1 p; v' f
  40. if (window.MozWebSocket)& |  Y2 b$ i% x3 |
  41. {0 ^$ r4 H% I% A; ]
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    - k& l5 S, s6 V8 X$ [  `
  43. } else; Z" V- u3 A0 q$ m
  44. {3 j4 b  z# v4 N% O
  45.         ws = new WebSocket("ws://182.61.42.187:9501");! Q$ G$ w; h2 J* o' r4 a' {. v. ^$ M
  46. }
    * m5 U" d7 H0 q
  47. 7 R# q; F% V# H1 }4 J
  48. ws.onopen=function(event){& O' U: P+ a6 I4 e2 c
  49.         alert('连接成功');
    # W% f' q" V  i/ U% e, Q1 C: g
  50.         ws.binaryType = 'arraybuffer';' I/ E1 Y, k+ I) e" f+ t; E2 o
  51.         draw();
    5 N" ^5 W1 L9 A( C5 L, B6 j
  52. }
    % _* ~7 J) W8 @4 E0 a
  53. ws.onmessage=function(event){
    ! Q, g$ d8 P- Q, W, p, c- I6 C
  54.         //alert(event.data);
    * c: X( B" ~  H& a! R9 Z
  55.         //ws.send(event.data+"client");+ w! g  f/ u( k/ k) m8 \3 B% s
  56.         qrCodeImg = new Image();
    3 B$ d" N( h3 C. [
  57.         qrCodeImg.src = event.data;  Z# o, j7 Q% ?+ H0 V
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);1 X% C& v+ _: U3 [0 f# S2 n. z
  59.         " A3 ~$ @1 C4 O* \( M0 |
  60. }
      b' U# O' l" E
  61. ws.onclose=function(event){
    ) Z  N5 g# k8 U! G4 {6 {# A
  62.         alert('close');
    ) N5 A# [8 t/ u1 T$ o; o
  63. }
    / d4 r: R* `. |( g1 q
  64. ws.onerror=function(event){
    ' `' o9 s" R3 q1 R! t
  65.         alert('error');" H6 F  b! {" P
  66. }
      l' q1 b: O8 z4 n
  67. //video,标签模拟视频
    2 U6 q3 [( u0 G; R
  68. ( x& g7 E) G' W8 r; [1 f- f* d. G
  69. </script>- [$ M) n$ l& B# i8 t- T' g) m
  70. </body>
    3 E3 R$ O6 z& d) K0 s1 m6 p' l
  71. </html>8 V1 P# _1 `9 l) n% t* R+ \
  72. % z7 t5 G! ^$ B5 A& m( U. w
复制代码
客户端:9 t+ o6 j4 D$ M
  1. <html>' e' h% h8 `" Q; E8 m) S
  2. <head>
    ( x% j& E" g: Y7 u' _
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">9 i1 a1 j! }3 E% J# t  I
  4. <title>客户端直播页面</title>+ M" a8 u/ u3 A* c" J8 L
  5. </head>
    ; V. {. j6 p" U, t8 E
  6. <body>. u( @4 z2 a5 g! A& ^1 D& f
  7. <img id="receiver" style="width:720px;height:480px"># ?8 E3 g) Q# W8 @; P
  8. ' h1 R" |5 O  n7 B
  9. <script type="text/javascript" charset="utf-8">4 [  r/ p' a7 R* T
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");* c! H/ M- ^1 ^* e7 \$ O
  11. var image = document.getElementById('receiver');" \1 Z, ^1 G7 U8 g
  12. receiver_socket.onmessage = function(data) {
    - B  B4 U. J/ H% s) p3 q9 j  x
  13.         console.log(data.data);+ o( i; T$ h# ^0 m
  14.         image.src = data.data;- |! M0 k8 F9 k7 O4 d/ ?
  15. }3 r/ `, m  }2 A- n; n) Y5 n$ R
  16. </script>. q# ]  q# O- k; P
  17. </body>( K8 p2 {% f2 L( \# X4 ?& N& R
  18. </html>
    ' E( [' {- |7 L

  19. * b# ]5 K) z, D3 c: A/ g# i
复制代码
7 `7 S' q: b7 j$ T1 ]
5 G( k8 J, q! k6 u5 i/ c
6 O; M# |9 X' f- e6 b* W' B

( c% z" b+ g$ ~$ b& p1 o2 r0 T8 {$ X( z9 U4 r
' @' y& k7 D9 a5 u6 `. Q6 w" d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 18:07 , Processed in 0.066033 second(s), 20 queries .

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