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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
: ~) J+ x% D, ]6 l7 a- p上代码
前端
观看页面
  1. <script type="text/javascript">& \. |7 S; I. Z
  2. var ws = new WebSocket('ws://192.168.0.150:9502');) g- p. [, g9 R. I5 A6 L" n
  3. & w- }/ U& b* F& @
  4. ws.onopen = function() {
    0 L* h6 Q/ ^" U: M4 }5 b
  5.     console.log("连接成功");4 s# C. Z3 [( |, p7 O% n
  6. };9 L$ h' i% G  g+ _3 |
  7. ws.onmessage = function(e) {
    ' H4 q+ x# O6 A7 w7 T- j/ |
  8.    console.log(e);2 J* G$ t1 s" H! z2 L
  9. 9 W, R, ]) P5 ?& R0 v
  10.    var data = e.data;
    * Y* Z. s. M, p8 g
  11.    document.getElementById('player').src=data;6 N5 }" b2 h" N# \; D
  12. };$ H% ^* w0 H1 G7 D- Z; _
  13. ws.onerror = function() {% M; z$ b, h% p! T! ^
  14.     console.log("关闭连接");2 N" J) h' X% p/ w6 ]& w+ S
  15. };
    2 T7 |  C3 v3 W, _5 v, {
  16. </script>
复制代码
录像页面
3 ^; I( Z4 h- m, F8 c$ c
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>) u; S* }" Q7 W; L1 z

  2. ! g: _' ?4 D& t, i

  3. & I+ N4 U5 o4 c* ?+ n
  4. & P) l0 N1 Z) K) N. w  y
  5. <script type="text/javascript" charset="utf-8">
      L/ n+ z! J0 [3 j4 T

  6. : {& d: a- R  w5 l# R. |
  7. 5 [4 @' G5 L1 H  A
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');* C6 H+ |( V, \! @' s
  9.     //socket.send("嗨我登陆了");" G0 s$ K( k4 Z$ F% e$ |9 Y% _$ ?& d

  10. $ N$ b( u6 M' d: K# w
  11.     var back = document.getElementById('output');
    : U  Y. ~5 i: \5 G7 L/ R# y2 _
  12.     var backcontext = back.getContext('2d');2 ]' ?4 i+ u3 a& A( U+ |
  13.     var video = document.getElementsByTagName('video')[0];: x! A) q+ _' x  j
  14.    
    : Y; n5 R# h+ g0 V& ]
  15.     var success = function(stream){8 F  E6 F/ g$ ~/ W% R$ d
  16.         video.src = window.URL.createObjectURL(stream);
    9 a& l+ N* m$ _0 b: |' M
  17.     }! X6 n# {0 z0 ^0 k3 c+ n$ J% U/ y
  18. * f: K5 p! @- y. Y' T
  19.     socket.onopen = function(){
    1 r% d3 R# N9 m5 N
  20.         draw();, _' M- M% C  B9 `9 L8 L
  21.     }/ b# S1 C# [" _( g. W
  22. , \  ^# M( [+ i* l( s
  23.     var draw = function(){
    2 L$ ~1 O+ l& l4 W! M; P
  24.         try{
    . I1 }+ b3 Z8 Q; O  T1 H* \
  25.             backcontext.drawImage(video,0,0, back.width, back.height);2 x" ?" M7 r3 I4 ]: [6 m( C
  26.         }catch(e){
    ' F& J8 V- u! U6 I3 K5 m
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    $ K  C( Z" Y# W8 W# Y$ ]
  28.                 return setTimeout(draw, 100);, ]+ g, f, h4 V6 _
  29.             } else {1 K+ O8 R  Y5 _4 h! W
  30.                 throw e;2 q' u& `" |5 b" m8 E
  31.             }( B9 e% z+ {5 Y+ ^
  32.         }
    2 U6 |: n/ f' m" P1 Q4 |* q3 J
  33.         if(video.src){
    7 D7 ^+ x/ `$ q/ V' D9 P* [: r. {/ E
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));' ]0 }; h, h* A; f# s* X" l9 h7 b' s- H
  35.         }# V5 D0 Y' D+ d
  36.         setTimeout(draw, 100);. C9 F* h' c2 o  C6 q
  37.     }
    ( t; V  h0 P# `! t2 N/ Z! C' J
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||9 c9 g% k, [" V9 w5 r
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;3 O/ O, d, h% |5 z( }2 U/ e; O6 B
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    , }, ]9 I) m+ s. L+ Q: C
  41. </script>
复制代码
  1. php4 s8 a  e3 W# A( \7 ?: j! x+ \/ Q
  2. $ y& n7 `/ m% e9 Q4 j
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);2 E8 e  b0 l& T9 h

  4. 4 [, o; U6 a, G4 J
  5. $server->on('open', function (swoole_websocket_server $server, $request) {' g  J# t. }4 u; M+ ?  O; [

  6. 5 _2 m, _+ j1 O# H. N, h
  7.     echo "新用户id:{$request->fd}加入了\n";9 y+ H9 [* _5 H) L" @
  8.    // echo "server: handshake success with fd{$request->fd}\n";$ n- `; P) E/ X# s; n( @
  9. });
    " G  o3 `1 B; \& \1 u4 i
  10. , B8 z* x+ z  ]; t
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    9 x* o6 ~) R2 W; d5 c- B

  12. ! L' i& ?8 j3 A, C: R0 I. W6 _
  13.     //循环所有数据8 B' m  l/ r2 k* n
  14.     foreach($server->connections as $fd) {
      C, a- f- y- R, o- Q
  15.         //返回数据9 T  ^. G: i7 v' ^
  16.         $server->push($fd, $frame->data);
    ( l( m- h! `& z, g3 F) \
  17.     }
    . {, B0 p+ L2 s5 i( \, n" X/ F

  18. $ R- N- W' f, P3 N* `) K
  19. });3 k# ?% n7 J# Q; @8 ]
  20. ) l* p- _3 d3 ]& w( G, x
  21. $server->on('close', function ($ser, $fd) {, j- G% I2 h0 C# S( X
  22.     echo "用户id: {$fd} 退出\n";
    3 r" N7 G4 ]! t: V( {
  23. });
    + X# m6 K! U5 q, ?8 {- @

  24. 0 `) A. k- H2 _: s% N
  25. $server->start();
复制代码
2 c& [% W* p0 a- }& a( ^/ H( ]

* V1 i; W; ?+ F: u5 a. _8 M( q( r, ^7 v
& c: b. E" W, K( N

9 B  q" D6 Q, j  d0 C( ~  ^) p
6 i" Z5 ?3 \8 u1 C1 ^+ |; D
' L' `0 Z% s; s6 |* j9 F. Q1 G
; x2 E& K# ^' y. z/ }) e1 ]4 Q" V2 q1 i  D1 t6 K# R" f
. }, }6 x1 Y2 f) ]$ ^

3 _: _. v* d7 K% }; @  h" b, ^/ j0 d/ _
  T$ m- Z2 ]$ c2 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-5 01:12 , Processed in 0.050161 second(s), 20 queries .

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