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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码5 x6 w! s- k( e0 Z- C7 ~9 J
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);& }2 b2 b! u# k7 v
  2. $client=array();: D, l" D  ^2 L) \: c
  3. $serv->on("open",function($serv,$req)use($client){) `- B% w9 k  {4 u! R
  4.         //echo 'connect'.$req->fd;) z  u+ Y! w& H$ K( i" o
  5.         $client[]=$req;9 a) }8 L2 s' s: x% R9 h
  6.         //var_dump($client);: y7 u: c" z- J; M8 P
  7.         $serv->push($req->fd,'aa');' `0 i2 _. C1 a! F7 c1 o0 X
  8. });
    . d8 |2 w6 K2 q3 h! t, |3 _
  9. ) Y; e. R- |, M
  10. $serv->on("message",function($serv,$frame)use ($client){
    7 {/ \+ A' ?: @5 ~1 m
  11.         /*var_dump($frame->data);* d1 }; c0 v9 i. p2 @2 [7 k
  12.         foreach($client as $key =>$val){
    : C+ {7 d( }1 B
  13.                 $serv->push($val->fd,'aa');# r9 c" g# }4 V7 A. W: o! N; S
  14.         }*// P) L( I" A( Y: r- f
  15.         $client=$serv->connection_list();
    % B+ O, d( i5 T% u1 }1 R/ i
  16.         var_dump($client);. e4 l0 Q" V- P0 F0 d+ u  S5 S4 {: _9 k2 c
  17.         foreach($client as $key =>$val){: T9 w! k) f3 l" c1 u* |% ^% {+ a  D
  18.                 if($val!=$frame->fd){
    0 }( T0 _- f+ x( K- F# C
  19.                         $serv->push($val,$frame->data);' k0 d2 _1 K' i6 g5 h1 {3 g5 x
  20.                 }# _" @. b  V' S9 Z. v' M# J" e
  21.         }
    - \2 w  J0 b3 L7 ]" s
  22.         % H& R/ L( _* V1 v
  23. });& @- v/ \. I' Q& R1 t/ V

  24. ) a& G' [, n+ }! B" l
  25. $serv->on("close",function($serv,$fd){1 O' [2 `" O: P
  26.         echo 'close';
    * q# t3 q! }8 S/ j) Q' [1 H
  27. });9 \5 u2 ]# T6 @# t" O$ p7 I
  28. 2 A9 g  E. X) I+ C5 J: k" g
  29. $serv->start();
    ; k, j2 }/ i( q

  30. , n% H; ~; `% R$ e
复制代码
主播客户端$ m* W2 ?+ M: W0 |1 }. o7 V! L
  1. <!doctype html>3 G0 @2 H# G# Q5 |, O8 ]' r
  2. <html>
    ( _8 g/ R9 @# j0 ^
  3. <head>
    ' s, ?* J1 ^2 a- Z0 w8 a
  4. <meta charset="utf-8">9 m7 K; J6 o/ S) _

  5. ; ?% Y0 ~' O- }8 X# K3 U0 _  d& W, U# w
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    # \6 W+ `  v7 X! J
  7. <title>404</title>6 s% e+ y  F' [- E
  8. <style>
    5 n3 ^( w' J* e6 n: ?; k8 t
  9.         body{' F2 r) R# ~' J7 P
  10.                 background-color:#444;
    9 S# V0 g! a+ J- W/ X
  11.                 font-size:14px;
    7 ~8 T; p9 [1 j
  12.         }/ B# h0 q8 B+ u3 i& U
  13.         h3{/ ~6 B4 K/ O' N; g. G; \; s' x; t
  14.                 font-size:60px;8 L! E* t4 R1 \5 k
  15.                 color:#eee;
    ! o# g  f5 h. q& ~" ^* |. D
  16.                 text-align:center;
    & Y" b$ I& _6 h- [1 Z; x/ ^1 h
  17.                 padding-top:30px;
    ' t  i3 ?, Z$ S3 i$ r8 E, k
  18.                 font-weight:normal;
    2 m0 w* r  L+ _+ r$ t
  19.         }  E  L" C9 p$ v1 U2 Z
  20. </style># J( ?8 B5 c0 r2 X& _
  21. </head>  s: w0 X' c3 j4 Q
  22. $ P# A( V: B% k" G; E2 `8 g
  23. <body>
    ' O1 B. h( y, ~* y+ e: C
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>6 j. u. D" m. E) h
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
      S( X  Z, F# c
  26. <canvas width="400" id="canvas2" height="400" ></canvas>
      z" d# P* C. ~
  27. <script>8 d1 _/ _* W, K* v0 @
  28. var video=document.getElementById('video');
    - l7 w' R  j2 r9 A) Y
  29. var canvas=document.getElementById('canvas');  q3 F% y) Z( R' S- _5 B+ f8 U, g# v
  30. var canvas2=document.getElementById('canvas2');
    ) c& N" Z; S$ W/ u/ G6 j+ g5 _" g
  31. var context=canvas.getContext('2d');$ J  Y0 g3 i+ s5 |6 l
  32. var context2=canvas2.getContext('2d');
    - ^* j' z% T6 ^0 E' h# U
  33. function draw(){. q- @" R# p( t8 J+ S9 ]# k
  34.         context.drawImage(video,0,0,400,400);
    . w, C' X0 [- L* t% Q
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));/ t9 T# m7 M; K+ N0 q$ J
  36.         setTimeout(draw,800);7 w( s1 Y5 @5 c
  37. }
    9 l& f/ H4 m; g; _) X
  38. 1 a2 \; M) D, s
  39. //客户端跟服务端通讯+ z/ l# x* {- b+ J
  40. if (window.MozWebSocket)
    6 J0 A  ~% Z, O$ w; ~
  41. {
    $ V" J& f8 W7 \/ @0 d7 @+ }: ^
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");3 \! |( I+ f' \" {) u* ]
  43. } else
    6 P" U8 }' c) ~
  44. {! E& ?; H/ ~9 {' z3 @( ^( I% u
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    % e+ A* ^6 a- z$ y
  46. }
    ! A$ e: |# E- k" Y1 E) Q$ ^
  47. ; e5 ^1 x3 b( L' i0 e0 u$ g: D$ o
  48. ws.onopen=function(event){
    0 ?& ?, D5 C# T! F$ N* D
  49.         alert('连接成功');; ~) N5 v; e8 h- V) X
  50.         ws.binaryType = 'arraybuffer';
    * g5 K- O3 j6 D/ I/ ^9 q
  51.         draw();$ n9 V8 t3 i2 ^1 l* U
  52. }
    9 Z5 e- U9 B# {8 X
  53. ws.onmessage=function(event){" j7 ~# e9 y; s! x- @  O
  54.         //alert(event.data);
    ; N9 o3 e- M4 `: f
  55.         //ws.send(event.data+"client");3 [' S1 ^6 [! \5 o9 N$ x
  56.         qrCodeImg = new Image();
    ! l" U. l' T1 {1 L
  57.         qrCodeImg.src = event.data;' f% J5 F; C: J
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    ( f8 r+ |( o! V, M2 r/ D
  59.         
    8 ~+ u+ w0 G% ^9 @6 k6 y& d
  60. }
    , ~# F3 q+ g. P$ ]) E7 W
  61. ws.onclose=function(event){9 N" W! Z- k- S9 a3 K; j7 E9 U
  62.         alert('close');
    # {9 V1 B* K% C+ a( t
  63. }
    8 K& y( S2 Y3 A& c2 P
  64. ws.onerror=function(event){
    & }% G, D- ~3 \& J, E
  65.         alert('error');; b1 J5 f- U! _  ]4 U9 r9 e, n2 `
  66. }
    ; h2 k( [( W$ Y
  67. //video,标签模拟视频2 g) p& c, `1 G. _; k5 h) q8 w

  68. . T- t% H) q; J& y8 R! _; J2 Z1 [
  69. </script>, T9 e* y3 |& Y  X4 |9 c5 X' W
  70. </body>" ^& O3 g/ r- ]2 Q# V
  71. </html>
    * T6 G; v( h5 }6 ^$ l  ]7 u
  72. 4 \3 q  ~2 c2 H9 n. Q
复制代码
客户端:$ O% I, M7 d# j" v# `
  1. <html>- H0 g/ a( V0 a# j! ^
  2. <head>
    : P9 e- r8 u! Z& A. e) O8 R, K' ^
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">* ^- d' i+ g! w" n4 I! B
  4. <title>客户端直播页面</title>- X+ ?/ U* q1 R  \
  5. </head>
    5 ^7 D. t0 S# s4 y
  6. <body>
    ' p0 s& q+ l# ]  A
  7. <img id="receiver" style="width:720px;height:480px">
    % j/ G9 C/ X+ _3 q

  8. , M4 a8 D4 B) T# E# }5 Q
  9. <script type="text/javascript" charset="utf-8">
    $ O+ [' `" }4 B7 _( e
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");3 R* z& i  n+ c( _) n
  11. var image = document.getElementById('receiver');
    # S# {% s# {) A9 p0 N
  12. receiver_socket.onmessage = function(data) {
    5 b8 ]" ~9 K& ~" R
  13.         console.log(data.data);5 L' b: g9 Y8 d8 i
  14.         image.src = data.data;1 w  L! }" t$ [: ]! J% z9 S; h6 n
  15. }
    / j* Z: z% D  f- T/ r0 ~+ d# x3 S
  16. </script>: s  }* q" t) T' g. ]2 ]- m
  17. </body>
    ' i+ z8 L; @) _' j3 e
  18. </html>" x: V/ i' z- d9 v. ~9 j

  19. . F1 n' l/ m/ M4 w" h& D
复制代码
3 k) h6 j0 a0 y, ?+ j, \, D; `
+ n, H- ]2 ~4 @/ z

- H) r: @1 M. T$ f$ X: V8 S' O/ p4 a0 n; N" J1 D

4 u, D+ @) {) ]# s/ W* E6 Y& j3 w8 O) B' m4 F2 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:38 , Processed in 0.081454 second(s), 20 queries .

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