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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket/ k  k: S! c" b& ~
上代码
前端
观看页面
  1. <script type="text/javascript">8 T' n: H+ ~* F7 m; k) D2 I4 S
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    9 b% _1 s1 O; e9 i# U
  3. 1 y6 f: ^3 A/ j' A
  4. ws.onopen = function() {
    * W/ F& z2 `' V2 G4 ^5 a' Y
  5.     console.log("连接成功");
    7 [0 E, S! W9 \5 k
  6. };. A- |7 G9 j% l6 X
  7. ws.onmessage = function(e) {3 }$ A0 P) @3 w
  8.    console.log(e);
    3 g6 D3 n$ {2 \: |  F/ W$ b8 L) \

  9.   ?( ]5 y! p7 q& b
  10.    var data = e.data;4 b/ C/ @% e8 a& E6 o$ C
  11.    document.getElementById('player').src=data;
    * Z( I9 A3 ^% C
  12. };  P# q) _6 T: v$ x% B
  13. ws.onerror = function() {
    8 K+ X, k& ~/ t& Y/ N  V! G
  14.     console.log("关闭连接");* G; [3 ^) p2 x8 p* G
  15. };
    7 Y4 U9 U7 x: N# q
  16. </script>
复制代码
录像页面
8 q) j9 A6 P0 N* N
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    - U1 J7 A% W; v  R& m
  2. : r; j0 K0 g% w& K1 j5 f

  3. ( J& n  L( A! \' C6 |, L+ ]& Z
  4. 9 H" @2 Y8 L  r4 {' U+ F, I# {  m
  5. <script type="text/javascript" charset="utf-8">0 x) G# R1 A. T! P% b7 y+ @9 |% _$ B
  6. + A2 ^  H$ ?: Z" B1 u
  7. ! k2 R+ y  x8 k$ Y1 C/ j
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    : i1 t" o- Q7 x
  9.     //socket.send("嗨我登陆了");
      w, B2 M3 S! f* s; p# R9 V- d
  10. 4 h! q0 S2 \( d1 K% y
  11.     var back = document.getElementById('output');
    ' V7 h, D2 B9 Z& d! `( e/ L
  12.     var backcontext = back.getContext('2d');
    2 ?  _* Z0 @1 C) o
  13.     var video = document.getElementsByTagName('video')[0];% W+ R. h! x$ C" A# [
  14.    
    / D9 O0 e) F! o1 d6 L! I% p% s
  15.     var success = function(stream){- {7 \% x7 H8 h- z$ m6 G
  16.         video.src = window.URL.createObjectURL(stream);
    0 H9 ]7 Y5 j. u  b( N4 M
  17.     }1 ?8 S  D* x) j9 @# l2 W
  18. 2 I& f, h2 A, g
  19.     socket.onopen = function(){
    - g* w( z* |5 \, }% |
  20.         draw();
    7 T5 [+ ~, C* |: Q! Z# C
  21.     }
    5 G6 V  D6 U4 r0 h/ P+ g

  22. $ |; v  g: {, U* \$ G
  23.     var draw = function(){
      w$ ]- s& h: H  F* I- {1 Z) A
  24.         try{
    ' T# j2 q1 _# y/ d
  25.             backcontext.drawImage(video,0,0, back.width, back.height);/ S3 {/ j+ X3 u
  26.         }catch(e){
    ) B5 i  m$ C2 X8 V
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    - R3 j% R9 ^% @
  28.                 return setTimeout(draw, 100);
    # t1 x& r/ S8 w( H3 g/ t
  29.             } else {& U! k1 c  J9 J) B5 Z4 S
  30.                 throw e;
    4 |- R% F! |& a
  31.             }1 h9 M, ]( N% o' H1 X% B! c" G7 W. l
  32.         }
    # a9 P: J2 z3 f' Q: y- N
  33.         if(video.src){
    " W3 ?9 q  Z' X( \
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));; v- L4 G0 X8 ]5 N
  35.         }
    9 C+ s! |  Y2 b) ?; c. V
  36.         setTimeout(draw, 100);
    ! s, F3 |5 I# M
  37.     }
    3 J# I$ g+ j$ E0 y% W
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    ( h3 L# ^2 _- z# I5 ~
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    " Z$ V' l- ]; t% v. A
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    8 R; a1 v) P0 R% w, v
  41. </script>
复制代码
  1. php
    . m+ g! G* n# u6 Y9 d
  2. 1 `  ]7 t; m0 z$ m7 c
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);# Z8 n  T: h4 ~) t
  4. ' e  _, V3 U" Y
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    6 N/ c  z+ b4 z0 y

  6. ; D5 g! p- O& K1 X
  7.     echo "新用户id:{$request->fd}加入了\n";
    $ n4 k' i0 c! d
  8.    // echo "server: handshake success with fd{$request->fd}\n";' [% F2 }% Q' D& A% D
  9. });) x* B9 E3 P8 n7 h
  10. 1 |, g9 q+ C( D; S
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {5 y, g& _7 |: r6 o

  12. ( m8 B- x2 v9 s& R- I1 ]
  13.     //循环所有数据* @2 b8 N: G1 n
  14.     foreach($server->connections as $fd) {) U# N- B  O- h$ b
  15.         //返回数据) ]# V9 @( j/ u8 n) [# |
  16.         $server->push($fd, $frame->data);
    ) e' i) S1 j( [5 V1 \
  17.     }
    4 y. ^* V0 c9 L; A- s

  18. + }- s: j0 f) A
  19. });" H: R# ~, F& c; O

  20. 0 a. n, v0 p$ O
  21. $server->on('close', function ($ser, $fd) {( V% ]5 |, H2 `0 ^) n  m
  22.     echo "用户id: {$fd} 退出\n";
    / t. z) g4 z8 L
  23. });+ {6 Q5 E3 ], [( ^# {; t; Y

  24. . A5 \  h& O0 J& ]+ Y$ c
  25. $server->start();
复制代码

+ z; g( `, `' E# S
/ m( c; ^, T+ r) b) X3 h* n' @, D+ P
; i0 ^: X) v7 t- i
, W7 _& [" e/ U/ K% m# m, ^9 x$ N# y( C4 c- g5 r7 T5 q3 U9 X
+ L' @5 ]6 G. E; E

% _9 T7 k# Y) P& z) W( v/ a# i& {; @, n6 B' r! F/ Z
9 s, C2 M: y4 {
) t  i) u; f: ^) |
: n8 q; \3 f8 `$ Z

0 o  H( x6 p* |* P) L0 n5 X9 |, h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 21:43 , Processed in 0.069232 second(s), 19 queries .

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