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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码
, N% m' d0 b' z& O
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);. e8 r9 P: S1 U0 e1 ?
  2. $client=array();& \/ x+ T( @2 v- W1 `% r
  3. $serv->on("open",function($serv,$req)use($client){
    0 Y+ F0 C/ b  a. o, J0 c2 c
  4.         //echo 'connect'.$req->fd;
    8 i! N& w8 |" |& [8 S4 I* n3 g* @
  5.         $client[]=$req;
    ' P6 E9 l, w+ ]7 S2 _& g
  6.         //var_dump($client);2 L! d' R3 @6 P/ ?
  7.         $serv->push($req->fd,'aa');
    6 O3 d% s/ @: G% m1 ^" \
  8. });
    6 X& n& M! N( @8 B! |1 K: T( F
  9. + Y7 p" a& e; R
  10. $serv->on("message",function($serv,$frame)use ($client){
    5 [6 V1 l# m4 ]( d# R8 Y. }
  11.         /*var_dump($frame->data);, f! o7 \" T5 ?, z" l# `* h0 T
  12.         foreach($client as $key =>$val){# C0 a; ]# I8 I3 @) x
  13.                 $serv->push($val->fd,'aa');
    * D# N; h4 b/ M4 `
  14.         }*/
    9 s1 S$ {4 i) u- q" A* L, Y
  15.         $client=$serv->connection_list();1 s8 q1 g' B4 ^& t
  16.         var_dump($client);) y) p( c' o6 Z* \$ m5 b
  17.         foreach($client as $key =>$val){, a5 N8 o" M! j5 f, `+ J
  18.                 if($val!=$frame->fd){
    ' y$ P% r2 G6 P/ I( {4 m! @
  19.                         $serv->push($val,$frame->data);; M3 N( Q: q- ~  {" d/ s
  20.                 }5 O) r3 N3 O; n8 }0 X9 h
  21.         }/ K% V7 f) x: o
  22.         
    6 V# r% ~+ }3 \' W
  23. });
    0 a9 `" U. i% M* `% K
  24. % h* u! S+ N8 n1 L+ u3 b
  25. $serv->on("close",function($serv,$fd){! T! J3 t' i% i! P$ K1 l
  26.         echo 'close';4 W+ F# g$ g$ O) x6 C9 H
  27. });" \; C. @  g1 C& `$ f
  28. # L2 b- S( v/ J& U. b& n1 x. l
  29. $serv->start();
    , _+ X# H: c- u4 r' |( a

  30. ) r; [7 ]; N, n5 @
