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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
$ P/ N* `; o" R
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    . M" \+ r1 |+ u2 l4 w, o7 {& i
  2. $client=array();7 k& |6 B- Z8 ]! f' Z. ~
  3. $serv->on("open",function($serv,$req)use($client){
    . J4 m" {) I4 E: K: _% u
  4.         //echo 'connect'.$req->fd;2 O1 I% j& }# u' Z, k' V& K
  5.         $client[]=$req;
    2 f9 J) T6 q# |7 Y
  6.         //var_dump($client);5 Y6 z  r8 E1 @+ g/ s/ k9 f- Z
  7.         $serv->push($req->fd,'aa');9 W7 r0 ^  K0 w. r; O
  8. });
    7 l6 f1 R, c: b+ y+ r" A' M

  9. " c7 M9 J& X- }% x
  10. $serv->on("message",function($serv,$frame)use ($client){& V' {7 z: ?1 [0 L- Y
  11.         /*var_dump($frame->data);
    # t; r* y, I( r/ C' Q! A- ^
  12.         foreach($client as $key =>$val){
    : d% R( b5 C: R
  13.                 $serv->push($val->fd,'aa');
    ( g: K- I' e4 w# F/ n$ x# @
  14.         }*/3 c6 |9 J( m+ V2 a% D9 M
  15.         $client=$serv->connection_list();
    - t/ r  o$ U3 I. o$ J$ K
  16.         var_dump($client);
      g5 S% U5 \& J' L5 ?( ^
  17.         foreach($client as $key =>$val){
    ! `% |9 h" I2 \! y4 A- H
  18.                 if($val!=$frame->fd){+ Z  H9 {2 \  e6 ~  M1 X4 ^
  19.                         $serv->push($val,$frame->data);, B6 P/ e9 I- M+ l7 h: ?
  20.                 }$ O4 t! h! p) B8 I7 p  t4 M
  21.         }$ r, \+ g( r. \7 l
  22.         ) I; |" ?. q( [( P( ~
  23. });
    ) G  n( z- J$ y% ?4 j) d

  24. 4 A2 O/ O9 D& ?5 V6 P2 K9 w
  25. $serv->on("close",function($serv,$fd){/ X7 ]2 u' k+ d8 v5 Z
  26.         echo 'close';8 X! G0 |4 ?9 u+ q
  27. });4 z9 q3 ^9 i0 E0 a6 F

  28. % R  X0 Q; ]! I; |1 k5 X! Y
  29. $serv->start();9 n% V: O' }$ k% [

  30. 4 }3 z1 T/ o3 X8 `
复制代码
主播客户端
' h: j. e9 ~3 S$ p
  1. <!doctype html># i4 O1 ?( g: v6 D, E
  2. <html>
    ! N0 R3 @$ h- w+ l; I. \
  3. <head>
    " o) J  I, _. _: `" T& ]& K& n
  4. <meta charset="utf-8">' K* C% M0 j  R
  5. 4 G) N/ W, ]0 O
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    $ p3 T: v; q5 k
  7. <title>404</title>
    . [* j2 O: z# g9 ?. V
  8. <style>3 o2 Z' |9 u* c) j, T
  9.         body{
    3 O# a6 K  Y" [" k
  10.                 background-color:#444;$ N6 O+ T& v8 j' W5 ^0 u
  11.                 font-size:14px;
    0 H( g( \4 N4 f9 O3 F& D
  12.         }
    ; Q7 s- ~4 D; Z$ F# N
  13.         h3{, A! }1 J3 L3 i2 K  d
  14.                 font-size:60px;
    8 J9 C4 V7 C; s( q/ t" S: j0 A
  15.                 color:#eee;8 E; D+ m9 L9 d, W+ q
  16.                 text-align:center;
    5 G/ A& T9 h7 r: {
  17.                 padding-top:30px;* B2 L# Q. k6 {* q8 u$ N2 r
  18.                 font-weight:normal;
    # C+ j# W9 z7 h- t  v
  19.         }
    . ?3 L0 u/ o$ K6 D0 \' y
  20. </style>) t1 {7 w: L9 |7 R
  21. </head>
    . `0 q! I2 P! Z* \: }

  22. 3 Y# j, B% P1 T" q
  23. <body>5 [) T& s- e4 {( J9 S" i
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>7 L4 e& b" o: N( X) H' Y: D
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>& U  k2 m& j  q/ {
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    4 W/ w( O" D) v1 V' [
  27. <script>/ C/ m; i. T- M
  28. var video=document.getElementById('video');
    2 X3 L5 t1 d, s
  29. var canvas=document.getElementById('canvas');
    " I1 ]5 [5 u# S  x& I/ R
  30. var canvas2=document.getElementById('canvas2');3 W, w. X" R9 Q; q
  31. var context=canvas.getContext('2d');
    0 Y  Y) w2 r$ H: F- ~/ h$ B$ }
  32. var context2=canvas2.getContext('2d');
    % d% Q) _' g# a4 U; S, k4 V+ M
  33. function draw(){
    ; @% e7 @0 v6 |& `# {
  34.         context.drawImage(video,0,0,400,400);* L  x, k/ b1 f0 `& D$ k# v; h" s
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));" C# j/ r: B& t9 m7 s6 |; M
  36.         setTimeout(draw,800);. d! c8 Q5 o9 P6 G  Z) b5 z
  37. }
    # g; K5 u2 l: h- {' Q& N
  38. . `, N/ l* k! p2 A
  39. //客户端跟服务端通讯7 E! z2 e% A# P* }
  40. if (window.MozWebSocket). h1 c) R9 B& r& z: S, `2 Y! ~( [
  41. {
    - c& C5 h6 ^1 _' O6 c; ?) Q
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");: U+ Q0 D$ y6 y- [) [4 ~7 f" o; A
  43. } else
    2 C/ ?3 k: ?7 [* n" s$ m4 ^
  44. {$ P' e- n! J" m; y8 G# J
  45.         ws = new WebSocket("ws://182.61.42.187:9501");+ e' ^( M+ M5 u* f
  46. }
    / t: G: D  d! D# f9 F- g4 m. y
  47. / ?( t- Q9 H# C+ a6 a: d5 w
  48. ws.onopen=function(event){
    ) K. X4 p- q& [4 M& i
  49.         alert('连接成功');6 a" g7 h1 f. t: I' y" d7 ]) @% k
  50.         ws.binaryType = 'arraybuffer';1 a; e6 I/ R; D  _* C
  51.         draw();
    + P. Z1 n" }# g, m5 i2 L/ N
  52. }
    8 s1 i2 c# j+ Q/ P/ Y
  53. ws.onmessage=function(event){: _2 ^/ N  Y  |. }
  54.         //alert(event.data);
    : @' F# n9 q$ l( f9 o
  55.         //ws.send(event.data+"client");
    + h* _% N& t" h1 l% P
  56.         qrCodeImg = new Image();
    ( |- s: n+ p5 B; _* _! s
  57.         qrCodeImg.src = event.data;
    7 o" w% {" n: {; x* g# Y
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    / v# J6 w, h+ d1 L3 w5 `/ Q( f
  59.         
    ! K7 d) E  [  d4 V  F9 Q6 u# t
  60. }! Y/ x- `2 @/ b6 I
  61. ws.onclose=function(event){
    7 N0 p8 r$ z* H6 I
  62.         alert('close');7 g/ f3 p9 J( G  ?7 i
  63. }' x. W' ~3 _( \: Q0 l) r
  64. ws.onerror=function(event){7 C, s+ `0 x& D9 {, I6 t
  65.         alert('error');& u8 B" a2 |4 r, |' N* Q
  66. }9 y/ D; T; C- G  F+ V0 n/ M
  67. //video,标签模拟视频
    + n# _) d) E1 V2 K' w
  68. : F7 S3 S& K# D% F5 S4 V" ?4 P& C
  69. </script>' F, Z1 `3 D" z0 m7 E% P
  70. </body>2 g0 e! i& x8 R% b! @. E
  71. </html>  ~3 e6 B, ]' g
  72. 3 B# i8 \" `4 o& S* j% y
复制代码
客户端:
/ C! O7 t2 b1 X+ _' o7 _
  1. <html>0 ~6 y) O2 R- {7 p8 C8 S
  2. <head>
    3 M$ e  j8 J6 M) ?1 P: u1 S
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    ( \. V7 j% S4 B8 {* D. a! `- x  n
  4. <title>客户端直播页面</title>0 T1 r6 d1 l' p  Q) w
  5. </head># N9 z" n+ ?1 X2 f, @
  6. <body>
    $ B! I5 t* ~, O5 D4 r
  7. <img id="receiver" style="width:720px;height:480px">+ [" F  C' c2 B- _
  8. 0 n; c5 l+ z1 Q$ f# z, B
  9. <script type="text/javascript" charset="utf-8">) j# E2 J) a3 G
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");9 n! |6 f7 S/ L* L) r% u" v4 c- k+ R
  11. var image = document.getElementById('receiver');
    : o* J( g: ]: H6 J/ g
  12. receiver_socket.onmessage = function(data) {
    / t) E# d2 A% p1 q+ V, {
  13.         console.log(data.data);
      t& C0 w) F$ q: R
  14.         image.src = data.data;
    / h8 M5 S- d9 ~
  15. }
    6 b" I5 \* `# l8 J& T5 p
  16. </script>" K$ O* M0 B! A! X1 W8 k
  17. </body>/ }8 e7 Y6 {& j0 g$ C( W
  18. </html>6 M: i8 F8 a8 O) g2 I& f* a

  19. 3 J) W+ j) y8 @" y
复制代码
6 s! v6 u# a+ H

' A& v% a7 S. T# J& v7 l  k/ o1 L* k4 Z& B

) H9 A7 D, U3 ~0 k5 Z& f; C" [! h

  y0 v. l* Z9 X! X& n* n8 C3 O& P$ E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 07:09 , Processed in 0.047197 second(s), 19 queries .

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