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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
; f, O; H8 n0 T4 q
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);( W' @3 V' }" U- w* L, N4 X% t
  2. $client=array();
    ! i8 o- D& D+ D$ v# F4 v8 [& T0 }
  3. $serv->on("open",function($serv,$req)use($client){' M: A( F! u) G- t7 i' z
  4.         //echo 'connect'.$req->fd;4 }8 \/ a0 `  c  K2 q* s" B: [: ^
  5.         $client[]=$req;
    ' r, V0 u2 Y: M2 N0 v
  6.         //var_dump($client);
    + P8 O; i) h) Y; j* L% @
  7.         $serv->push($req->fd,'aa');0 Z2 {% V* E$ H5 S4 m
  8. });
    / J) U; v7 K4 m2 A- U) }& N
  9. 5 O' u8 B1 S$ b8 m5 F6 u2 L
  10. $serv->on("message",function($serv,$frame)use ($client){3 U8 b) n& T1 H$ N1 X& g: j6 E
  11.         /*var_dump($frame->data);
    $ P% n; `3 W1 _; q; C
  12.         foreach($client as $key =>$val){1 Q- h* e4 [+ z. t8 ]4 T
  13.                 $serv->push($val->fd,'aa');
    9 B* I/ \( d" `( M, G
  14.         }*/( ?+ q7 c) u! j7 g' A
  15.         $client=$serv->connection_list();
    ; d4 W8 _$ M! S- b
  16.         var_dump($client);
    6 ~) C, Z, k! l  Q. O6 T/ P+ s7 J
  17.         foreach($client as $key =>$val){
    7 x! R% |" Z7 ~! W- D$ D/ V
  18.                 if($val!=$frame->fd){
    # S' m: t* e6 O* W( T( c
  19.                         $serv->push($val,$frame->data);
    , }6 o. `8 D" t9 a9 N& n! Y
  20.                 }
    * V4 H% W5 l! M; I* V. \) D3 ]
  21.         }1 g4 z& @6 i! Y7 o; O5 i
  22.         5 {+ N* T  S+ W' w% g# [
  23. });4 z: O" @' U' V. j0 c
  24. + S" V& D' n  M- e) ?
  25. $serv->on("close",function($serv,$fd){% U3 A$ Y  h; |( _6 F+ d
  26.         echo 'close';  L! F$ i( d" i
  27. });  y1 s' M5 q9 ~; j1 d

  28. 6 z2 ]9 ?( C/ e- N0 K4 |1 e0 i4 s. |
  29. $serv->start();
    $ w/ P1 _8 G( P, \9 L2 T
  30. $ P" |+ b: y) H
复制代码
主播客户端
! P9 }. F0 R7 a" B6 S- E: V
  1. <!doctype html>1 n; ~* Y6 w$ y  {/ d' R, H0 w  j
  2. <html>) A+ q% `8 J  p6 v' t. e+ y
  3. <head>1 b0 M, s+ a5 R  p2 S
  4. <meta charset="utf-8">9 P1 i7 I: G. r$ M* G1 t) c

  5. 1 s" {7 j* U4 J5 \
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">! d2 v1 r- J/ ~2 w
  7. <title>404</title>7 O% s- N& p; J0 \! i" h+ d
  8. <style>
    * g" N# Q* R) J6 w- v
  9.         body{! d! ]8 v* b; a) K7 x8 Q
  10.                 background-color:#444;/ f, v* f& e* w- _' ]/ u5 h# v
  11.                 font-size:14px;3 y5 m9 Y5 O7 x* e
  12.         }
    # P" J/ U/ z& \0 J# E2 J
  13.         h3{
    & m# y2 Y6 z  |  R2 Q" _3 Z
  14.                 font-size:60px;. j6 W, r; ^; J+ i9 F! m3 j
  15.                 color:#eee;. f- }* e* Q; i% g8 m9 A* F
  16.                 text-align:center;
    $ e3 g$ J: w: h% z; o
  17.                 padding-top:30px;/ r2 _4 F( Z$ n' \5 x  ]
  18.                 font-weight:normal;9 L" i% e8 W1 i9 s; p
  19.         }
    7 Z. w+ O+ G# t6 d2 g1 G$ s% ]
  20. </style>
    % z* n2 \( R1 v
  21. </head>
    ; |' h' r; L9 p% X/ o0 O" ]

  22. ! i1 W8 }- ~. U7 ~4 f* e  q( p
  23. <body>
    " Z8 i4 J9 j2 I  w
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    1 o6 l7 s" U) Q, `: m
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ; D: x. ^5 N' R% O/ |. m
  26. <canvas width="400" id="canvas2" height="400" ></canvas>% L3 Q* w4 L% O, s( Q/ _1 D3 T
  27. <script>
    * O! l& V, A3 \' W! U# I1 `$ }! u
  28. var video=document.getElementById('video');
    4 }7 P6 W4 d% |1 O
  29. var canvas=document.getElementById('canvas');* T0 S  i) X2 f% Y; C
  30. var canvas2=document.getElementById('canvas2');. s# V( h; U, K( x- U
  31. var context=canvas.getContext('2d');- ]: L/ ~4 Z4 k! x/ M% u, L5 |; @
  32. var context2=canvas2.getContext('2d');* D  o0 s: `* V
  33. function draw(){
    1 f( V; N9 V( J- H. U
  34.         context.drawImage(video,0,0,400,400);
    6 z0 {# g  o* c$ o. W
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    0 O+ c" C: ^& O+ U4 o7 M* O' v
  36.         setTimeout(draw,800);
    . F- h( |  B4 K" B) S! a+ @
  37. }
    ( ^0 Y8 x% f. d" q! z" f6 _

  38. . z6 j+ h' ]) V$ X0 f3 a6 U/ H
  39. //客户端跟服务端通讯
    ! `2 ^7 n2 e: i5 r: \
  40. if (window.MozWebSocket)- x: D1 N8 m9 Q, o* Q6 P
  41. {
    , \7 s  g( m* M9 o
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    $ l. Y! b& u( X" @1 r! \# g
  43. } else, _! J3 v/ U( w3 w, C" y5 I% D) }7 ~
  44. {
    1 p, I/ D5 r  L' a
  45.         ws = new WebSocket("ws://182.61.42.187:9501");4 [  @" _: X' X" T( j. M
  46. }
    9 r7 l0 c3 n8 {/ M, i7 G( H& b

  47. ! `. G. X* \* v- Q
  48. ws.onopen=function(event){$ {9 I7 h0 S2 x- b
  49.         alert('连接成功');
    % O* l5 D+ c6 I0 h8 _
  50.         ws.binaryType = 'arraybuffer';
    : H! X$ L5 w7 t" u& r7 p7 J
  51.         draw();- G0 l  x" n' o7 U
  52. }+ u( y, U1 [2 u; \
  53. ws.onmessage=function(event){) A3 G+ H- c6 ]. Y  I
  54.         //alert(event.data);
    ! |' c  {* g: K& R
  55.         //ws.send(event.data+"client");
    % O* q2 a& {3 M4 z2 L8 N
  56.         qrCodeImg = new Image();! L$ a) f+ r" K  e/ H
  57.         qrCodeImg.src = event.data;+ M/ p1 D; M5 E- @/ _  D$ D3 ~6 I
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    % l- L# H6 a" l$ ~
  59.         - T- B$ ]( t, }" u, m/ t$ L4 o. F8 ^
  60. }
    : @7 ~4 A9 Q' p. r$ m: o  n* u
  61. ws.onclose=function(event){! D$ M9 }* l. R
  62.         alert('close');
    , J5 J# z' m. o- s# N$ e: Z
  63. }
    ! M0 a  W: D) N: \& n% H- [* ?
  64. ws.onerror=function(event){$ }0 D6 t6 s& v5 ~# R
  65.         alert('error');4 {7 Q) i3 X4 j" ]; a
  66. }
    5 T9 o* {. J. }" t# ^
  67. //video,标签模拟视频7 Y7 O2 f9 |; R
  68. ( v$ i! t+ f% o# T3 G0 e5 m
  69. </script>2 a4 c5 d, w, m6 g! e
  70. </body>
    " p/ a$ K$ M7 C6 Y6 F* D+ |
  71. </html>
    : Q2 o6 Q0 c( l: z# q* q% l
  72. ' S6 W# Z/ X/ S5 K. k' d" t
复制代码
客户端:+ N( z, q* k3 K) ]' G1 w
  1. <html>
    5 {& w3 G+ n$ @
  2. <head>
    0 J5 F/ T% W. s7 L9 U7 u8 a
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">9 {% n! E; @. W1 V+ [3 g' F$ d
  4. <title>客户端直播页面</title>
    , k  ~- G0 k& y7 O1 y' i1 U5 X
  5. </head>3 ?4 j8 ?& ]% T0 |
  6. <body>- Y, w- @; B1 y& d4 g
  7. <img id="receiver" style="width:720px;height:480px">; w, j* K8 K4 R2 m$ S% ~
  8. . L! a' q0 ^  H) L. _8 [
  9. <script type="text/javascript" charset="utf-8">! y& Q, h$ }& z( W8 \# O
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    4 L  ^, f& }6 ]! q( o, O+ ~
  11. var image = document.getElementById('receiver');
    ! y4 [2 q: }3 F  x4 q- f5 E
  12. receiver_socket.onmessage = function(data) {- U% p5 h( F) ?( N! V. w
  13.         console.log(data.data);
    ( ~/ P& q- o6 J  z" B  ?3 c; I5 Z
  14.         image.src = data.data;
      r+ z( a2 B- J5 t# j
  15. }# L. g8 D- ^) L
  16. </script>; r, T6 ^8 D$ _- ]2 P' x+ C
  17. </body>" D5 l% F0 a: k* A, @  G
  18. </html>! A- s: _* f- v7 L5 B' d% i

  19. : }1 ~7 V2 p' w8 P* V
复制代码
1 d6 F0 Q9 T1 W% S# D' P
( z2 m* i# B: J0 N

7 S/ u$ k8 X6 x) T4 T% R* o9 Y
* W( }6 L/ w4 o. a" t2 F7 ?0 X$ a+ @2 g+ i$ J( r

1 _& e4 D0 X3 [* O7 J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 12:13 , Processed in 0.117969 second(s), 19 queries .

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