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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket. r$ E2 `; s+ w- w" Z$ Q) i
上代码
前端
观看页面
  1. <script type="text/javascript">( E; G! o+ K. O7 r- Z0 m! E7 h
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    & {- G/ F, ]$ N) q) d

  3. ( X* n7 e/ K! _- H( B
  4. ws.onopen = function() {- `' S; r$ o3 a9 R9 N! W
  5.     console.log("连接成功");0 j4 ^8 s7 V! K( ]( Q; v
  6. };
    1 j6 c! B2 y+ b
  7. ws.onmessage = function(e) {% _" P  Y/ E9 Y+ b
  8.    console.log(e);
    2 ~4 |% o) X) Z  g( e2 [

  9. 5 i4 S3 Y5 H  g1 H- N4 r
  10.    var data = e.data;+ J( ^; z9 P  Q
  11.    document.getElementById('player').src=data;( M+ E+ I$ e# P$ |, s
  12. };
    / p8 m. W% s+ U! j/ e& q
  13. ws.onerror = function() {
    . N6 l: G7 |* J7 Z2 v; \
  14.     console.log("关闭连接");1 x1 q1 I9 ?% ?0 u+ ]. v( c
  15. };% P0 i+ Z0 R9 r5 P8 `- c$ J0 c
  16. </script>
复制代码
录像页面
: Y2 ^4 G) v' O# [5 s9 w0 \
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>; c% O' ]$ C6 M0 X$ `8 P

  2. 5 ~( X9 X! y  l6 Z: T* e

  3. / l3 k$ h; Q& [3 y8 ?# O* \/ b: }
  4. ( _7 s/ j+ |2 X% x% `
  5. <script type="text/javascript" charset="utf-8"># N% l3 M6 K; s$ l6 k

  6. # G& F  r. F" }. I

  7. 3 q1 w! q" S) ?& J
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');' ^; y6 g6 ?* G9 i1 b& j" Q9 I
  9.     //socket.send("嗨我登陆了");# C% D, c% {8 Z7 }9 ^/ u

  10. 0 p, H! k, x, n9 g; }4 k, s* H
  11.     var back = document.getElementById('output');
    8 U0 G% G& ~; F, P" ?1 L
  12.     var backcontext = back.getContext('2d');
    3 y& _% e( K) g
  13.     var video = document.getElementsByTagName('video')[0];
    * r) |9 k) O8 F5 M6 d2 ]; y
  14.    
    9 H2 t4 E) Q% r& @* }4 p" @$ B
  15.     var success = function(stream){
    + L: W& r" M& w/ k! k8 Z
  16.         video.src = window.URL.createObjectURL(stream);* v4 S8 @- [/ Q4 S; b
  17.     }
    % L1 H5 R4 m+ l3 d  \* e

  18. - s" [1 q  D" D4 p6 v* ~' l
  19.     socket.onopen = function(){
      ]- H3 Q+ i+ ^/ J1 J8 P6 ^# ?
  20.         draw();: k; k6 U" I& o- ^) C$ E
  21.     }
    : X2 s5 Y* K( E6 a; {
  22. 1 o+ {$ s% d4 d) O
  23.     var draw = function(){
    ; `. e& T& C( ^7 {1 X# w. N% ?
  24.         try{8 Z/ ~1 j- F6 d+ l* q
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    0 t0 B8 O. u0 U6 c3 ^
  26.         }catch(e){7 T" f4 a) _% K' l! B: }/ |
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    : v! g! |0 q2 `8 F2 g
  28.                 return setTimeout(draw, 100);% J( L' n# g3 @- @/ C
  29.             } else {
    2 f% O) w6 C( y, @8 D- B
  30.                 throw e;) A% j; _5 x" j, j- V
  31.             }, b3 d4 N$ V. }# r; I% N" i% W* C
  32.         }
    ' ]( ]2 M) {$ z8 E. c) g0 D6 o4 A, X
  33.         if(video.src){
    , c/ A1 i2 L5 H! A, V
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));3 M" F- r! f' d) ^0 X' r# E6 c+ d* q
  35.         }
    4 P2 I: m8 @  n- p! ^
  36.         setTimeout(draw, 100);
    ( |2 N) F" }1 I" x0 i% V
  37.     }* x$ t; m. I6 A% x. C& H- k( \4 i
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    ' L4 f+ v. E. n) C. X5 i
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;# g* @0 b5 `# v0 y
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    9 H! \$ ^* i1 ?+ [
  41. </script>
复制代码
  1. php: x' x% e$ d* \# S8 W9 F

  2. , h( {% F: M; ~6 `- c$ y
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);+ C" M. u! R3 y$ m
  4. 3 K: z, N/ }3 b" E; I/ B# D- R
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    - {  L" G) d+ g4 K  z6 x: n0 c1 ?2 Q3 Y9 K
  6. 2 D& @/ U  Q0 z7 T- l* F$ M
  7.     echo "新用户id:{$request->fd}加入了\n";: f* q; Y. L! u/ k
  8.    // echo "server: handshake success with fd{$request->fd}\n";- A2 }$ |1 V5 Z8 G5 \  I" A
  9. });
    4 }: Y; m2 ]. \" e% k$ f
  10. * t- Y  n, ]; f
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    ( L9 D5 J( l; f" n
  12. 0 P7 o2 w) ]  T
  13.     //循环所有数据' m9 _8 I2 E- }( Z3 o7 F  a
  14.     foreach($server->connections as $fd) {( m2 t6 H8 W$ a8 M+ y8 q" F- w
  15.         //返回数据( L' v4 V" P  Y% z
  16.         $server->push($fd, $frame->data);
    6 F8 X$ W( q/ j. {
  17.     }# o9 G$ R; S0 @) j8 p

  18. * Z6 r/ y& n6 ^7 `* f
  19. });6 M$ Z* ~1 w% Q3 N& A
  20. 0 I: X: g( D8 B% D, o# r$ @; s0 J( k
  21. $server->on('close', function ($ser, $fd) {
    7 k/ b6 b4 }/ n' Y
  22.     echo "用户id: {$fd} 退出\n";
    1 Z. D* x  K6 i3 m+ D& W
  23. });
    + ~0 X1 e5 o% H$ L4 w! U! [" D. D

  24. 4 ~) H0 D/ a; t# i: n0 E' Q
  25. $server->start();
复制代码

# _6 b. F5 G) c2 f
" _% {/ ?( C4 n& _% x% R/ r5 |8 y( B8 p
+ ^/ E) E6 P4 f
/ n5 J1 t( y, C( e+ z# w. `# M: q. @1 C! s9 `
; A0 d' ], J/ i: N
0 |0 ~  [6 K# m5 V3 x" m8 a9 I/ }

5 K# a7 v: U( o9 s' x, U4 ^
6 D8 W: H4 m2 u) |$ j- ]; g# ]: s4 A( z9 n+ u, \$ S2 E
0 h0 z, Q0 E( g/ i/ }( P

& j1 x  ?) q+ o4 _+ s% C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:08 , Processed in 0.058692 second(s), 19 queries .

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