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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
服务器代码
; R- d; d3 l; E3 `7 t" S
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);2 h7 z) V! T. E1 O4 x6 Y% D* m
  2. $client=array();
    ' M) J( |1 F5 H, a" P
  3. $serv->on("open",function($serv,$req)use($client){
    : p& c: {1 h1 O+ d
  4.         //echo 'connect'.$req->fd;
    . r5 Q; D0 P6 f$ Q
  5.         $client[]=$req;
    0 j/ n% x% R4 x  M2 E7 b! e) \7 [
  6.         //var_dump($client);7 {. Y+ d8 j% F+ S* m" n
  7.         $serv->push($req->fd,'aa');/ N, a7 y6 b+ F2 q0 E9 H
  8. });; Z5 T' {, C& X. W# K% e# G
  9. 6 ?$ K$ \7 C8 N7 y1 P0 T
  10. $serv->on("message",function($serv,$frame)use ($client){
      i% L! X7 E) \7 ?
  11.         /*var_dump($frame->data);2 j- r2 ^. u6 a/ i1 X
  12.         foreach($client as $key =>$val){
    & {3 t6 e% w' t$ ~+ u+ {
  13.                 $serv->push($val->fd,'aa');
    ( T( f3 q9 O" S9 `' I* ?
  14.         }*/! g2 ]9 s9 u1 X; R5 {
  15.         $client=$serv->connection_list();
    & V7 ]: \2 q3 X9 C
  16.         var_dump($client);
    $ b" P: I3 t1 v% a5 `
  17.         foreach($client as $key =>$val){
    ; [) S; q9 C0 k
  18.                 if($val!=$frame->fd){
    : d( D3 P& d; ?6 J+ R% }
  19.                         $serv->push($val,$frame->data);1 G! F; c9 q6 T6 Y
  20.                 }, N( A7 l* ^3 \( f
  21.         }
    7 B" t# A4 A4 G3 V
  22.         
    ; r! B3 R* Z0 A4 }/ ^2 k% f, J
  23. });" s8 R: O; O/ F

  24. ' T1 O8 V# P" E9 o' N0 Y
  25. $serv->on("close",function($serv,$fd){
    - H4 P: G/ G4 f% G
  26.         echo 'close';
    " T9 ^- `3 I) l( [1 Y* q
  27. });; J4 Y3 e2 Z& ^; c6 N  h3 G

  28. ; X7 [8 E/ ]' F% Z# W' I0 g
  29. $serv->start();
    0 Y' j- e& [* S& a# F

  30. 2 C' d" g) H& d) H/ j; k
