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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
3 [: y$ l- b( g7 b6 S3 K& u上代码
前端
观看页面
  1. <script type="text/javascript">
    & `1 I" G. f& J, ~: f3 v
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    ' L- R9 P# ?7 d' e

  3. " J# `" Z. S, M* P
  4. ws.onopen = function() {0 q! [) x; c* M& |$ ~. T, i
  5.     console.log("连接成功");
    ' O, x; d3 r4 A7 L+ H1 R$ D
  6. };
    ( E' o; b/ g% P3 k1 [
  7. ws.onmessage = function(e) {& N' A4 J) {8 `$ n
  8.    console.log(e);- D/ D/ X4 K  y- R! M
  9. . C  v4 J  K2 D! U1 J2 n; Y- w9 {8 u. X8 o
  10.    var data = e.data;
    ( V: e$ \6 y, }" N6 J
  11.    document.getElementById('player').src=data;! F( ]4 b  D1 J& u6 C
  12. };
    7 E* |7 t5 |$ ]$ g4 ~% A9 Y
  13. ws.onerror = function() {5 ]9 Y+ ^0 g- `5 x. M3 A4 c9 f5 }
  14.     console.log("关闭连接");
    " P6 _& T6 R  P" j; I
  15. };+ t: w2 j- u9 b! V
  16. </script>
复制代码
录像页面

. o$ b: A1 H' P: a* v3 \% _
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    1 I/ O0 ]/ t" \+ U
  2.   T# F3 B7 `9 K' F% {8 r4 F. l
  3. # v9 K8 v5 ^  G% f
  4. 3 r% \5 y/ {3 D
  5. <script type="text/javascript" charset="utf-8">
    1 ^/ n! ?- O( x7 T( H7 E( R; Q5 O/ e

  6. 6 W, A1 D4 a9 G* D) ^- D0 W
  7. & ^3 w3 y4 x( m: {6 A' Y
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');3 n1 c( w  G$ o: A
  9.     //socket.send("嗨我登陆了");
    # n, b8 V9 T8 f6 ?

  10. 9 Y) \) h/ k- l! M/ I8 Y
  11.     var back = document.getElementById('output');
    - v) A( F' o) F  q0 a# F
  12.     var backcontext = back.getContext('2d');
    ' t, W8 d) Z3 J9 e( @
  13.     var video = document.getElementsByTagName('video')[0];% a7 f: Z* {& e/ ~7 a5 |
  14.    
    . ?  X3 C4 C2 j8 R
  15.     var success = function(stream){
    . h' v, D0 \' b# K
  16.         video.src = window.URL.createObjectURL(stream);3 t8 T' G+ m0 _- U( s
  17.     }
    0 H) L0 O: S/ `1 \8 P. n

  18. " d& E0 ^9 ?3 v$ ]9 w
  19.     socket.onopen = function(){
    ' l* L  X. X  \, ~' Z- @5 C  ?
  20.         draw();$ C( U/ B* L* Q/ `1 c
  21.     }& E+ o6 g- p6 J

  22. * L- w% L- H) h. C
  23.     var draw = function(){
    9 a8 Z5 C% i6 P* L+ _
  24.         try{/ o9 I# E) e( U- S7 [' e" P. _* F7 a
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    8 m2 G/ R' Z+ ]) P2 Q8 [
  26.         }catch(e){. H" R0 J9 g: j2 Q- x
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    1 b- i! x- j- W/ E. E( k
  28.                 return setTimeout(draw, 100);  Z- S1 {8 J7 M4 z/ @
  29.             } else {" c, `# S' o, n* P- v) k
  30.                 throw e;9 s3 u" P' w2 L9 l) A
  31.             }1 f9 m0 |* k! t- y
  32.         }
    # K3 k) V7 N: c7 C+ {
  33.         if(video.src){
    0 p+ X5 ]4 K: u# j8 v
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    3 J" ?! }: T5 W! i
  35.         }
    " H8 l. r, e/ }0 @0 M
  36.         setTimeout(draw, 100);0 E0 u* s9 G+ h1 A- f5 e
  37.     }
    & @* n# T" B8 @$ w
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||) Z+ l1 D  _4 ?& T! t; L
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;  B# l$ q7 R/ }- D) W2 G" c
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);- l( L5 c' j& R; t% U" O# c3 H
  41. </script>
复制代码
  1. php
    0 y2 E3 n4 {2 G- |

  2. ) {4 A* G; |6 R8 R
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);) k1 c9 o" E9 \, [' M

  4. 5 C' O3 s) j' O6 w' B( S& j; k
  5. $server->on('open', function (swoole_websocket_server $server, $request) {( v4 _. k9 Z# |% I

  6. : V1 G5 Y' B; A
  7.     echo "新用户id:{$request->fd}加入了\n";
    # A$ e7 J* Q% M* w5 L% [, P8 J
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    ) R8 x2 `0 w1 P" g
  9. });
    % _' g; r  l3 \/ `: ~& ^

  10. # m, ?" k. P' E
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {& q+ _% D" C3 W& X" |6 ~1 y

  12. 3 r" }, n/ F1 n# d+ k# _
  13.     //循环所有数据8 {+ |' S7 E- G' J2 \$ @4 c# T$ d
  14.     foreach($server->connections as $fd) {2 d" U. b$ p' Y: C! ^
  15.         //返回数据
    4 Z: V# S$ k5 U4 c
  16.         $server->push($fd, $frame->data);' g/ m' {* j  K5 I' K. L
  17.     }3 A$ _# ]# p  J9 g4 o& |

  18. % ], B) y5 v( t6 t
  19. });
    2 \: b4 `3 D% `/ F9 ?

  20. / _* M6 ]8 t) D$ U) x: P' F
  21. $server->on('close', function ($ser, $fd) {
    0 v7 u1 k5 L! \/ _. _% f
  22.     echo "用户id: {$fd} 退出\n";
    $ ^) [! ^3 u0 ~7 R3 x. {. X( O! k
  23. });, b" n; \8 ]9 L( R3 V

  24. 6 Q  d+ R- J- b  W3 d. i3 ?0 s
  25. $server->start();
复制代码
0 g' f- h1 [. G( b, |8 h! w

9 ?1 k( K, R$ c! R2 r- C/ w. [7 u0 [) e" U; ~4 g) h) l
3 U' Y. g9 |9 T+ n- w

; t2 n  W5 M: v" q: X8 D$ B
. T$ g0 @4 g" }5 V5 ?* H" m( O# m8 K* {
" A- q4 }0 H8 S- H( S9 R9 d
8 {5 x% G- V' ?9 ?3 F; g4 g

* S$ B" Q% C6 F5 m0 m; L+ l8 ^& L6 v- N
- u- k  O. o% k) r" }' B5 h7 `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 16:46 , Processed in 0.067085 second(s), 20 queries .

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