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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
; L" F! L5 G1 ]  r! a
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);( [  l6 N* t/ g# {
  2. $client=array();
    1 N; n, z5 a9 U
  3. $serv->on("open",function($serv,$req)use($client){0 A, u5 f6 @$ p0 E9 q8 n( q" O- l
  4.         //echo 'connect'.$req->fd;- _0 i7 r9 ^$ |) Y% Z
  5.         $client[]=$req;
    # E1 U+ S# O7 k9 b1 f( O' u
  6.         //var_dump($client);
    8 I- u/ G, |9 Z- T+ |3 f
  7.         $serv->push($req->fd,'aa');
    : F% E3 V6 u( K
  8. });
    # G6 |1 r/ Z, I
  9. ' V$ h2 t1 _$ V! s+ l. Z
  10. $serv->on("message",function($serv,$frame)use ($client){0 M" m2 l  M+ p/ I3 K5 l8 m
  11.         /*var_dump($frame->data);
    7 m8 e3 E* y% i
  12.         foreach($client as $key =>$val){! g0 b& \# @( [5 O
  13.                 $serv->push($val->fd,'aa');/ r0 n! m" K9 Z, u* B! J! u
  14.         }*/% d# V% p' F/ n+ d/ a
  15.         $client=$serv->connection_list();- [  F% l: s$ E4 q" e# F6 \2 E/ e
  16.         var_dump($client);5 u" q+ b8 m: i0 z$ j, a
  17.         foreach($client as $key =>$val){7 A, U) j- D6 q" [1 L$ n! c% u
  18.                 if($val!=$frame->fd){
    ! N0 _' n* c4 _/ T8 b9 y
  19.                         $serv->push($val,$frame->data);
    $ W; L7 h/ Y; T8 b5 E# B2 ?& z* K
  20.                 }
    " b0 h4 ?7 L) g/ r* g1 G& o( n* g
  21.         }. s0 M7 g3 A. P% d
  22.         # J3 i6 M6 e/ P( x9 G. T
  23. });
    4 y  e7 _! s; V
  24. # o% \6 P  c- p6 w3 }; z
  25. $serv->on("close",function($serv,$fd){
    : @5 w- @7 L! `4 b; h" K- ^  N% t2 X
  26.         echo 'close';
    6 w5 }+ b, f/ @
  27. });
    9 G8 S" t+ p  c( M
  28. ) s" R% E* Y7 S( B( M7 r, n: x4 C
  29. $serv->start();
    2 S* C- h% q9 [( \

  30. ' S+ n6 r8 g% N' ]2 V
复制代码
主播客户端9 L9 Y7 n6 P2 ?0 l1 @- Z' h9 w
  1. <!doctype html>
    7 S% h' m6 n# [2 s
  2. <html>
    - d! W' W/ S: X0 ~8 v1 P: U
  3. <head>& P" x1 m' t4 v" R+ n
  4. <meta charset="utf-8">
    & I# I. G* h+ ]

  5. - D( h9 N: Z& J! s$ n1 i4 d  m( G
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"># D  B9 v9 p; Y8 b# S
  7. <title>404</title>
    4 A3 [6 q  R) f6 g
  8. <style>
    5 \9 t' }$ L; I5 }6 t, j
  9.         body{
    ( w8 H* P' w1 B+ w
  10.                 background-color:#444;8 m+ A& V6 s- O
  11.                 font-size:14px;
    ) M  x/ K# y2 \0 x5 u, h; q7 ^
  12.         }2 Y% [, P, {! h' O, A7 @
  13.         h3{4 _7 M/ T. c3 _  z' @  x  F1 U
  14.                 font-size:60px;
    4 r( F' u, ?6 `: l
  15.                 color:#eee;
    ) ~: P' R3 ~5 u: b) e, O
  16.                 text-align:center;3 N! Q+ D* Z8 r% q) @; V
  17.                 padding-top:30px;
    0 o* {2 X1 d. Q2 ?$ \
  18.                 font-weight:normal;
    + L. @1 c' N" o" w
  19.         }; J2 ~  `- _$ D% L+ E0 @
  20. </style>
    7 \+ t" z# `# i0 C/ e- m7 |
  21. </head>
    9 ?# C8 ?6 H  H' ]; L" F2 s5 @0 ^
  22. 4 S7 `" n* q& C$ @+ _4 B
  23. <body>! t! a/ Q; L3 Z3 A
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    # L9 f% \* b' s$ O
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>& q4 I* @' E4 M# \# X  G
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    5 K7 @) u& c. z# w7 d* m! e# R  K  A
  27. <script>) g+ _% K, A3 `$ T" i, r
  28. var video=document.getElementById('video');7 `+ ~' s+ B6 Y! s% V
  29. var canvas=document.getElementById('canvas');
    # V8 ~4 D! v  Z* q- H$ y' n
  30. var canvas2=document.getElementById('canvas2');
    2 B4 U9 p9 o1 L$ E' w
  31. var context=canvas.getContext('2d');8 t  _+ b/ B  M3 C& E* {9 w. o' l
  32. var context2=canvas2.getContext('2d');$ t( v# s  [0 A5 q
  33. function draw(){
    & Z+ H# ^1 H0 [% M  x/ v
  34.         context.drawImage(video,0,0,400,400);
    7 N9 M  [# d# Y) g. Q
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));7 i3 I- ^- }. A1 p4 G+ p0 ?
  36.         setTimeout(draw,800);
    8 D9 Y4 g& [. i9 V' ^" n8 f  d1 |
  37. }4 l& `8 G2 i# C
  38. 6 {. J% o% ^; r: o- |9 [+ C
  39. //客户端跟服务端通讯3 R7 t, @. Q0 N1 Q: Y3 h; ^
  40. if (window.MozWebSocket); z  ~. v- J. Y' _4 _& U. S
  41. {- m+ V. v  O2 b4 D
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
      M8 W4 j2 ?1 P' @/ b5 t1 O# ~, ]* ~
  43. } else
    7 B) L5 Z9 l: g/ H4 v$ \, Z
  44. {
    ! v/ u' a9 [" u1 [9 E5 c1 \6 E
  45.         ws = new WebSocket("ws://182.61.42.187:9501");- R7 B8 N3 k3 S
  46. }
    & Q$ O  G6 S6 V) \' i9 T( X) @

  47.   m1 L+ j% S( T# Y) J
  48. ws.onopen=function(event){- f3 d% @- D6 e! F
  49.         alert('连接成功');8 }7 C$ F4 @6 Z! j3 V! o' ?' `
  50.         ws.binaryType = 'arraybuffer';5 H/ a+ ~* \5 A: X
  51.         draw();
    # S" T6 h2 {: ]  j6 j: z
  52. }
    ( Q& P4 P6 t+ @
  53. ws.onmessage=function(event){
    & a4 K* |. e$ c; p6 k1 \
  54.         //alert(event.data);6 R& T/ z: M* k
  55.         //ws.send(event.data+"client");
    ) {7 u9 b% }. i+ J
  56.         qrCodeImg = new Image();
    7 ^! P8 [/ r# V7 y6 [0 Y
  57.         qrCodeImg.src = event.data;
    ( j) J8 ^# j4 C- t
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);) ^# \! ]" u. I/ B2 F" Y$ Q' h
  59.         
    ' R$ [! v" k9 [- ~/ K
  60. }7 f5 m+ m% i, ^5 X: M6 Z
  61. ws.onclose=function(event){
    * l1 g) l8 d, [+ P7 X+ |1 \
  62.         alert('close');
    $ ]$ ], P+ H- q( [
  63. }! R( e; q. J! F% V
  64. ws.onerror=function(event){/ ^# O% |* K& L
  65.         alert('error');3 k5 H; _; Q" m- ~7 j! X
  66. }4 y3 `+ _$ B5 |+ i1 G
  67. //video,标签模拟视频
    5 L0 [% ]' x# v: k3 V

  68. + q) e! x7 Z2 ]  h- \5 ~% D
  69. </script>5 h: t  b. I: [
  70. </body>/ k( o8 D( ]& [2 C" F" w
  71. </html>
    , u" M  ^& ?! r. |( c

  72. / L8 C0 Z. |8 p( [* r
复制代码
客户端:
9 ~1 m' u. ^% O* E! ^
  1. <html>
    7 ^" h% k- e  L& s8 n  x
  2. <head>
    7 H" T% V: Y* e4 D
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">$ P- z9 k/ E' R, E) G/ A3 W8 m
  4. <title>客户端直播页面</title>! K' d8 W" h! m6 {, t# G
  5. </head>
    $ a+ ]$ I6 G/ g& j' k4 E
  6. <body>
    8 E9 v  o# n: ?# k' t
  7. <img id="receiver" style="width:720px;height:480px">
    ; d7 E5 J, _4 ~- u& f" {7 }' Q
  8. 0 a2 J5 Y0 I  R7 g# G: I
  9. <script type="text/javascript" charset="utf-8">
    " \% O4 i- g" T0 C
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    0 ?9 ?7 e, ?4 Y* m1 z
  11. var image = document.getElementById('receiver');
    4 T6 p% y$ J0 V9 f
  12. receiver_socket.onmessage = function(data) {8 c6 ~" Z: J9 b
  13.         console.log(data.data);* B4 [& a7 n" z- l2 {5 d
  14.         image.src = data.data;0 `2 l* n6 \: p5 \; H6 {7 N+ K( g
  15. }
    # M: b7 X& c* e- b7 p2 h. O
  16. </script>
    9 y# }: V# A+ B# S+ H9 x9 m. x$ |
  17. </body>" b' C/ w. j. J, o
  18. </html>+ B4 M. ]- b" v: s% \
  19. # m9 x& f) I' H
复制代码

; }# Q- w9 |- G4 Q; Y  H9 [1 |; ?+ f5 [8 y3 h( A4 x

/ x8 ]$ E( _+ \
' V+ }2 I- g$ l( c
0 {" R' |7 {" c/ K+ p* d
/ N. \+ G5 ~+ f$ R5 W9 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:42 , Processed in 0.054000 second(s), 19 queries .

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