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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
服务器代码$ l' L, t, P: {! S, K/ n5 f& L$ s
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);' k. \, s5 [+ {$ d& \% g, V6 G8 M
  2. $client=array();1 ^" `5 ^8 U& ]! o
  3. $serv->on("open",function($serv,$req)use($client){9 ~( v8 o1 `: }1 F( P  K
  4.         //echo 'connect'.$req->fd;
    6 w# i- [4 p+ k9 y
  5.         $client[]=$req;0 k# C8 v# Q% d- H
  6.         //var_dump($client);3 ?' g9 u, U8 A8 B6 m0 S8 k
  7.         $serv->push($req->fd,'aa');7 L0 l, ?* J, O7 d7 P+ z) p
  8. });
    : e. V. k) T+ R6 O- S  d% c' s

  9. & A( k: z" r& W' G/ D8 s
  10. $serv->on("message",function($serv,$frame)use ($client){
    % r7 Z8 v* {" f
  11.         /*var_dump($frame->data);9 O; J! V( U1 g* m: F5 \
  12.         foreach($client as $key =>$val){
    4 ?: U& @; O" u( p6 E- L2 w
  13.                 $serv->push($val->fd,'aa');
      l2 u  `  G, \3 I
  14.         }*/( S1 b3 s7 \1 x3 ~% c" h
  15.         $client=$serv->connection_list();
    - O7 B; H1 X$ L9 y% l' F- O# J
  16.         var_dump($client);$ Y+ ~. o1 S9 y+ X/ ^
  17.         foreach($client as $key =>$val){& U$ H1 H; Q. k1 t0 ~- ?
  18.                 if($val!=$frame->fd){) J) v1 K# C* s3 E3 `. E( p
  19.                         $serv->push($val,$frame->data);
    / W+ l' q( z' P0 M( {: l, m
  20.                 }
    - y, N" L: {' ?. e8 N( n
  21.         }
    $ W) \) z8 Y' r8 a% ~, q, _" Z9 C
  22.         
    # W4 [. X  Q$ i: h4 h) h
  23. });' \& S1 _5 c% \1 r% ]  Q, l: T$ C  W
  24. ; I7 Y# ~5 f! \! {$ p
  25. $serv->on("close",function($serv,$fd){
    2 v7 V2 a1 A8 j* _9 a/ B9 `7 M
  26.         echo 'close';
    9 y* C0 f" ?# Y. p9 M/ M1 X, a' d
  27. });4 Z& V) Y: }$ s! P# }, N
  28. ( Y0 m; p1 n  e2 v) C8 }9 A3 g# f
  29. $serv->start();& I* }: W+ j7 O% A5 y5 g
  30. ' l, b' V/ b; S
复制代码
主播客户端
+ [1 ^, H! L& S- v, u( _
  1. <!doctype html>" [$ h4 L' x. ^+ H
  2. <html>0 |" `5 I! z# ~5 ~* T: f- f$ S* H
  3. <head>
    * h: ], Y7 o/ T9 ^4 t( z
  4. <meta charset="utf-8">
    1 s/ ^' b8 H# C8 V! Y: K

  5. 9 {8 s# b% w0 c" T
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">! B' m: X! K* i9 Z6 x0 h0 i
  7. <title>404</title>
    , [$ i" ]# U6 j, p# ?
  8. <style>
    $ e! u) _9 q& K' p7 P. @& n
  9.         body{
    / }+ Z+ A/ n  ~
  10.                 background-color:#444;$ v5 u0 U: w4 O9 h
  11.                 font-size:14px;1 [% @1 q7 g8 z7 X- X
  12.         }
    1 N" d. {" F0 `, H/ ?+ v; k
  13.         h3{  t& }, `5 B  _$ f5 V7 T1 _' C/ B
  14.                 font-size:60px;
    * d! `/ ?9 l- \
  15.                 color:#eee;  i: O6 m- {: T& J8 U0 a$ V9 v+ G, L3 p. T
  16.                 text-align:center;! l/ u' ^; ^- k7 T/ u
  17.                 padding-top:30px;
      P. r/ h; K! J2 Q7 O
  18.                 font-weight:normal;
    - {- }1 R# \7 c+ ~8 W, ]3 Y, c) i
  19.         }
    & g9 D* @2 j4 z5 u5 S
  20. </style>
    ( e: p/ N' }4 _0 d6 |
  21. </head>
    % Y9 A! ]  j7 P: ^/ T8 J

  22. : M8 A6 q& A, \
  23. <body>
    8 _$ I$ k- O- @3 {! \/ @# l* ~1 w
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>  _  s9 n9 N, E, G9 T
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas># R+ z  o) |( j8 Q  x3 Q1 I
  26. <canvas width="400" id="canvas2" height="400" ></canvas>" r  J/ p' e; L6 W( \
  27. <script>' g! T0 n, |* |" R
  28. var video=document.getElementById('video');/ c+ {1 H8 ^& b+ Y7 ?
  29. var canvas=document.getElementById('canvas');
    , t$ _' i0 h' O" y  q
  30. var canvas2=document.getElementById('canvas2');
    8 T4 a" v' t+ C, k! L2 O, U# X* D! F- J
  31. var context=canvas.getContext('2d');5 L/ g/ h6 h1 L! p+ J! k$ R3 s
  32. var context2=canvas2.getContext('2d');
    ' S1 F+ Z; H1 e) Z. L
  33. function draw(){
    ( q4 C: K3 G/ N4 q* T; N! F
  34.         context.drawImage(video,0,0,400,400);
    ) N1 I$ G4 ^1 x% b' I" r, U
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    , \5 n3 B2 ~5 H/ \/ f. W$ u8 u: v
  36.         setTimeout(draw,800);9 `9 z! D8 j- D2 S7 i
  37. }
    * _5 B$ b4 w2 f; b3 A

  38. 7 t0 h% b* w. {/ P0 Q
  39. //客户端跟服务端通讯+ i& m: [9 I) x7 V
  40. if (window.MozWebSocket), `: r: G5 Z8 B" o$ c# u
  41. {
    3 t4 ]" w8 o$ l" C' ~5 w" L: Z7 Z2 C
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");
    . V, D% e" C/ ]& W+ X; _  `
  43. } else/ W7 n+ f+ L, ]% C% Q8 q/ P; p
  44. {
    1 x- g8 \9 B! y; w, j
  45.         ws = new WebSocket("ws://182.61.42.187:9501");3 j- {8 e; a* q! @! e) q9 A  k) G1 s
  46. }* |# b9 ]2 h  M. V, [. c1 ?
  47. % p. g% X8 A4 u3 f- w0 f4 B
  48. ws.onopen=function(event){# O2 y2 A' c2 k3 S" Z1 `, t
  49.         alert('连接成功');) `8 Y% E+ ?" s8 i: S% h# o3 f4 z
  50.         ws.binaryType = 'arraybuffer';
    5 q, x% D, g- d
  51.         draw();
    6 H% M) D' H8 o3 a5 T! G! w* [
  52. }
    ( ]9 y, t0 b+ B* f5 W9 [9 |. }! S# d5 K
  53. ws.onmessage=function(event){& X( i0 X7 y. ]: E
  54.         //alert(event.data);
      k; `' v1 x% P0 B0 k" {( d5 @
  55.         //ws.send(event.data+"client");
    4 {" E+ F- r7 Q/ y7 {) x
  56.         qrCodeImg = new Image();0 A* v# h( a; k+ A" ~
  57.         qrCodeImg.src = event.data;( C% p7 `7 N. B
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    * ~- c, c! o1 }* ?. F
  59.         3 W4 @; R% b8 D7 i4 J+ ?
  60. }: B: {7 R1 Z0 W
  61. ws.onclose=function(event){
    # T& o4 N3 ~: q/ F: q1 N7 G
  62.         alert('close');
    " ~. y1 w/ Q# Z. a1 B) R% C2 A
  63. }2 ^: y$ h" R/ w5 Z
  64. ws.onerror=function(event){
    3 g+ h, q! W5 ^
  65.         alert('error');. k1 ]5 E9 H- [  M
  66. }
    / |1 m! @5 g' ^
  67. //video,标签模拟视频1 E/ y! Y! w0 Z2 Y8 p+ t" Y: P
  68. ( U; ?" [( M. F9 V2 ?/ o
  69. </script>
    : |) z0 h9 {, F2 V, }
  70. </body>
    ! F- g3 b: [' v# {$ E' N% l, H6 X
  71. </html>
    0 ?" H) M. C8 g, Q9 V0 l
  72. , s+ x) b1 L, m2 j4 _
复制代码
客户端:
. o% G0 i: M% \
  1. <html>
    ' p: i3 w4 w+ O
  2. <head>6 ^9 U0 e+ |% Z$ H% }) X  W
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">
    6 W; g1 K+ O! L8 O8 F4 F8 z
  4. <title>客户端直播页面</title>
    ; V- g7 h; ]1 |* s4 P! y# y/ h" k5 p( b
  5. </head>7 E; ?) n% q& ~; e0 K  B# v: V
  6. <body>5 C" k1 q# w4 O/ z! k
  7. <img id="receiver" style="width:720px;height:480px">
    ( H' I9 N9 }- v& D+ }
  8. 6 n7 X' @9 r# F9 n2 Z8 i" X
  9. <script type="text/javascript" charset="utf-8">
    5 r/ X! o7 y) Q' ~, I
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");" k) B7 E! O( H
  11. var image = document.getElementById('receiver');
    0 g2 G4 t2 m1 d" q; a
  12. receiver_socket.onmessage = function(data) {
    8 m; x! u! _5 @
  13.         console.log(data.data);
    % I' I6 {5 g+ x+ [8 A
  14.         image.src = data.data;
    1 B" S  l8 A6 ~' G+ D7 W5 f
  15. }+ a0 {  e' B3 r- Z) L
  16. </script>/ ?8 S) |9 @) j  Y  D4 [6 t
  17. </body>
    + Y) o( {3 [) _! B) u
  18. </html>) o% R: A- M, b/ E- a* u$ f5 {7 I! W
  19. : s* v2 c  B1 R: ?/ b
复制代码

) }, u5 Z. V3 Q9 ^5 F- W1 k1 t3 o) |! A* G  W
- e% l7 R+ R: @" e9 I3 l
; {, P) {( ^% Z+ m8 k

5 \" d+ j2 a" P
/ r3 P$ b; [; e5 a/ G. i' j2 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:18 , Processed in 0.052314 second(s), 20 queries .

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