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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码8 B, F3 ~  M( m7 t9 I  w
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);
    0 ]7 O. t$ M4 d9 F7 O. p
  2. $client=array();
    % ]: u7 U7 i' m  r+ p" X
  3. $serv->on("open",function($serv,$req)use($client){
    6 Z. `7 K* ]  o$ L
  4.         //echo 'connect'.$req->fd;9 m9 x7 [9 E* Q: J5 F5 S; m
  5.         $client[]=$req;
    " |9 Q7 c) A0 x) e# W
  6.         //var_dump($client);6 o/ U) {: O$ h. p! P
  7.         $serv->push($req->fd,'aa');+ n7 l: V4 J4 S6 ?5 {, C
  8. });* |' [. t5 o7 j/ _/ M; F
  9. ! ]1 y/ l! Z8 K
  10. $serv->on("message",function($serv,$frame)use ($client){! z. h5 r( P' @+ h0 o3 f
  11.         /*var_dump($frame->data);
    ( q4 q: l: y' q1 P
  12.         foreach($client as $key =>$val){& G+ Q) }/ U+ S. a, O! A6 H- d! \
  13.                 $serv->push($val->fd,'aa');' M8 G: q% [" X* T0 W
  14.         }*/5 Q* n' K3 Y; m8 z+ M, n
  15.         $client=$serv->connection_list();9 E. q# Y0 V% ]" B. Q5 n
  16.         var_dump($client);' |6 T+ n9 H3 N6 A- x4 n
  17.         foreach($client as $key =>$val){
    * g9 p0 B" x* B1 b. w
  18.                 if($val!=$frame->fd){
    * f/ G5 z+ G) N6 ?7 i0 S
  19.                         $serv->push($val,$frame->data);2 \( P; m& f( i+ l
  20.                 }
    / @8 |4 b( p1 c! ^, d
  21.         }. P, y& ?& M  Y# Q& L( d2 P
  22.         . j2 y! _4 a8 {7 I
  23. });
    & ?1 ]3 K9 l1 F; i1 D: S; o$ f, c
  24. , N3 `* ^. ~0 p! P
  25. $serv->on("close",function($serv,$fd){. _% l4 A& c1 I/ W/ h6 l" o
  26.         echo 'close';' d# g# o9 f; f: {* `& d$ w
  27. });
    , j3 T, }. J9 X' u

  28. : x% }- A; P5 \0 a# \# f& O/ ~! W
  29. $serv->start();9 _) [" ?! o7 l1 K& s8 z
  30. 8 J; |8 H. ?2 u
复制代码
主播客户端! V! U5 P; Z' o6 x2 l7 S% |4 X8 S
  1. <!doctype html>* n5 D  Y9 h: b/ Q! {7 R! v4 _5 O  Y
  2. <html>
    & j0 x' F, L' b" T5 b: G! A. W
  3. <head>
    4 [# f! P0 j" v
  4. <meta charset="utf-8">) W1 p5 @1 L- N* G) p% O
  5. ! r: s8 N7 Y  a6 J- E7 c- L$ Q
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    ) l# l& }# K: d5 s3 T; v7 ~
  7. <title>404</title>$ V# |( d, k# ]3 z7 t
  8. <style>
    ! t! B; S# o* w9 `8 v* E' J
  9.         body{
    * M+ ~# m; T5 I: R2 F
  10.                 background-color:#444;2 K1 [8 @; d/ G- ~( b9 U
  11.                 font-size:14px;% z1 Q, f) l4 N5 B# M
  12.         }
    5 b. `4 W) S: H4 D
  13.         h3{1 d% @: z9 Y/ @# n
  14.                 font-size:60px;
    # f( \, V# l; P. ]3 l
  15.                 color:#eee;2 F) L6 p) d4 E4 v1 Y
  16.                 text-align:center;
    % r/ r$ Y+ U& W4 d& w1 i
  17.                 padding-top:30px;: M, J6 d5 |: l% `5 W' u
  18.                 font-weight:normal;" V  r% U; }+ t$ ~- q$ d2 Q8 I& K. y
  19.         }; D% X1 b' h' C* ]4 E+ ~& x
  20. </style>$ S9 [& e# [. N9 i
  21. </head>
    ) W8 J/ V6 K1 b* q' @

  22. . E# Y4 F. \$ D* S$ n
  23. <body>* Q0 J; i. _# \' M
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
    7 H# ~1 W0 ]2 }8 F; H# ^' e
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    2 S9 F0 d( U; O# i) F
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
    9 q& x3 n1 k6 [1 i" g4 h7 W
  27. <script>$ O% N% V3 r; X# f6 G' ]  l# Z3 T
  28. var video=document.getElementById('video');% U/ F3 A3 C3 u2 @" N; N2 R
  29. var canvas=document.getElementById('canvas');
    3 E2 C' u0 H: T# U* ~. O6 ?2 `
  30. var canvas2=document.getElementById('canvas2');2 V: h( ?& a+ c+ f+ l; E6 I; v. x
  31. var context=canvas.getContext('2d');
    , N" n' h+ y% i! L  K: H
  32. var context2=canvas2.getContext('2d');! v( u) w: ^0 ]
  33. function draw(){5 A: B9 X( }% ]. {$ H  S7 k
  34.         context.drawImage(video,0,0,400,400);
    ! F" r3 P, ]1 [- b. A" G
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));9 J' k  U% `! \' {3 [* Z1 l2 _
  36.         setTimeout(draw,800);; b2 ~1 T$ s, d# [
  37. }
    7 M+ m4 p$ R" ?( y. @0 A

  38. & n# Y. r5 G) x! \/ v5 q
  39. //客户端跟服务端通讯
    & x. z' R. w2 X% d" P! J3 {4 P7 r- ~
  40. if (window.MozWebSocket), t8 n& p1 ]4 `! W! f0 |& a
  41. {
    # R, e; q4 W* N% [& s5 r
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    ' q8 @: {+ c! e% h. X$ O
  43. } else
    . P% C: l* j  M
  44. {
    . ?: R6 y, b+ D3 @( w1 W+ }8 y3 i1 W6 R
  45.         ws = new WebSocket("ws://182.61.42.187:9501");7 H. ]8 \) N2 u* n1 B. ?
  46. }4 U  v/ s, |1 G( h( g% q; T
  47. # D: T! }; Q# }# x( @2 `
  48. ws.onopen=function(event){" n, r0 u/ n$ i4 u
  49.         alert('连接成功');9 s) {7 A9 ^* ^
  50.         ws.binaryType = 'arraybuffer';
    . N% t% P; X: S5 e7 E: B2 L1 E3 M
  51.         draw();
    ( Q5 F( l. A, b
  52. }9 U* m9 k( g7 }3 R- l# F
  53. ws.onmessage=function(event){( P3 p$ R$ \6 ^* B( }8 @, [
  54.         //alert(event.data);
    ! h1 D- @9 i, B
  55.         //ws.send(event.data+"client");
    " V3 A2 V" \! X( o
  56.         qrCodeImg = new Image();
    : A4 f. l5 P" U1 {# q+ R
  57.         qrCodeImg.src = event.data;# ^* K8 s2 T3 L& f
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    8 U3 W. ?) o3 w, v! _5 G( \
  59.         8 j! F! @# O9 f! m
  60. }
    % Y/ |  f& U  h
  61. ws.onclose=function(event){; j- e' b: c( o0 H; t( h
  62.         alert('close');
    & V: v$ {6 F+ o0 \0 O) j
  63. }
    " ]  o  w5 `$ z4 v7 d
  64. ws.onerror=function(event){
    ) P" U3 B' L+ C
  65.         alert('error');( B1 u* Q% v5 u/ l9 s6 K% W, U" o
  66. }# K" t! e) H4 B4 I# T( a
  67. //video,标签模拟视频0 X$ P- V* P7 _8 n( k9 V& {
  68. 3 f$ j8 h1 n1 t7 M+ J5 j; ?- N$ d
  69. </script># s/ M. P1 _. |! ?
  70. </body>
    $ e. K& e, R3 Z5 R
  71. </html>& j. x9 o5 e" w, \/ w5 H! z
  72. ' v1 p: \! v  b7 V" i
复制代码
客户端:3 p: o, e, c  q
  1. <html>9 H% U& c5 Y+ p8 D0 H
  2. <head>4 U3 ~- Z$ e3 q
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">  r3 e  E- G, Y, ^2 r
  4. <title>客户端直播页面</title>
    " b( m4 n3 \2 i  W1 C3 D. m
  5. </head>; F( P' W% d8 f0 ^8 [
  6. <body>* W8 Q8 Z; R0 f
  7. <img id="receiver" style="width:720px;height:480px">
    . Q& f. h. D; k( a

  8. 2 {# R% @+ Z5 M$ o
  9. <script type="text/javascript" charset="utf-8">
    3 D9 V% E2 Y0 T1 R' G; h/ x
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
    , W2 k' P, X" M9 d9 K
  11. var image = document.getElementById('receiver');
    6 b! `% b. i1 X/ g) Y  I/ M
  12. receiver_socket.onmessage = function(data) {
    ( v! e3 U: t  V  B4 U! K
  13.         console.log(data.data);
    " u8 m5 N& M6 E$ N/ m% S& X! h
  14.         image.src = data.data;
    + N( W$ S1 i- Q  J1 q& R
  15. }  A: J9 e4 s" f% `
  16. </script>
    4 s, {. D$ H  l4 h. d! R% X
  17. </body>
    & f1 g& ~$ ^1 q9 z. C# k, E  K
  18. </html>' F* E, l2 o# o- i
  19.   U2 k: o  j  L
复制代码

6 `. h0 H1 m' b( u9 R" M
4 w" I* b" Z( s1 B$ H2 f, e5 k9 R! r0 @* {% p- z

* K+ m6 a( N3 M  B* A! e1 z  B# Q4 _$ {. v$ a$ P2 |/ [/ W+ y8 i

! {# o0 G/ D# G. P) w5 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:48 , Processed in 0.054294 second(s), 19 queries .

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