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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
8 ]: C3 g. a/ l* e4 y) V
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);- M. C" i6 e7 A/ `: j( m/ y
  2. $client=array();' V3 ]  o2 i! @( ?( T) {$ k& I% l
  3. $serv->on("open",function($serv,$req)use($client){: l2 ~+ A1 W, A8 m! v
  4.         //echo 'connect'.$req->fd;
    6 _/ ?9 U9 h1 \6 m3 A0 y! S
  5.         $client[]=$req;( N# M# b" f5 I/ @1 t% g  _
  6.         //var_dump($client);
    3 h4 ^) d3 @1 C6 _- C0 i
  7.         $serv->push($req->fd,'aa');
    2 Q. q9 ^6 f1 e, Y4 a( T
  8. });
    ' {0 e2 }9 w9 g" Q7 H* a! p* T  \

  9. " H, }2 O2 ~$ z; Z2 c& I2 ^
  10. $serv->on("message",function($serv,$frame)use ($client){* [! G  P( A$ Z: X6 h# ]% D
  11.         /*var_dump($frame->data);8 b( [$ j0 B% p  E
  12.         foreach($client as $key =>$val){
    + y4 W* T' G2 |; A" s1 g& i9 ^! }
  13.                 $serv->push($val->fd,'aa');$ a7 ]2 V8 u$ n5 Y
  14.         }*/" Y; x4 d; N. f- s: y
  15.         $client=$serv->connection_list();$ T( e: D1 Y9 l/ Z
  16.         var_dump($client);* d" {& g* t- U# V0 P3 D5 X. ~" _
  17.         foreach($client as $key =>$val){
    & M: T/ P2 J% r6 |, w
  18.                 if($val!=$frame->fd){  K, z( m$ g* [
  19.                         $serv->push($val,$frame->data);
    ) r, N2 C5 \6 N1 G" }
  20.                 }
    * i9 l2 C5 j/ Z+ y/ T+ S, R4 a
  21.         }9 i4 X5 {6 A3 L; ?  z8 O9 }& s+ Q
  22.         
    9 b, h! a. h& ?, J3 A+ g# Y" E
  23. });* W+ g; i1 O3 x/ O  ^
  24. : y. S" }1 ]6 w: i
  25. $serv->on("close",function($serv,$fd){
    0 s* @0 R& N1 H, T
  26.         echo 'close';
    . @2 R1 K0 Q! H) E  }/ n1 o7 S
  27. });
    ! {6 p  j- d( u
  28. ; X3 t* N& v! q
  29. $serv->start();, v( Q9 u* A) K& c6 Y

  30. 2 W% b  d* h# c+ \* g* d
复制代码
主播客户端; j) v! K, R0 g. W
  1. <!doctype html>, @7 I/ ?5 f" c) m  E; y9 v: P
  2. <html>) w/ z# d# c) m- n" n( ~
  3. <head>1 Q6 U- S- k* F* h, v
  4. <meta charset="utf-8">7 ^6 T8 d# E$ j& N# f! r

  5. ! R  W( j0 q' d6 o; \
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">0 A! f( ]. h0 v- o4 t/ z9 U
  7. <title>404</title>+ v7 e4 r- `2 J- w
  8. <style>
    + U0 Q& X) o* l* O& p2 m9 T
  9.         body{
    1 D3 D* X2 u  F; H" J5 k/ A, M
  10.                 background-color:#444;; q. w) a9 |8 n4 z( ^
  11.                 font-size:14px;
    " E3 t. r7 n5 p+ }, g  _, I& H9 X) }
  12.         }  j1 O8 g3 k! G7 N8 l( Y
  13.         h3{
    & j6 M) w' m! O( g0 |
  14.                 font-size:60px;2 e  v5 ^9 O, t3 P, `& K" ?0 ?& E, s3 P
  15.                 color:#eee;$ O" ?! o+ {4 p$ y) t+ P; H2 Y
  16.                 text-align:center;
    3 A! A8 m. j6 Y7 x% |
  17.                 padding-top:30px;
    ) k* l! ]& I2 A4 I$ z. O
  18.                 font-weight:normal;
    2 X( o+ f! Z5 ^3 V6 w- {# j8 K8 ?0 O
  19.         }
    ( F0 F9 B. r& i1 E. d; D4 Y
  20. </style>
    8 `' D+ D  {; P3 P) l6 `
  21. </head>
    4 y: |- p' H! }2 ~6 P! X, y

  22. " L1 n6 N, G7 u3 e" Z+ a
  23. <body>- C4 e, ?8 Z" ?
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    2 B4 x! w- I' N' r7 _, x
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    / E6 D1 F8 U5 R
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    / d, n( n6 M; f. j7 j
  27. <script>' \7 u+ _6 A+ ^& s1 N0 D1 ^
  28. var video=document.getElementById('video');+ Y9 L9 M( Z: {; a+ p" g- A8 U  p
  29. var canvas=document.getElementById('canvas');
    . l+ J' [  I6 [) w6 p: i( ]6 y
  30. var canvas2=document.getElementById('canvas2');
    : H1 H1 C7 W$ ~
  31. var context=canvas.getContext('2d');
    : P( _* J( i) ]& Y, t& i
  32. var context2=canvas2.getContext('2d');1 i. u  D( I! p% Z
  33. function draw(){2 U8 @" O9 R: G6 U( U
  34.         context.drawImage(video,0,0,400,400);
    " l' Y* x) Q. x; i5 z) f( Y
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));; J7 I$ G) |7 M' |) S  y$ V' L1 P! r
  36.         setTimeout(draw,800);. r8 ]$ Q8 f* m4 o8 a/ r- S
  37. }
    6 e% N8 F# w, r5 S* V1 z, B2 |
  38. 3 H+ I% m- E# b& A. b! P. K
  39. //客户端跟服务端通讯
    - s2 G3 K1 w* k& H9 n
  40. if (window.MozWebSocket)% A# W9 X" s1 h* b! {
  41. {* u9 g3 B4 ~/ ?9 B
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ; a8 y0 ]5 C9 s/ ]7 r' H2 o
  43. } else
    # M& G1 {9 X4 }0 n9 C1 j
  44. {8 g/ p, w! V/ H4 Z6 e- H7 I5 f
  45.         ws = new WebSocket("ws://182.61.42.187:9501");8 Y* m+ b  Z2 g' V9 ^
  46. }# N# ^: I) d5 m. W6 r

  47.   f6 b6 n- w* G8 z, X% h& f3 C
  48. ws.onopen=function(event){
    8 `1 S$ X% b5 N) g; e& m$ E
  49.         alert('连接成功');( D. I; Z5 C  ?6 a5 m
  50.         ws.binaryType = 'arraybuffer';' i  v0 B1 O% t. e- ]
  51.         draw();
    4 V/ U  \! D9 c/ }
  52. }4 D  M! e5 d$ W* x) l. B" O( S! P
  53. ws.onmessage=function(event){
    ' s$ F8 v. y4 s" Y( Z/ O6 d
  54.         //alert(event.data);3 E5 [$ `3 x& U9 P2 i) z1 x
  55.         //ws.send(event.data+"client");. K5 r  ]' ?& g6 l  Y) E& p
  56.         qrCodeImg = new Image();( o, y6 _9 ~7 M- D9 ]8 l4 w
  57.         qrCodeImg.src = event.data;
    . e2 B1 K/ c; s9 S3 I; z% I
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);6 I' \" f) w  K5 U+ p9 I
  59.         
    2 X! F, ]# T! S$ I* x7 B
  60. }8 q, ?- y) K0 P/ A: b2 P# y
  61. ws.onclose=function(event){! u7 u  j5 G. k
  62.         alert('close');
    0 w6 \) o: L$ l* V4 ^9 E
  63. }
    ' u( m# d7 g9 z0 Z; @  F
  64. ws.onerror=function(event){6 O5 o! b# {5 T  ?3 t* @( U6 p
  65.         alert('error');
    8 G% p9 k# @7 M, P' L: q
  66. }
    3 ?: W! U% H' H8 |) H  [3 P4 l
  67. //video,标签模拟视频6 T. D8 y3 `+ r* Z( f
  68. 2 E, P0 P' K4 Q7 k
  69. </script>
    " `, E) K" j! C3 O* ~6 H
  70. </body>
    & ]2 _9 v. M+ w# v
  71. </html>
    $ Q% f8 X, I, ]% I7 }
  72. 3 k) l9 n" f4 t2 [8 k; k: p$ M
