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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
1 T. P: [2 t' [" h* f6 Z/ g9 s上代码
前端
观看页面
  1. <script type="text/javascript">; E6 ?! o' S& p1 A
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    3 h5 v" c4 }4 L. ?4 J3 Y( S: p8 K
  3. ! t6 g, f- p' y, w* W
  4. ws.onopen = function() {7 O5 ~' ^6 Z# Y' ~5 y
  5.     console.log("连接成功");9 ~5 W: p1 r8 c
  6. };# K6 s' p6 }/ e
  7. ws.onmessage = function(e) {
    : d+ a  j4 T' X  \
  8.    console.log(e);1 @" M1 E  t+ O
  9. ) R+ w6 U" g, w+ Y$ p8 m0 G
  10.    var data = e.data;& K; N, D5 O# l0 _  d
  11.    document.getElementById('player').src=data;
    ( [( T! }( b0 E4 c; c
  12. };* r  {; L) A0 Y4 H7 R. M
  13. ws.onerror = function() {* @- V. j3 k  @- k
  14.     console.log("关闭连接");
    % H' V' `' u! D, I
  15. };. u2 \3 g! P/ o0 h3 D
  16. </script>
复制代码
录像页面

# B$ B- M, \$ G# E* r5 X
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    0 A3 x1 C+ O7 N
  2. ( }$ t8 U+ h2 |! q) ~7 s. H5 ^

  3. : O: d5 b3 g* [+ n' H

  4. 6 T2 T9 f0 T  _8 l9 ?% @8 S
  5. <script type="text/javascript" charset="utf-8">- Q/ C# M- F% e7 K: u
  6. 5 b$ o' [5 [5 f. B5 k
  7. 8 x1 q5 H3 f$ A7 ]& g
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    : \% Y; k7 `7 j" [+ R
  9.     //socket.send("嗨我登陆了");) ]' V; z" H& X5 f# u; @( J; W! [

  10. + ?! t: }8 Z* @3 _1 m
  11.     var back = document.getElementById('output');
    . e" C; m( L! Z! w! s( |% x
  12.     var backcontext = back.getContext('2d');
    : k0 ~( w! y- h6 Z: t7 T& |
  13.     var video = document.getElementsByTagName('video')[0];
    " `; L) L& Z* E
  14.     8 @' o: b3 u/ w1 z
  15.     var success = function(stream){
    9 z% P6 q& y0 x7 [- ?
  16.         video.src = window.URL.createObjectURL(stream);4 V, w7 |/ X1 a, A4 \
  17.     }
    % [( K; Y+ J+ m$ v; s' w/ D) t
  18. ) i3 b( K1 s) U( M
  19.     socket.onopen = function(){. @: |7 ~, U0 l
  20.         draw();
    ! I" F# l9 V! f$ Y" y3 A1 D
  21.     }
    2 ^/ r& m# i7 O/ D
  22. * q5 x% w. L* d) U6 n1 ~" a  q
  23.     var draw = function(){; T3 P; B4 U2 u- t
  24.         try{
    7 M: _# O6 e$ G/ f1 B( H
  25.             backcontext.drawImage(video,0,0, back.width, back.height);0 O( q$ f8 \, I# r) A9 M6 V
  26.         }catch(e){2 N, O+ l% q  c5 I( p8 c+ L( T
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    - o. D$ g. C4 G1 A
  28.                 return setTimeout(draw, 100);! {% Q4 B! q8 O4 O  g
  29.             } else {7 y9 s( D$ K; h8 ^
  30.                 throw e;
    ; i) W" J) m; Q: b' r
  31.             }) V2 T4 }0 V. W  I# J2 n
  32.         }. N. F2 {. r. m2 [
  33.         if(video.src){
    1 g9 v! p9 ], R" k3 |
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    # p- a5 H2 E0 F3 O4 X& q
  35.         }
    % u6 s5 \6 r  Y) Q! s
  36.         setTimeout(draw, 100);% H9 j6 O$ y- V. @2 N' O5 Q
  37.     }( x9 {$ V4 U5 C. o
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    8 E9 h3 @+ j4 h2 f4 }8 l
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;: A. l# J  `0 |  s
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);, x& X$ [% e; \
  41. </script>
复制代码
  1. php" x+ s6 x7 A/ q9 D
  2. 5 w* T; o3 g( i; ]8 [/ A
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);" d3 K9 d! R( L4 b) z1 @# F
  4. - r5 B/ z- K! X  F
  5. $server->on('open', function (swoole_websocket_server $server, $request) {3 {. q# S% U& |2 \/ U
  6. 0 ~+ z" i" R9 B% X4 r
  7.     echo "新用户id:{$request->fd}加入了\n";  h# l) L1 R: T2 J. W& y/ b9 n
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    : E, ^; p5 h9 f% C2 ?
  9. });/ j0 a# }* J( x; A, L
  10. # U# V, ]6 A: ^; E: R/ O7 X
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    , ?& G' m- v6 f5 x" C8 [
  12. ) e% M# @* R' s& Z. ]' m# g
  13.     //循环所有数据
    . Q9 m7 M, O/ m
  14.     foreach($server->connections as $fd) {4 e' |, C3 f7 U, s5 u
  15.         //返回数据& e2 V# v; a$ K2 @0 Q7 O( u
  16.         $server->push($fd, $frame->data);
    2 K3 T* h, U; x; H; O' S
  17.     }3 @2 R' V) u' g3 g+ E

  18. 1 @" s+ ]: J. P* s7 a' I
  19. });- G/ }2 N6 ]" r$ `9 N3 P
  20. " n- p: R! J( C! L
  21. $server->on('close', function ($ser, $fd) {& G' O2 p7 E6 {
  22.     echo "用户id: {$fd} 退出\n";
    0 y! c+ s( P# j: e  T
  23. });
    8 C3 ^1 O$ r* A4 e& r
  24. # d, H, I" Z# t; |5 {
  25. $server->start();
复制代码
+ P& ~1 t9 o+ {& K7 J, Q

" M0 N5 o2 _7 V' I+ V, K! m
1 s: a+ C, S$ x. g7 j3 C
( q) ~& B( ?& j2 }1 @' U$ {7 G
$ @8 J, e0 x7 K, J
5 i) E! }; R$ J1 \( z" o
$ d, j5 x  g+ n4 n* p
& i4 J% g$ D; T/ @# N+ {, s5 w# d3 N$ a/ e# T

' \1 |" l6 l9 k2 B" p5 E
. f! c% O8 V3 ]" X0 _
- P+ Z* p3 e6 E+ Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 00:33 , Processed in 0.137102 second(s), 19 queries .

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