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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket9 c! |2 \; F: m# r
上代码
前端
观看页面
  1. <script type="text/javascript">
    9 b" o" `) p7 _$ Q
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    9 _, |$ z# Q. b0 E

  3. & d6 J$ w7 J4 \0 d& Y1 Q+ \
  4. ws.onopen = function() {
    2 g% [9 x& R& m9 ^: F7 s
  5.     console.log("连接成功");* ^3 k% @8 _1 O
  6. };) Z$ u+ x3 r! f* c/ V
  7. ws.onmessage = function(e) {
    2 j" d0 ^3 v6 [" Y- ~" ]5 P5 i3 Q0 {
  8.    console.log(e);$ r0 ?4 [) V  p! J
  9. ! b  J+ @# }# R6 h. y5 g2 _
  10.    var data = e.data;; h8 P. G9 _+ v5 `* r
  11.    document.getElementById('player').src=data;+ ^. K  p% h2 x7 A
  12. };
    ' f! G0 T# w% e/ O4 Z7 V! j
  13. ws.onerror = function() {8 C% o2 {! ]+ |" a- m
  14.     console.log("关闭连接");. L( c& T/ K+ |  Y2 A" z8 h
  15. };
    # I3 C+ u. F$ `. e
  16. </script>
复制代码
录像页面
. M3 `( C2 ^" B" a  v
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    - K0 |% n1 C; E- l. Q$ y

  2. 2 s+ J+ h( x0 ^2 M0 `2 U# Y

  3. * |. e* V8 g# U6 s, h6 D# J

  4. ' I: k4 o; g# S( J! O/ ^
  5. <script type="text/javascript" charset="utf-8">
    : b# [  C9 p* J6 V( X/ B, z

  6. - ^( Z9 Q3 v5 i" q" H

  7. ) t! d3 g. H, l6 K
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    ; K, {7 Q2 K5 k& @8 C6 F7 o
  9.     //socket.send("嗨我登陆了");5 Y+ c( P1 a! N
  10. ! @1 U2 k8 x8 L4 ~+ k2 _
  11.     var back = document.getElementById('output');
    ) T" m. {, [8 h1 g
  12.     var backcontext = back.getContext('2d');
    1 x) w0 O7 x9 i
  13.     var video = document.getElementsByTagName('video')[0];$ J. b* c; |0 F/ H' S
  14.     8 c0 A6 }0 k5 S2 E
  15.     var success = function(stream){$ z$ z; ^+ L7 g4 Z
  16.         video.src = window.URL.createObjectURL(stream);6 ^4 r5 {) e8 s
  17.     }' I0 d5 e9 w' p

  18. 2 a+ N9 T" G% [0 S) I% p; g' w
  19.     socket.onopen = function(){' R2 M/ d& J, k- a! r
  20.         draw();
    ! T+ v' x- D: s) }+ l7 E
  21.     }
    6 h( W- ^0 `- j0 t
  22. / ?4 x7 Z% Z2 p
  23.     var draw = function(){
    % f( a/ @7 U7 y( \, Z" z
  24.         try{0 p' `5 h6 i& z3 u& w0 n
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    # X' v. u7 V0 h! |* Z0 M
  26.         }catch(e){% h* C& B" d" S0 V; t( d
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    : e* a- u; ?" J# G: ^* }
  28.                 return setTimeout(draw, 100);
    & X1 y  w* C. ^3 n% S0 F
  29.             } else {1 ^/ M6 T: i% z
  30.                 throw e;& r8 R- v& I, f
  31.             }. j$ c% b: W$ X) h  ^1 B
  32.         }! S1 F$ L+ ]  c7 E5 O
  33.         if(video.src){
    8 m& u1 F( r! I+ s) s& [
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    5 ~( g/ U3 C  j) X5 V$ Q
  35.         }$ _0 c! K9 H( I" N0 w( i" S
  36.         setTimeout(draw, 100);
    2 c, e/ F" k. A% ?  e0 g
  37.     }
    0 w# m# Q- y+ ^/ V" p) Q6 y+ f4 ?
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    ( X1 p6 l( g. ~4 j+ [3 K6 ^
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    ; @0 Q1 S1 M5 \9 [
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    # j' e  g7 @& I- e
  41. </script>
复制代码
  1. php
    ( v6 X3 D+ W) ?7 M! q. a
  2. 5 J! H1 H4 J8 Q. c5 e) \. W
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
      p# Y/ E# b" j! I; Z% T
  4. " J1 E* z: p1 c, y! ]% @! j
  5. $server->on('open', function (swoole_websocket_server $server, $request) {6 s* `; D& l. y/ n0 G
  6. 9 \& t/ s8 i% U# a- X; h6 z3 t! I" W
  7.     echo "新用户id:{$request->fd}加入了\n";3 u! d2 W5 P  R* D, o; @+ f# H
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    1 U8 C2 J* T2 z% U8 Y8 u
  9. });
    2 E6 P( f$ z9 K4 X* h4 ~
  10. : c" Z% K( {. N
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    5 t- n2 V; O# |# O

  12. 0 }: d# r  {% q# C% ?
  13.     //循环所有数据
    0 q, V$ A9 Q% ~: k! }1 d/ A) i
  14.     foreach($server->connections as $fd) {
    6 p" E$ w  D0 Z0 g3 u5 D
  15.         //返回数据, z; x$ V- b: B
  16.         $server->push($fd, $frame->data);1 v: O! z6 G: K! M0 }8 ?7 d
  17.     }+ J* a% y- X' a6 u4 `1 ?

  18.   v5 n: W- B1 R8 B# J) n* {2 t2 I
  19. });
    9 x" a* S) [" a4 T) v0 Q
  20. " }  h* g1 @% J' y! U
  21. $server->on('close', function ($ser, $fd) {- G. J" [8 }/ g: W8 j6 E, t+ w% _
  22.     echo "用户id: {$fd} 退出\n";. U3 n$ u& }" j9 z# S- @3 `
  23. });% k% H* `; b! B
  24. / D  e8 J( H: O* G4 P8 a
  25. $server->start();
复制代码

$ M- s7 I* N5 C& q) h9 K3 Z
6 A8 r$ T; r, X5 w/ F
) h0 w! y8 F5 Y
: d  q  T% j+ d$ O/ P; w. v" ]% U. A+ T
9 x+ C. @; p7 Q2 w) ]# z. h0 r. X$ [0 y) T2 s* A
: e) v3 N/ |% c6 A; w' U9 x5 E
' \" \8 I7 P" |

( ^) K- e6 \$ j9 O5 Q  }+ B
, a; w4 X) @4 i) @/ w8 e! @. O+ Y8 E4 c9 v( p
, u: ~! ^( @- F' e1 {8 l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 00:52 , Processed in 0.054908 second(s), 19 queries .

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