复制代码
主播客户端
0 N* \' j4 c# T; \
  1. <!doctype html>- j4 z# p  ^& W' P) K
  2. <html>
    ( L  S7 X  Q! L) O9 A
  3. <head>7 j4 Q6 h) S! X! s- t( q
  4. <meta charset="utf-8">
    ( x+ {4 T5 n2 Q8 H9 Z

  5. ; K2 t9 u5 I# X- |. T% w, L$ y5 p
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">: z1 j+ U9 A: w6 H
  7. <title>404</title>
    6 o, F9 e& z( m# b/ s3 x
  8. <style>
    , {4 C* Z3 u4 D3 T1 ?1 y! l
  9.         body{5 X5 S; b# M* c# u
  10.                 background-color:#444;
    - }6 b/ l) m# X0 o
  11.                 font-size:14px;7 w5 e' V( u7 m% |
  12.         }( f) U3 F$ x$ u+ m! ^
  13.         h3{
    , F$ P( Y1 \. q" Z
  14.                 font-size:60px;
    " V  R- X4 g) M$ E; M5 Y7 \; q
  15.                 color:#eee;1 e$ A4 F* q+ X
  16.                 text-align:center;
      C$ t+ o! _2 p  J; n
  17.                 padding-top:30px;
    & y: ^# x& c  ^6 ^" D' ^  a" q
  18.                 font-weight:normal;7 o2 q# m2 K/ }" I% p
  19.         }2 k/ X7 L; k2 ^4 `0 u
  20. </style>$ A  W3 g4 K* a3 f. q( k! K
  21. </head>
    : U7 R* s3 Q7 c5 e5 Y+ h0 `

  22. ; \, Y" d$ x0 `- t6 G$ ~
  23. <body># r! }7 }! T, L3 r
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    * t; m' h& T$ f+ L
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ) d7 c' Y4 _4 J8 Y: W- ?7 {
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    5 V+ H, H- f" ]
  27. <script>4 o- y* h/ I# |% o
  28. var video=document.getElementById('video');
    , |# p  N- i& Z% p3 M% c2 }
  29. var canvas=document.getElementById('canvas');
    0 p  u% A0 r" f; C6 j
  30. var canvas2=document.getElementById('canvas2');5 V8 p2 O; d5 P1 W
  31. var context=canvas.getContext('2d');
    + C: l1 Y/ j& k- B: ~
  32. var context2=canvas2.getContext('2d');1 ]9 a" r9 n& N7 Z5 s1 k
  33. function draw(){
      f5 I& P7 ]* m2 L& j* g' e
  34.         context.drawImage(video,0,0,400,400);% W1 J4 q+ b) {$ S. p* b4 M  u
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    ' ?% X2 Q8 E; X
  36.         setTimeout(draw,800);/ R4 [. U4 W# r2 n7 S; Q- @
  37. }
    . F. E  J' Z6 S! I
  38. # ~: l" _- \7 j' i
  39. //客户端跟服务端通讯# Q' b9 H9 L# E" i8 D
  40. if (window.MozWebSocket)- n* [. j: c( {
  41. {
      E/ V0 W4 p0 k, V9 E" K4 |* G+ w3 Z
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    0 j; {& j8 n4 X7 B
  43. } else
    : s+ W% e9 x7 L: D$ V
  44. {: E+ O- n; G$ B" J) ^& B
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    2 s6 \) g  C; F  e( p+ h
  46. }( U" h" O+ `# \* M3 f. h0 m2 s

  47. 4 Y( W% S9 g. e3 A* T4 ?. e
  48. ws.onopen=function(event){
    # U/ v# E% z' p
  49.         alert('连接成功');
    6 _" c3 H5 [% J8 }- J
  50.         ws.binaryType = 'arraybuffer';, d) M; Q2 p( X- f2 S1 o
  51.         draw();5 r' x  X1 N, M5 @' L
  52. }
    7 @+ c) e5 U& u+ _( V
  53. ws.onmessage=function(event){' g5 f7 g1 G  b5 S
  54.         //alert(event.data);
    6 Z: E( h$ t: V
  55.         //ws.send(event.data+"client");6 Z3 L0 G* d8 s0 r8 W& \! z& H
  56.         qrCodeImg = new Image();
    ' x# q0 L* W. Q4 A
  57.         qrCodeImg.src = event.data;
    ) _. f, H' [2 n( b* j- I
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ! \- }5 s" u3 ]6 Q6 w* n
  59.         5 n" t. `( j0 N& N) X- L/ f6 d# q, D
  60. }
    , H. X7 C$ u, o- i
  61. ws.onclose=function(event){
    2 n' u+ P; O, g2 o6 ?' A
  62.         alert('close');
    0 W  I0 l: U4 Q8 g
  63. }
    4 G/ v2 O% Q( Q0 a
  64. ws.onerror=function(event){
    1 C" v+ \6 ]% C! P' Z2 V! Q9 i
  65.         alert('error');6 i% |; N: `0 N$ c2 O
  66. }
    5 i; u0 X( U8 {$ P$ `0 j
  67. //video,标签模拟视频
    ) d( [+ L' ^; N
  68. 0 S/ k4 W( G  B2 l+ j; K
  69. </script>1 ]" f4 q7 T6 A" G$ U% o
  70. </body>
    7 ]" ^, A0 m' n+ Q" u8 o  K
  71. </html>7 J  R) L7 Y! B0 m) }0 p+ k- A

  72. ' `. s3 P' c" B( N9 t  u
复制代码
客户端:
: L7 h  y% ^9 C, i
  1. <html>
    $ h! h6 V# B  b) K7 h
  2. <head>
    ( D, x4 J) t" E; M
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">/ `+ F' x% @: j4 O! W8 h6 }* `- a
  4. <title>客户端直播页面</title>
    6 K! N% m& p% B8 R3 X
  5. </head>
    3 Y$ r, r7 Q. m  A# N8 @1 y% h0 n1 c( j! B
  6. <body>; r4 [& G2 n, c; s; b
  7. <img id="receiver" style="width:720px;height:480px">" N% R5 J! v, ]! w+ Q3 n8 j; j

  8. ( z" v7 M  e7 {: ]" ?) t
  9. <script type="text/javascript" charset="utf-8">! P5 M$ b: v! I( ~4 H6 C9 E
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    # c3 w) [) A8 v* \7 l( h
  11. var image = document.getElementById('receiver');8 u; I6 R' f3 L# N1 m6 Z1 d
  12. receiver_socket.onmessage = function(data) {
    , {* @2 ~* p% H: i" t& r. g
  13.         console.log(data.data);+ Z5 d0 _% |* n4 M7 {9 R
  14.         image.src = data.data;$ L" ^( r6 B# g) g5 r
  15. }
    & m' o# N$ J1 g0 B" b: \) E
  16. </script>
    % l8 D3 S) Q0 }0 u! R
  17. </body>+ w8 z2 K$ j$ ^! L) w9 ?8 R
  18. </html>
    ) |4 U) Z7 C3 L: z& Q/ D
  19.   Z( U* Y0 O4 K6 ?
复制代码

+ O8 J4 O; O  k
. D: M+ }7 {- ]5 i' ?8 z; |/ T; S
$ M" ~! E" \( A
; z! z6 \8 ~5 y, Q, R- [, e3 W: v
2 D, v+ b, N' ^1 C" a9 p! [$ ?! k& t+ S: U! n" G9 u: @! w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-4 13:17 , Processed in 0.118935 second(s), 19 queries .

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