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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
8 v$ c1 I" A! A' u/ X上代码
前端
观看页面
  1. <script type="text/javascript">" l! B  a7 |- a+ M3 A, P
  2. var ws = new WebSocket('ws://192.168.0.150:9502');  E8 t5 a  K/ z1 a; j2 d. R# o
  3. " h0 b) w+ s8 G+ m- O
  4. ws.onopen = function() {* N" k) F. O* }4 T1 e) `1 y
  5.     console.log("连接成功");
    2 p0 a9 k- I: c$ y- ?) a
  6. };$ s0 G# w0 f; s: F" p$ e" Z
  7. ws.onmessage = function(e) {
    - N6 R. ]; h: m# \* ~2 J
  8.    console.log(e);. I% ^5 w# D7 P+ J  s% k/ b+ R' y' R
  9. ! J7 k4 M1 j' Q, p
  10.    var data = e.data;5 B6 N+ Q; L, E- @
  11.    document.getElementById('player').src=data;
    . H2 Y9 r2 g1 Z& }2 S
  12. };
    ! U8 O' K4 g/ e( [! w
  13. ws.onerror = function() {; Z3 K1 i( Q+ e9 K
  14.     console.log("关闭连接");
    6 k4 b* b3 N. D5 a
  15. };$ |' C! F6 R+ A
  16. </script>
复制代码
录像页面
3 x' v, n: z* _- Q  K9 Y' E
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>. P# r4 O5 }, y5 |, p9 f
  2. ! w1 Q  t, X; N1 q0 _8 M1 x

  3. 7 d3 ^$ O, X' j$ a1 X2 p* m

  4. % [( H, l/ c! X! e8 f1 c" |8 p
  5. <script type="text/javascript" charset="utf-8">
    , Z  q8 K5 ?% L2 c- P0 Q; x

  6.   h4 O' |/ N0 i& P7 d

  7. 9 r( _" e2 F; j# E& E5 v
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    $ z! l: D% o- V7 g! c+ \/ r& E5 H
  9.     //socket.send("嗨我登陆了");
    8 q' `! H4 ]( l1 K* F3 [/ _
  10. . \6 D* x* ]3 u( k# o( p- l
  11.     var back = document.getElementById('output');
    + S8 M+ r( |9 A9 j' W( f
  12.     var backcontext = back.getContext('2d');( C# A4 l  N: B5 g) L  J) ?* W
  13.     var video = document.getElementsByTagName('video')[0];
    ! |4 E2 r4 ]/ Q" k
  14.     * q: f' m2 @+ Q3 T& ^! e
  15.     var success = function(stream){
    ' H" Q6 S" f3 I# U
  16.         video.src = window.URL.createObjectURL(stream);
    4 }2 M5 V4 B2 C. K2 D: [
  17.     }% y4 J8 _$ _: N+ Y, a& O
  18. 7 _8 G" ?% w2 L$ U4 s0 l7 q( U, x
  19.     socket.onopen = function(){
    . v, b# F* P- ^  l2 {( U
  20.         draw();
    , M, \0 E# f3 B7 M
  21.     }
    4 H' j- `6 f" O# S: z/ X

  22. + K1 Y( Q/ s5 @
  23.     var draw = function(){
    # @" Z* a2 b, J$ |9 l
  24.         try{
    3 C; i) |4 s3 F' A  N
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    ) p/ b" R/ o$ O4 E# B" ^. d
  26.         }catch(e){
    " f% ?9 L1 ~, |( v% X
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    9 {# `3 y  ~; C: g! G% v
  28.                 return setTimeout(draw, 100);
    8 R- I- u9 h3 k* T1 ?
  29.             } else {" ?) |. k+ u8 C4 M
  30.                 throw e;; s! y! K0 d, V7 R0 g
  31.             }6 i, w) a$ l# }' ?0 F1 J- J
  32.         }: d3 g, @: J0 ?. Q
  33.         if(video.src){
    & k$ O  ?- a: f+ W# X0 h( l
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ( F( W, D7 ^! r2 m* |
  35.         }
    7 v# W3 B& f( d' x5 ^3 g' ]/ z6 H
  36.         setTimeout(draw, 100);
    : N. N" p6 h9 J, o" A
  37.     }
    # `8 y4 O6 e: X  X
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    6 {( s2 ~2 H3 |9 t' F
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    9 J- o3 |3 h; `
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    3 F( x' z3 d; Z
  41. </script>
复制代码
  1. php
    9 [2 a, U5 c, [2 M  p0 N! `# t: g
  2. 3 O1 M6 E% [5 f/ D4 q2 n
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);5 \! N+ s( D' ^6 B
  4. * P* r4 L7 m" b# m$ e0 N6 o  W; F
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ' v8 k+ Y0 G( F9 W

  6. + ~8 `2 e1 f# S
  7.     echo "新用户id:{$request->fd}加入了\n";
    9 N  s* W5 J" T- Z  Z, f; ~! L
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    7 [& v0 W$ F( N3 g1 ?) i
  9. });
    1 Y% D( ?% |( _5 J

  10. 6 `- l; {. q) i. D$ `
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {9 j4 Y; A0 Z1 r) o% d
  12. $ e1 I, o' Q+ D$ K! ]& d) b! w" g
  13.     //循环所有数据6 t' U. H4 [7 h% k; I  _  v
  14.     foreach($server->connections as $fd) {
    / i- T! ]6 y' b8 {( n6 u
  15.         //返回数据
    7 e8 R% v' H6 [) V" A7 F$ Q
  16.         $server->push($fd, $frame->data);
    ( s# g1 [/ X$ ?9 b  q8 E
  17.     }( i& b" ~5 q8 O: b% ]6 {

  18. 8 m9 h$ h; M4 p5 J
  19. });" ]0 M( q8 Z- g- A
  20. 8 M% J! T# s# `3 H4 {6 a
  21. $server->on('close', function ($ser, $fd) {; a; e& |; z0 `6 T$ f1 c$ W* i3 {
  22.     echo "用户id: {$fd} 退出\n";% R0 Z0 m' v! o# W2 C
  23. });
    . C& e$ {/ Q) Z8 o; q! ^
  24. 3 @# |+ l! }/ }; S7 F, d
  25. $server->start();
复制代码

: ?- [/ O0 U9 X+ O# a. a7 K5 M& A3 }) g
5 z- N6 u; ]4 `& t% b' ?; g2 k! }) @6 u$ [" h
8 e9 r# Q  q$ }1 f# P; Y' }8 c

6 X9 O; [1 T! p+ U+ a& w' _+ O% h. d# Z. [
& J5 z* ]) D4 U9 b
* t4 `$ R! M! D& r6 y8 J$ Y

$ F$ [; K+ P/ z) X. G2 Z0 R5 k$ [) W4 M2 Z

! e& L" R- \( g+ b6 j7 }; R% C3 u" d3 W0 [4 _1 m# o$ ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 21:04 , Processed in 0.053629 second(s), 21 queries .

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