复制代码
主播客户端3 e  D) [7 C* ^+ m" ?1 e& y
  1. <!doctype html>
    ) c1 H% L6 r1 ]" k" ~
  2. <html>
    % v2 Q4 n! [7 O  _1 L
  3. <head>' l3 ^* U) A" N  D+ {0 }5 F( I
  4. <meta charset="utf-8">' h: t' j2 K; w% `& `
  5. 2 g1 M* _$ K- i8 T3 s* w
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    5 A" e% p* N( M
  7. <title>404</title>
    & l- E/ z7 R' g9 ^) D: U
  8. <style>' ]! a1 T3 x6 y9 A( Q/ t5 c
  9.         body{4 C: c. S/ |7 ?  h. g7 `* Y$ W
  10.                 background-color:#444;
    8 ?7 V% l2 q  F
  11.                 font-size:14px;
    1 @# o; T0 t4 t3 W4 c7 r& ]
  12.         }
    ! x* ]8 ]' e% e# T9 l* P
  13.         h3{
    3 D8 H( J% P5 I2 \- g% q0 E4 U
  14.                 font-size:60px;
    $ P2 c- d  x( ?. ^
  15.                 color:#eee;
    ( ~% G, d. z& \) l2 d5 d
  16.                 text-align:center;
    # {- i- ^/ `1 w
  17.                 padding-top:30px;7 u* f& R# G$ v8 {
  18.                 font-weight:normal;
    ) `6 S8 V, j9 j! o2 f
  19.         }7 l2 z4 ]* ]8 ]0 c# U1 E
  20. </style>
    ) Z% ~4 G+ k4 {$ Z& g% s# g
  21. </head>1 W5 v5 @1 n! N( s/ m: M

  22. * y; K+ Q) a$ a; `2 w& d" {
  23. <body>6 h/ M% X, r5 J6 h8 N, x: v8 T
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>
      E  j( |& g3 o# R
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>- a# [2 h) Q0 }& x2 o2 e
  26. <canvas width="400" id="canvas2" height="400" ></canvas>' K1 X7 ]  L- W6 q9 g7 n- T
  27. <script>% d" J! I+ D; B, h7 u
  28. var video=document.getElementById('video');
    ! B" m0 U: E8 e, M: R; V
  29. var canvas=document.getElementById('canvas');7 q+ M& h* A( l6 n# @
  30. var canvas2=document.getElementById('canvas2');0 m+ f. v; Z; D, E
  31. var context=canvas.getContext('2d');
    9 A8 I2 f, {! b
  32. var context2=canvas2.getContext('2d');  A# ?$ H# S# }8 Q9 r% ^
  33. function draw(){1 @& i5 A; Q8 R) d& w2 f* \& Q8 P- d
  34.         context.drawImage(video,0,0,400,400);
    / n3 e. N3 Z& P
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    : W- H8 {# U: ~8 I7 \
  36.         setTimeout(draw,800);
    9 @' J: j! q6 ?; ~
  37. }
    ( i) |( z  W  r

  38. . O/ X+ \. i7 J0 v; e5 s1 s$ H( w: d* B
  39. //客户端跟服务端通讯5 W$ {  Y! ]# ^/ C, G) _; i) U
  40. if (window.MozWebSocket)7 q8 o; H2 R- A. m
  41. {! ]+ |# y4 B$ V0 e& y% p( j$ K- p
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    7 j7 i& e9 X' I$ d/ z1 A
  43. } else
      Y3 u. N( b$ I5 q7 s! j
  44. {1 D7 ~6 S, n+ V% F- Z- q, i) Q
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
      i" q2 a4 ]) f/ J+ }6 ~# i
  46. }
    3 v6 t6 A! r$ h. M
  47. % [4 |0 f) t+ e0 n- k
  48. ws.onopen=function(event){% ]2 [% V- j/ `' N2 X+ H+ x
  49.         alert('连接成功');/ p) j( A+ j1 w/ X0 @/ x
  50.         ws.binaryType = 'arraybuffer';: I! i, x5 I( {8 T5 S0 c% ~& }
  51.         draw();
    ) R, ?% q0 ~2 f  m
  52. }' n2 ]7 j1 x6 ^* ^3 Q% p5 j2 w8 ~
  53. ws.onmessage=function(event){0 e" i/ h. [  t
  54.         //alert(event.data);, t2 E# y. F% z0 U
  55.         //ws.send(event.data+"client");
    ' x. l  l/ r' z* }$ h
  56.         qrCodeImg = new Image();
    - B7 C- @+ [' @. b
  57.         qrCodeImg.src = event.data;1 e/ P* z1 N7 k, H9 q5 N% c
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);7 ^9 n, `& W; e3 l2 Y! x
  59.         
    0 Z# f) [+ N% w" J! O/ A
  60. }
    5 J% {  ~8 L4 j3 \5 U
  61. ws.onclose=function(event){
    ' |  p5 S3 N; }- G, {4 ~
  62.         alert('close');" k! S1 z3 \( w, E3 K$ o- H! S
  63. }/ f  M3 ]5 n- m
  64. ws.onerror=function(event){9 X6 c) t' m2 x# d; P5 w: m. Y
  65.         alert('error');
    3 d  F8 l3 _8 B' o- j( _! _# n
  66. }
    " R3 W! k5 D- J. V
  67. //video,标签模拟视频! G! g# N. r( M
  68. 7 S: A6 t2 a6 D* h- X
  69. </script>
    5 V4 n6 w* w; O" o" x
  70. </body>' l0 b" [8 B% h% ]3 B2 u' l0 V
  71. </html>
    " \: Y+ e; g$ S; L$ n* C' Q
  72. ( B  |  |0 t. y2 B
复制代码
客户端:
  i/ Y! p* {: b9 J0 K
  1. <html>
    , O' A5 _/ u1 |$ g* B8 n1 [
  2. <head>
    ' A3 E. n9 X, v! [3 z6 M$ q$ o
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">) O" `- ~( W+ L
  4. <title>客户端直播页面</title>
    ' h8 F  ^. t) E) B* s, s" C( f7 h
  5. </head>
    . B( G# y0 ]& A3 O8 T9 f# ?
  6. <body>
    + [$ Z, z4 p) V; X. s* s2 Q8 @
  7. <img id="receiver" style="width:720px;height:480px">
    * Z2 c- c% m# a  P

  8. ' _! m) E2 B% G- x0 Q4 P1 I/ T
  9. <script type="text/javascript" charset="utf-8">
    , Z; a8 R3 g  i) B2 L6 E1 U
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");' V7 J6 C9 {- [9 X% I. U
  11. var image = document.getElementById('receiver');" [8 B2 m, U. ^( F2 o/ Y
  12. receiver_socket.onmessage = function(data) {
    % T" m& Q+ f# ?! \  V: k
  13.         console.log(data.data);. u4 M; s& q8 C( b  z1 h& D
  14.         image.src = data.data;$ R2 e6 K" E0 k0 V" A
  15. }
    " V$ R5 g+ S2 o$ M3 X  [# I
  16. </script>
    ; N; V7 N2 I# W1 ]. M
  17. </body>
    , l* b& H* C0 o
  18. </html>
    3 `! h' ~! P+ C5 d- F$ c. D. N
  19. & M  I9 h) F: k( x" y; b
复制代码
; @* i' s+ t# x) t, }- W4 N( \& p9 B; o
0 {" Z3 x4 \' `

' n3 D& ~3 M! k+ ]/ P, R9 ]! A
& _' ]4 v# o9 M. J" B$ c$ G
7 y3 R  B8 G8 i9 t) R2 m$ r3 V( |5 q% J
8 _! e9 v5 n" A4 [7 A' w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-6-18 20:49 , Processed in 0.106192 second(s), 20 queries .

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