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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
* |: o, G+ H- `6 @上代码
前端
观看页面
  1. <script type="text/javascript">
    ; u6 G+ t. ]4 o7 Q0 E% v3 V
  2. var ws = new WebSocket('ws://192.168.0.150:9502');4 j0 F* `3 H: v  O% G0 X7 f
  3. " i" a( U3 x' q7 D0 I  o4 X5 g
  4. ws.onopen = function() {
    3 C5 }7 `9 _6 o. K% ]. h$ u
  5.     console.log("连接成功");0 a- e0 g) a3 E% q' B8 Z$ ]# Z$ ^
  6. };
    - E! n, m7 z/ O& \8 F& D& T
  7. ws.onmessage = function(e) {
    - d+ i6 q! N9 j
  8.    console.log(e);( |( M3 G+ Y% [3 Z; L" |) G9 y

  9. 9 T' `. h2 {6 L* J$ L7 g" N
  10.    var data = e.data;
    1 R* o( L( ]) K# E/ |. q1 w
  11.    document.getElementById('player').src=data;
    9 W5 I! _5 h% |
  12. };
    + H" }) |$ n( j( h5 M" f2 \' J. j
  13. ws.onerror = function() {
    + Z* J4 z0 [% e, K  q
  14.     console.log("关闭连接");( n+ u( d; m" R, I
  15. };
    : E7 ^3 j. |* r( U" L, K0 p
  16. </script>
复制代码
录像页面
' \! J* u5 y. O3 B, L: A" b
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    ! z- e  M: J$ E9 l

  2. ; U: a/ O( j! O7 X4 V" D
  3. . v5 ^3 G: A. g* ^1 t" Y
  4. ' x! U' v3 h5 U& W
  5. <script type="text/javascript" charset="utf-8">
    1 u) J% i: D: b

  6. : h" U& Z: E& f! ?& |

  7. # R' u. }* e( I- Z2 d: F
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');( q5 C- {# J! t2 ~9 R5 [2 K1 P7 o, N% V1 U
  9.     //socket.send("嗨我登陆了");7 _$ V4 z$ E0 m3 I- Q8 S- v

  10. 9 Z8 W( Y: C% E# f$ K' J
  11.     var back = document.getElementById('output');" ?# @7 ?/ t+ x2 v4 ?% X4 C# D
  12.     var backcontext = back.getContext('2d');
    9 T: _5 J* c. T" _8 B
  13.     var video = document.getElementsByTagName('video')[0];' R9 o, D9 V/ F- U6 z: Y- _: U( Q- I' t
  14.    
    . t5 p8 p: J. d9 }% z* `3 B
  15.     var success = function(stream){$ O8 \1 P* F" T$ N8 {
  16.         video.src = window.URL.createObjectURL(stream);/ h( F* S3 I* E" M/ i( `
  17.     }, o2 n7 u$ d9 x- R% ~
  18. ) `) d  ?$ a* F
  19.     socket.onopen = function(){- M: O% O2 F+ I/ E. |
  20.         draw();/ n  W* u& E3 s& T8 o- P5 U7 W
  21.     }9 F  C/ E+ V$ }+ F
  22. / {3 t0 D1 Q5 z5 c4 [9 y0 R$ P- j0 u
  23.     var draw = function(){
    & K, m* x% g. |: G0 {( v
  24.         try{
    * e# F& n' d% _
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    9 S. o/ m* k/ V
  26.         }catch(e){
    6 J  I4 U* |- K2 d7 I
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {+ x  [' h0 L  C+ B2 J( Q+ {
  28.                 return setTimeout(draw, 100);1 A( G" |) Y( [  U% g3 @! s
  29.             } else {
    0 B4 S+ K- a+ w: |) j1 ^
  30.                 throw e;! z+ {1 t7 Z$ n4 r* G2 s+ s; l
  31.             }7 J9 Y4 g) S; I  _
  32.         }
    ( J3 R3 Q. ^$ ~
  33.         if(video.src){
    5 H4 b$ p& k* l  |  ?. X, [
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    3 ~6 A4 Z+ X1 ]9 W! m. B5 S
  35.         }8 e$ v5 Z0 Q7 @! m. V4 X
  36.         setTimeout(draw, 100);
    * E' b0 q/ i' \# O& d" M' }. h7 H2 a# ]
  37.     }# D, q6 N$ k" M
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    # w+ `  d5 m' S* C& v
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    % M7 f0 N& e8 U
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);! m# P/ I8 ^% O% x+ ~8 V- ~' S
  41. </script>
复制代码
  1. php
    * v3 E+ [: L0 o: @
  2. , T+ n* Z/ [4 @7 k; U4 W
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    6 G% k& z( a5 R
  4. # g7 p7 p  e/ C
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    . U; q4 J. K: L+ g% j

  6. - {8 F8 C/ z7 I7 G% I& ]2 `8 R
  7.     echo "新用户id:{$request->fd}加入了\n";+ Q1 n& u, B, z5 ^2 ~
  8.    // echo "server: handshake success with fd{$request->fd}\n";2 T6 ]' m4 h  c# L' B
  9. });; C( q6 J8 X7 [2 a0 U, g4 ]# a

  10. 4 {4 z+ j0 \9 |" H7 ?
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    0 v6 h3 ~8 u7 _/ B9 N+ G0 x

  12. 5 M1 {1 Q/ X9 V7 {
  13.     //循环所有数据
    * F" D7 H" ~4 a- I+ M$ a
  14.     foreach($server->connections as $fd) {; ~" z3 M6 W5 n6 j) ~4 a/ R
  15.         //返回数据
    3 ?5 K* y/ `2 I7 m) x
  16.         $server->push($fd, $frame->data);
    7 j; E6 R$ G* }
  17.     }/ Y. q: Y6 m) y6 K) j' ?
  18. " z0 O) R- _, D! ]4 ?: B. X! p
  19. });9 U) I$ \2 ~* O) |5 b8 ^" t

  20. : q5 m2 t& _' V3 l: W
  21. $server->on('close', function ($ser, $fd) {
    9 i: @: s. f4 u( Y7 ~
  22.     echo "用户id: {$fd} 退出\n";; i; y/ x. L7 o# `8 M" _) }0 A
  23. });# }4 s; ?7 m% ]4 _

  24. % |2 ^' n! X/ H9 ?( d! j
  25. $server->start();
复制代码

9 a; }1 F1 I$ h  Q, C# K/ m8 M& }; ^
0 N# Y$ D6 r* g5 ?# S( ^

4 ]% z& q9 a/ w; [' _) P+ b' j
( x+ a. X  k+ y) ?2 _
: E: {3 f% a8 b
2 i/ f* C6 t- H5 G8 ~
# u/ g) N& n8 y* [7 ^( i# j4 ?8 S
8 \" n1 j' B$ i
# j8 W8 Q2 u1 x
9 x6 U9 z5 p1 c
1 j$ v! _3 k+ Q; G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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