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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
, T9 e5 e2 w6 Z2 Q$ `' d上代码
前端
观看页面
  1. <script type="text/javascript">
    2 N- t) z' U1 c+ j; n
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    2 o5 s" h' i& V. ?: F) }

  3. $ j8 Y; ?7 R' P1 |
  4. ws.onopen = function() {
    , T# y7 g  O7 e, `' e& Y# r6 r
  5.     console.log("连接成功");# @: T. ~- [: i% {2 n' A* B
  6. };) k. V" u; c3 z) F% E5 j
  7. ws.onmessage = function(e) {. t& [( u. x0 v! [( u
  8.    console.log(e);- t: \1 w# a. r8 Y1 a. K& I

  9. , G1 N6 X0 o4 {1 C
  10.    var data = e.data;
    ) ?) J. S0 b; N  O
  11.    document.getElementById('player').src=data;
    4 W. s" I5 B4 Z  O' O9 Z3 |
  12. };
    . H* x' S) f1 G3 Q4 q( t
  13. ws.onerror = function() {& y/ R" X/ _5 P- t6 N' H( V
  14.     console.log("关闭连接");2 b7 ?& y, w4 N0 A* X
  15. };
    1 z9 W5 j, `8 N
  16. </script>
复制代码
录像页面

% }. H6 O. i/ f8 v
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    : Q0 d9 j7 _  m. k( ~; q: }9 \5 o
  2. $ S+ C% O# @9 ?, c* `6 C
  3. ; ]* T6 D8 T4 ^  h& S$ J
  4. * T4 M$ n  `! w% f. L5 g) ?
  5. <script type="text/javascript" charset="utf-8">
    ( D" F8 {" h" x: r; n% v( N+ S

  6. 2 Q3 }. ^& _( ^2 G# c& W
  7. 9 H- @# v! `; O, q" Q6 J0 m
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    ' V. a1 ~1 V- N
  9.     //socket.send("嗨我登陆了");: y" ?) A/ s6 Q0 o* H" R
  10. 2 p7 _+ y- G. f
  11.     var back = document.getElementById('output');
    3 H7 O# Z# b* T# @, }# q
  12.     var backcontext = back.getContext('2d');6 m7 x9 R% P  \5 T6 {5 [
  13.     var video = document.getElementsByTagName('video')[0];
    & ?1 Y7 G9 \; [* a8 R
  14.     8 x* n: N- E, X/ [# |0 [& H8 c  Z
  15.     var success = function(stream){/ b- a6 ?# `8 D7 J, w$ \" I
  16.         video.src = window.URL.createObjectURL(stream);
    " _6 n7 B; T+ w
  17.     }
    & g9 R. ]8 R% c
  18. , B8 w/ u. L5 x# J
  19.     socket.onopen = function(){
    & r. `, ?; v4 I5 ?' V! y& W! @
  20.         draw();- q6 ~' |7 k& s; Q9 f! g
  21.     }
    % I1 g- I% A0 e+ F& H% H% c

  22.   U2 L/ [1 s0 {' L, x6 }
  23.     var draw = function(){
    & }9 a& g' U8 Z) ^9 L, r* b
  24.         try{
    8 N& `$ ~! w3 C# C, i. A6 \
  25.             backcontext.drawImage(video,0,0, back.width, back.height);, n. ]3 _' i3 \& W7 k$ ?6 \2 Q
  26.         }catch(e){5 k" x( N+ v) j; i
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    $ L4 F( A+ W4 q6 a5 d
  28.                 return setTimeout(draw, 100);( F, s  S$ P8 M0 v/ |
  29.             } else {0 j9 }1 w: ~$ v; I
  30.                 throw e;; Y; o, P, l  m0 D
  31.             }
    5 j8 b6 _% L! `9 G
  32.         }7 B/ n5 _/ \$ U
  33.         if(video.src){7 N( o' E2 d% w: \& z/ F
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));' ?0 a9 v$ u- j; u6 M" R
  35.         }0 `9 I0 F; l2 K
  36.         setTimeout(draw, 100);& J5 L7 N/ N* k0 u" M
  37.     }
    ! `7 U  a$ F0 C; M: Y) Z
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||; P: x" I6 O7 f% r4 v( H- E
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    6 }. W2 Q! |5 V) g9 ?  L
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);+ o+ O! F) o( s8 b6 p% I. d: B
  41. </script>
复制代码
  1. php
    ; s1 v) t4 W9 Q
  2. 1 z/ v) p( A- n5 s7 H- L
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);! \# I- y! I# y

  4. : n$ t! _4 e8 n/ V5 D  K5 Q7 p
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    1 L5 T6 V1 m" r; |9 R

  6. " m: |: \8 G0 j1 x
  7.     echo "新用户id:{$request->fd}加入了\n";
    ) h" ]: I) {: L1 r2 n) r" k3 R
  8.    // echo "server: handshake success with fd{$request->fd}\n";* B, E  @, ]# c( I4 r" z. [# K
  9. });
    2 W) {! B3 \! J( S9 F- q7 T' S* s

  10. $ H" e$ h" C  h* H5 \5 E) Y
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    6 l& X+ z. H" ~' V5 c! |, p. ?

  12. , _2 C( e  }# t' `$ B. g
  13.     //循环所有数据
    0 R  I3 P& w: V3 [
  14.     foreach($server->connections as $fd) {" k3 T; K4 Y- E5 A5 e% d* e
  15.         //返回数据
    0 t/ n0 Z$ K. D1 v& n7 P
  16.         $server->push($fd, $frame->data);; \) k* a# n& R4 d
  17.     }
    # E- z6 ?, w, z- G* }, J

  18. % {' W; f* V6 w/ e' u) S8 W
  19. });; ]# [+ Q1 p" ?

  20. ! r' |$ f5 S' [" h: n6 I
  21. $server->on('close', function ($ser, $fd) {
    2 \0 Q, W9 \# X/ q. b4 z& y( p
  22.     echo "用户id: {$fd} 退出\n";- @% y& ~) E/ d6 x4 P' S
  23. });2 v- e8 U2 m. s, `  D+ {& S9 `
  24. 6 G5 ]) `5 _" S; F
  25. $server->start();
复制代码

8 y+ L* s$ M7 A" p4 |/ _% b- G6 x% P4 m0 l" L1 F) n4 N

  k; l' i+ F1 e5 M& J/ d% s. ?0 ]: ]1 u+ a' }0 M' K' d
% g8 T2 K; ?! V$ K# r- W' p
# k) G) R1 C$ g# D1 X; O

& i4 S; Q9 z9 z  K: O* O# q% u, C+ }( @4 T  t$ `6 I. {: W4 g, x6 T
4 ^( d2 \0 w4 N. E. d" A

, D" I: C5 @: g7 n3 I4 X# V. p! V- F3 c" {

5 m3 S3 k4 B! L7 t) P: ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-6-26 07:40 , Processed in 0.116062 second(s), 20 queries .

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