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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
, m: X; {. b1 H% q, H6 h, U: W
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);2 V( U8 ^0 N$ g4 }8 e% v! k: _
  2. $client=array();
    % Q0 ]' @$ ~- B: h9 c) }
  3. $serv->on("open",function($serv,$req)use($client){; v% [7 ?% A; q5 J
  4.         //echo 'connect'.$req->fd;: x$ S9 R3 [) K
  5.         $client[]=$req;
    . |% `% d* c1 {  W
  6.         //var_dump($client);& B' `  A# w$ y$ X0 A; ~
  7.         $serv->push($req->fd,'aa');
    & R. i8 @. H. y
  8. });
    $ f' v0 G; Z% H7 i

  9. 2 k( o6 B" f9 y/ }
  10. $serv->on("message",function($serv,$frame)use ($client){! [: r" h. l# G- `
  11.         /*var_dump($frame->data);
    : G% Y; \' T  X% u: c
  12.         foreach($client as $key =>$val){
    . K' m1 b1 E, x  v) P+ O& b! F
  13.                 $serv->push($val->fd,'aa');3 _& l4 \6 @$ k+ e& p8 f& P
  14.         }*/
    & n! R6 S& N! [/ M, i# W
  15.         $client=$serv->connection_list();7 M$ |6 e4 N& v
  16.         var_dump($client);7 }7 z0 n5 P  X* v4 E& r
  17.         foreach($client as $key =>$val){
      ^7 S0 }8 O9 t5 d( ?8 k6 P9 j
  18.                 if($val!=$frame->fd){
    * I. s; \* N( U$ H9 q: i
  19.                         $serv->push($val,$frame->data);
    1 {4 J3 D0 T& y/ g
  20.                 }% N2 L6 E* f5 A+ p% o# C, B* B
  21.         }/ X& g4 H0 Y. `. X0 {
  22.         
    4 d" c: E% V0 x3 p  h' J) u% J
  23. });8 I, q3 z! [. b$ w7 k- B5 Y- v+ r* N

  24. $ l2 e4 M" x. `# d3 F+ j
  25. $serv->on("close",function($serv,$fd){
    / n4 S6 N9 U5 k
  26.         echo 'close';2 f. h# A, Q! X) E0 U. [
  27. });8 t2 T, u4 W7 p- [

  28. 4 F' v5 A4 A8 d! f5 m$ u+ k  b8 Z
  29. $serv->start();- ?2 ~3 b- f2 L

  30. . r7 Y1 T& y: ?! {6 Z
复制代码
主播客户端
  ^9 z% g5 P5 X, H1 i0 U( J6 |
  1. <!doctype html>. G. w# \/ t) G& D$ \# I1 |
  2. <html>( L+ Z, E# v3 K5 p
  3. <head>& K" ^( r  c, h6 Y7 T1 a2 R# y
  4. <meta charset="utf-8">9 D9 B$ v+ Z8 D- z1 \8 i  v  _

  5. / w& }4 ~' E# ^$ Q: `8 q( Z& e
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ) g' A' q; g6 J- ]
  7. <title>404</title>
    $ e1 I# }2 G/ P6 C$ `3 z
  8. <style>& e! g' j( h  h0 }+ |
  9.         body{
    3 B" B7 a" W1 q8 c5 W9 z3 W
  10.                 background-color:#444;
    + p$ [% n: j# K1 l
  11.                 font-size:14px;6 d+ c! s4 j: Q0 O5 f
  12.         }
    3 V' i* N& Y# }9 @: Z
  13.         h3{
    4 B+ ?' b3 u* j  @) e. ?
  14.                 font-size:60px;) \6 m5 M' D* ]) i/ M2 I, E3 |
  15.                 color:#eee;
    . j; n( \4 t! `( Q& t6 F
  16.                 text-align:center;
    6 [1 Z" j9 `% O+ j3 ]) n& w, V
  17.                 padding-top:30px;9 O0 s& k0 C5 u% C* N$ R  d
  18.                 font-weight:normal;
    # O5 O* P- D  S
  19.         }
    # m3 W8 J( A4 K& O/ p  @: s8 y
  20. </style>2 q8 G- m2 j6 \6 t- D
  21. </head>9 Q9 f2 w6 ^9 d5 y

  22.   R! I5 O6 E( P, N
  23. <body>
    . G. s7 K9 T) n* l
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>. J! B9 K% y& S: J
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>; h1 a9 E8 j1 D5 y4 A, t, [2 x
  26. <canvas width="400" id="canvas2" height="400" ></canvas>7 z% B# H) k5 \' d! t* }1 ^. A
  27. <script>* n  `8 T" q# v7 k4 o. s( J
  28. var video=document.getElementById('video');3 P# h# F* s2 w% Z# K
  29. var canvas=document.getElementById('canvas');
    7 l, ?8 a( Q. k8 J- W
  30. var canvas2=document.getElementById('canvas2');
    , J  C' I0 c4 v/ x2 ?; p
  31. var context=canvas.getContext('2d');
    3 a/ h( C! K& ?" `9 S3 `! {4 M
  32. var context2=canvas2.getContext('2d');0 G# ^! S  A  I* I3 w1 }# T
  33. function draw(){
    ( f. k( o, K- O+ {
  34.         context.drawImage(video,0,0,400,400);3 m$ Z5 S3 D; j* M2 ?+ u8 y
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    # v; [* b1 a( f7 c3 E3 T
  36.         setTimeout(draw,800);* M; V+ J. g( I9 u* c4 _
  37. }
    - z5 U+ \, h5 R# j/ u$ W- n

  38. 0 Z5 O. b6 d- j& y  |# |) r
  39. //客户端跟服务端通讯
    $ C$ J8 |7 Z; Q8 h" c
  40. if (window.MozWebSocket)
    $ [. U5 I' w. c3 H; ]' v* o, v
  41. {4 l- l! G, Q$ g2 G
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
      D6 P6 a8 Z! a
  43. } else% |- Q3 _4 L$ ~8 `! L. m  H( O4 Y
  44. {% o, A8 ~9 M6 n. R  k2 z4 X7 E
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    + \) u) a( ?2 `  R
  46. }* D$ X+ ~1 K* U
  47. / A+ z. ~9 V4 Q/ b4 n/ s% `
  48. ws.onopen=function(event){% V  Z2 F; v" i; N" L2 f
  49.         alert('连接成功');
    # H) z0 u! I7 Y; D" F
  50.         ws.binaryType = 'arraybuffer';
    6 R0 x2 D0 \. s
  51.         draw();
    ; e6 Z4 z' P6 g/ {$ [' @
  52. }
    ( [; o0 S  R5 C5 [% S
  53. ws.onmessage=function(event){4 s1 Q2 v6 B$ V
  54.         //alert(event.data);; p) ^* J! p& q' u
  55.         //ws.send(event.data+"client");
    & [5 c- X- N7 F' w4 O! h  @& P# Y7 m
  56.         qrCodeImg = new Image();; S" y5 M" U# _3 ?, }: x
  57.         qrCodeImg.src = event.data;
    % G# b  f" `, E) W* ^6 q& x) K
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    9 y4 B" i5 K5 g  T/ ^6 q1 b
  59.         ; T! w6 \0 q1 B$ l$ F
  60. }( L& X1 e& C- Z  V# W
  61. ws.onclose=function(event){
    $ Q1 @1 [3 e$ x+ g
  62.         alert('close');" }2 s- E0 |/ v2 t$ [/ g
  63. }$ g6 v) y. J* p0 c# o' g
  64. ws.onerror=function(event){
    4 g; H2 v# _' `; H
  65.         alert('error');9 I' ~5 w# b" r4 s' F0 ]( H8 I
  66. }/ G* f9 I( @2 `
  67. //video,标签模拟视频
    % K, \: G, M1 c
  68. ' M3 ?: h' v  V( x  n
  69. </script>- G8 l) x, _; J# k& t! t5 R1 z
  70. </body>
    0 M" Q) b0 A9 u& l- B% N" [
  71. </html>1 n1 `1 Q! [# ^& J) I4 p) P, G

  72. 4 D* G$ S; R! E- ~
复制代码
客户端:' ?6 I3 ?) G5 J2 X5 ~
  1. <html>5 }2 n" D" E5 J; }: Y+ q! {
  2. <head>/ O! r! ?5 X' {/ s: D2 u9 M
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">: n  d5 n5 i* _$ E) Z" _
  4. <title>客户端直播页面</title>4 ]  F2 c8 i( J& x
  5. </head>8 E7 x: K+ q/ q3 R
  6. <body>
    + l6 W3 A( S/ C4 A/ I4 o- Q" J
  7. <img id="receiver" style="width:720px;height:480px">
      V  i9 R5 x$ X/ z6 M' b

  8. . y$ Q8 a- V. r
  9. <script type="text/javascript" charset="utf-8">' q. W2 E% B" t, G1 H
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");  J# B. _/ L( u# q
  11. var image = document.getElementById('receiver');2 o. r+ C5 V6 P2 Z
  12. receiver_socket.onmessage = function(data) {
    % s8 t. a& B( P' `, ]% S
  13.         console.log(data.data);
    ) A% K  f# f; {# i
  14.         image.src = data.data;
    ; N$ K: i& m/ g5 o* g; L# w' k/ `
  15. }
    8 M7 Q9 U- Y: @4 Q% x$ D
  16. </script>
    7 y! ]/ \, t! z4 N" a/ b0 [
  17. </body>
    / l1 F7 Z( h: Z/ d
  18. </html>
    9 I3 {# E% o6 m2 v; E2 u  f7 Q
  19. 6 G" N) n; Z; z0 z8 B' d! U
复制代码

" R2 |. j0 B  D" H. {4 r
3 \5 h: O/ C% t7 i, V9 T+ O* U  U7 |* R5 A2 u/ t

5 b9 }4 Z% S! _
9 T5 B0 M/ t8 R' y
) O3 Q6 c; K2 K- G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 11:49 , Processed in 0.050692 second(s), 20 queries .

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