复制代码
客户端:# d* l( Z9 R' ~7 L# r
  1. <html>2 U# Q" F" N5 U! p2 i. D8 Q
  2. <head>% Y. v/ I, O' F$ w/ m' K7 k( h
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">+ s6 O: D; C0 H$ ]9 c) h
  4. <title>客户端直播页面</title>5 v5 y. X. H! D! G' Y0 O
  5. </head>
    # d- H  H  v/ t* f% z
  6. <body>
    7 l/ l6 a) H3 K" E7 G% H+ S; D5 U
  7. <img id="receiver" style="width:720px;height:480px">0 ^. o/ q! ?# S8 g" x
  8. 6 K2 z/ G1 n! H, i5 r7 J2 S
  9. <script type="text/javascript" charset="utf-8">
    , l/ E: \$ P7 d% i  U3 E
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    * C+ Y8 U% K) m" e, B, R( W. Y
  11. var image = document.getElementById('receiver');- ~* G6 v! _* H5 R3 n, z+ k& O2 }
  12. receiver_socket.onmessage = function(data) {
    7 B# Z5 \$ g* W6 x
  13.         console.log(data.data);) {. }8 [+ W! |
  14.         image.src = data.data;( J# b) j; V0 V  {3 T
  15. }3 g+ {- k' k* Z! w- ^
  16. </script>
    2 q! L/ s" K( \; i6 x
  17. </body>
    / q1 L0 f. \6 y) v  Q  ]* s$ R7 }9 F
  18. </html>
    * N  I+ I1 x" p- f  J& w

  19. $ m. d/ _$ z2 O# d
复制代码

# o# j0 o- ?% V- O* w
, O+ z0 T. v5 W! T: {9 L1 T' w1 I4 p* Z6 q: B: p. r5 p2 I6 ^
& `1 m0 g& `! p* n

* j5 D0 i% X  L: g0 M! ^0 g% J6 v; X" N1 z# S1 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-4-20 20:29 , Processed in 0.130522 second(s), 19 queries .

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