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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码- |* p, R( m, v5 w9 j! ^
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);* O  X5 A; W0 y& N
  2. $client=array();
    3 R0 a/ [' t1 h0 G6 x  Y) Z
  3. $serv->on("open",function($serv,$req)use($client){
    ! N% ~# L! d, F/ H; l+ S; ]7 X
  4.         //echo 'connect'.$req->fd;/ i, S. B+ U& q% f
  5.         $client[]=$req;( E# v. Y* q, S8 z( ~$ I
  6.         //var_dump($client);5 _/ j) k. [4 g" D2 p2 U6 p
  7.         $serv->push($req->fd,'aa');9 K. p" m" V3 F* d7 ]7 Z
  8. });
    / D) N( B# {) c$ W$ O% @/ s, l

  9. * `7 i) J$ z2 ?5 j; B% p2 d
  10. $serv->on("message",function($serv,$frame)use ($client){
    $ o0 q4 J5 M/ ^: f! B
  11.         /*var_dump($frame->data);& k# ]' _! |/ p6 `5 a/ B0 ~! ~
  12.         foreach($client as $key =>$val){; P' b( j* I) _4 k# r
  13.                 $serv->push($val->fd,'aa');8 S+ r8 o2 D! @9 _
  14.         }*/
    ! r# s0 X' {' ^3 M4 }- X
  15.         $client=$serv->connection_list();& r  L% q2 L/ ~5 w
  16.         var_dump($client);9 ~4 T0 R! }/ H' l* A; d0 x
  17.         foreach($client as $key =>$val){
    6 m# ?5 r1 f! a
  18.                 if($val!=$frame->fd){# G/ l( _1 N. z6 @5 _
  19.                         $serv->push($val,$frame->data);
    ) w- \( @! D; K( t' G
  20.                 }
    ; r6 P& ~1 q/ f
  21.         }3 u. J2 v/ {5 v3 ^
  22.           X1 s. y# M0 i  ~- x  Z
  23. });
    0 i4 }2 j. {  h

  24. ) g! G1 h5 P1 R! S! r- i; e
  25. $serv->on("close",function($serv,$fd){
    & D5 P3 `. @. }: k3 u) v# i
  26.         echo 'close';& v+ I; A- L1 a  ~7 I0 P. M; f
  27. });7 {% M) N" F2 ]. T
  28. ( {( @6 q" {8 \- Y
  29. $serv->start();
    9 L. s  f. x( \5 @- n. k; g5 p
  30. 3 }+ H1 q0 X2 i% I& q5 }* G1 ?. N
复制代码
主播客户端* I+ W% |3 k7 ?8 I: X  o. L
  1. <!doctype html>! v! N# Q' V: o
  2. <html>
    " E3 s7 E0 w  j, X" A- D
  3. <head>
    : \) d3 D9 i, \4 Z9 D; O
  4. <meta charset="utf-8">7 B7 W' \/ J" r. C5 R; }" \' p
  5. . i' g( m7 w8 S/ ~* C7 }) k1 F* h, Q
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    : a% i2 G* B. c
  7. <title>404</title>
    , m- j/ q) U3 t3 h- c& F' s! `
  8. <style>& p+ K+ w* L: s/ g9 ^
  9.         body{' z1 s( Y5 n. c/ {! S6 c, Z
  10.                 background-color:#444;2 C) ^+ d# N+ K7 F8 l4 }
  11.                 font-size:14px;
    ) C8 B/ |. _# j; x9 t, A
  12.         }' z" v, G8 {$ E7 b
  13.         h3{
    # c# g, n; v$ r8 ]/ o: n( f: d
  14.                 font-size:60px;
    7 f( S) j- g+ [0 i$ J
  15.                 color:#eee;
    1 Y# m, F+ I+ e5 d, r' u
  16.                 text-align:center;' P- a0 O9 q: |6 j) G) q9 X
  17.                 padding-top:30px;4 Q, N; G5 M. B
  18.                 font-weight:normal;
    6 p1 i, D' {4 _; b
  19.         }
    $ c$ [9 h/ T. A
  20. </style>
    - M- L. [+ A8 i' P3 n5 [9 n
  21. </head>1 L1 x8 Q7 B# E- I
  22. 1 {- \1 u# q3 _: E
  23. <body>$ M* g! K) ]9 H
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    / [' M( H0 U, m2 K8 {
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    * X* j. u/ w4 F: p( }2 b
  26. <canvas width="400" id="canvas2" height="400" ></canvas>) f& |2 Z1 c! o
  27. <script>
    ( w* I2 L; g% ?  J
  28. var video=document.getElementById('video');
    1 c/ d/ @4 I) B5 y' y. Z/ I4 [2 a! E8 I
  29. var canvas=document.getElementById('canvas');0 m/ g1 g, v* `0 c% S1 @
  30. var canvas2=document.getElementById('canvas2');8 ^6 K. j2 e) \2 E+ Y2 n9 N$ t
  31. var context=canvas.getContext('2d');! Z& X6 J+ u# N5 C4 Y% {
  32. var context2=canvas2.getContext('2d');+ Y9 Z$ F: g0 h- J& K9 _+ s9 R9 y8 E
  33. function draw(){9 U' y% R5 g9 @$ ^9 M+ Y
  34.         context.drawImage(video,0,0,400,400);6 N# m) W* I# Y9 c0 k1 E* O
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    9 g5 u4 p6 p6 Q2 Z- }
  36.         setTimeout(draw,800);
    , O1 X- ~7 z+ e: o7 S4 r
  37. }# a6 D+ X) K! U. r

  38. 3 j6 |, ?& G3 a- r. \
  39. //客户端跟服务端通讯
    ' j0 W/ b! a$ e% A% ^0 Y
  40. if (window.MozWebSocket)
    " [) p( R5 _- l; S  X0 i1 h
  41. {7 |2 }( o) C# h; B
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ; V' K, x! ?* J' i+ m' |4 G) V7 y3 t
  43. } else/ r" k* k$ o: a( y' U
  44. {! G6 e# j, k! x" q; v! X6 T' v
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    # O, g9 E! A" d$ C
  46. }# j9 L5 K* q( J0 i

  47. * l- @; e" H$ d3 }4 @
  48. ws.onopen=function(event){) {1 j- X! T2 \- S6 ~
  49.         alert('连接成功');
    1 H! {' |, c+ t
  50.         ws.binaryType = 'arraybuffer';
    1 Y! C9 r4 m7 J$ h
  51.         draw();
    5 v$ Z1 s$ C. x' J4 l" O
  52. }' [7 D4 [/ J! t8 b  g
  53. ws.onmessage=function(event){3 V+ A; h) V( b, T6 J
  54.         //alert(event.data);
    1 f& U3 G) m  `# F* b
  55.         //ws.send(event.data+"client");! Y$ l  n' e& e. o+ s; h
  56.         qrCodeImg = new Image();7 }; K  o4 g% ~$ t8 e
  57.         qrCodeImg.src = event.data;; ~  i$ ^5 y# S: m0 n4 D9 U
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);4 |6 i3 t' z( W
  59.         
    , d5 Q" }' K% Z6 f  P" W. k
  60. }
    , x( G+ f; |5 e+ ^- X* C" C
  61. ws.onclose=function(event){
    : n3 T8 R) K  B+ i
  62.         alert('close');
    % D. ?  C9 r0 V, n" J! ~
  63. }
    7 H  I; ^" N& O, I8 g
  64. ws.onerror=function(event){
    * z( {  ]) @# `$ x
  65.         alert('error');" H9 L' g5 Q3 b! v7 _' u
  66. }. K$ T6 G0 u9 P: v) z- x
  67. //video,标签模拟视频, c& H- k$ w6 C& L% ^6 x6 c/ G: \
  68. 8 R5 v, G) S, ?7 O9 ]
  69. </script>
    " R5 P' l) q0 ~4 i* ^; ~
  70. </body>$ `5 _3 v1 z3 e& z7 R4 A
  71. </html>0 X2 z5 l8 |* Q" A: ]7 Q
  72. ( }6 D) [7 F0 z& F  A7 z- [
复制代码
客户端:. N: m' A$ x- ~4 s1 R6 S' _
  1. <html>- i" W: Y; n0 G  }" q/ B' n6 r4 H
  2. <head>
    ( {" H; F  A* x' M6 O6 f* Y+ G
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    8 q8 t% |5 K, D. |. A! g5 Z5 m8 c1 `
  4. <title>客户端直播页面</title>3 q% B/ y' j" w& y& E3 K% ?
  5. </head>
    ) E7 l' }) a2 s9 v$ n( R2 p
  6. <body>* g% V3 Q' j7 N% X
  7. <img id="receiver" style="width:720px;height:480px">
    4 p7 g; }4 V: J. d, C
  8. % s1 v( {( m4 `$ w$ ^
  9. <script type="text/javascript" charset="utf-8">
    : L$ u- N# Y4 V7 l
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    0 l; s- V6 Z* k2 x
  11. var image = document.getElementById('receiver');( u2 K9 d$ w7 z& d
  12. receiver_socket.onmessage = function(data) {( ]; J. Z0 K& s- q+ @
  13.         console.log(data.data);2 ~, F  l3 r* l& H4 A% P  p4 q
  14.         image.src = data.data;
    ' T" O. D) g, S
  15. }( [) c# R, w& B
  16. </script>6 V8 u; k& C% V$ {
  17. </body>, D1 R+ g8 G. K- C* n( M$ Z
  18. </html>2 |, J+ \: l1 N9 A5 z

  19. - q8 Q4 |2 Q: l8 H/ B
复制代码
: Y: M4 w7 T4 I" v+ r9 Z8 y2 b
: r8 c" `6 c+ K# y

0 R5 o2 m3 e7 q3 @5 [
9 L5 r, v; r, h; x7 y5 ^& q9 b+ w+ Y; j) v) e4 k% m& }

0 H1 x1 d2 @, L1 ?; g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 21:05 , Processed in 0.056787 second(s), 19 queries .

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