cncml手绘网

标题: swoole 直播 [打印本页]

作者: admin    时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket5 p0 F2 U. \8 e2 z
上代码
前端
观看页面
  1. <script type="text/javascript">/ t1 n2 i0 |& R/ j
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    # n* {6 {% a  [# @& R5 l. f8 a* V" }
  3. 6 q! R8 c2 p# w* J$ E" b
  4. ws.onopen = function() {: H6 F; F; F( b" o3 ^6 C# G# X
  5.     console.log("连接成功");
    * G. r) ]7 E! S) d
  6. };. }0 I, f1 {& i  u
  7. ws.onmessage = function(e) {
    * o+ |/ t8 q7 t
  8.    console.log(e);  y7 }4 G% c4 }1 s" i* }

  9. 9 E2 ~% x3 a$ w7 b( b
  10.    var data = e.data;
    ( H& a. ^# O/ [- K! B" U9 |! V+ z9 ]% ]
  11.    document.getElementById('player').src=data;7 M, a+ r- A% g: J, f& W
  12. };
    - w- c' @, x* O# m5 y" _
  13. ws.onerror = function() {
    ) Y( g+ L7 \$ _
  14.     console.log("关闭连接");' w" e, {& T" W" d
  15. };6 h! Y4 V0 v& I  C: R0 i, Z1 \, F; v3 D
  16. </script>
复制代码
录像页面
, Y7 |: M. @3 ]3 l: E: q
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>5 w/ Q; E+ b2 F6 S+ I

  2. / F6 m+ I) ^1 l* u/ @

  3. ( `; ]' c5 ?) u7 j& l

  4. 2 s6 Z' {0 v6 ]! m
  5. <script type="text/javascript" charset="utf-8">
    3 L( |+ B: f, p0 O* v4 f

  6. * Y/ c  {4 x/ K" d6 @5 y5 u3 ]
  7. 3 @: j* C* ]$ b: }8 }, b2 k6 R
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    1 a& a; z4 {6 T$ Y
  9.     //socket.send("嗨我登陆了");
    8 c/ X) S1 L( s* U  E
  10. ( d: |. o8 `: a, j' E; y3 Y
  11.     var back = document.getElementById('output');5 g3 H$ s8 h7 ?) o9 r8 t4 R% Y
  12.     var backcontext = back.getContext('2d');0 a% V1 f5 A% Y% g/ e) B
  13.     var video = document.getElementsByTagName('video')[0];/ j* S2 w: z9 U) @2 X* L
  14.     " Z' ?' E+ r6 b" @: ^
  15.     var success = function(stream){2 I- h; x( n# a( I- W3 A
  16.         video.src = window.URL.createObjectURL(stream);- Y1 R) n- Q: R: d
  17.     }
    1 j( R! e4 F) B: ^$ L# U3 O/ E

  18. 4 q3 \+ w# S: n& n+ y( R( o
  19.     socket.onopen = function(){
    3 k% N# V7 i; w  H8 P
  20.         draw();
    / J  [2 K1 ^: O' j# g+ g  p" Z
  21.     }
    , C) ]) I( Y$ |4 T( }5 @7 H
  22. 5 \9 W3 ], E2 P- W7 |! ~0 T
  23.     var draw = function(){
      J7 j' J* }4 \* b
  24.         try{
    0 q! i, V$ u& s4 X- @, d7 R# f
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    : I$ f/ i/ |% A" J
  26.         }catch(e){* }. \/ {7 w" O7 `
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {; `1 @8 _& {: r" ^% @+ F
  28.                 return setTimeout(draw, 100);
    ; T2 w4 _( ~( n- P0 Q
  29.             } else {2 @2 j- V" v: I$ E7 C" x/ o
  30.                 throw e;
    " @1 r( w$ q8 e2 X: C+ D
  31.             }# @( Z) Y  m& z, O) K% u! h
  32.         }
    + D5 C! Y7 j  U- u2 x' `
  33.         if(video.src){
    ' [* q8 d$ X- Z8 i' V: m  M& y
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ! y+ i: k$ {, q9 y; V' }0 ]
  35.         }1 J6 x" k4 N; I
  36.         setTimeout(draw, 100);
    8 F, C& V- P. m1 Z$ y: t5 P7 B4 K
  37.     }
    3 M# H/ H4 a# A" U8 |: R. K& K7 e
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||( G& }3 S  M7 E4 g. z! p7 Q0 @
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;/ D) K2 O4 A! o" b2 Q
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    4 G7 u9 L) h- z6 s/ X* C  l
  41. </script>
复制代码
  1. php
    ! a2 Z9 p& x: ~5 q) _# M& s+ I

  2. 9 U( ]' N) ]0 f4 T  I1 N
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);& q. W: B) p! h# V

  4. , i8 {0 l5 Y  p' r& g0 Q' E
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ) j" _9 B" n  T, u* u# X
  6.   ?. z$ [. ^# O
  7.     echo "新用户id:{$request->fd}加入了\n";
    3 |& k/ E/ e$ D6 F- p6 i  w, G
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    ( }9 W$ s  G' m! @# g
  9. });
    8 V! I% `: @, L+ E, k
  10. $ L: K2 Q4 o+ Z8 k# M$ u/ x/ \
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {9 V6 k" a/ h; H! L/ k& ?

  12. / y  B* @+ D  J/ K; G. \7 ~- e
  13.     //循环所有数据6 o! V* D3 x1 u! C; `7 J1 @
  14.     foreach($server->connections as $fd) {
    ( c1 U: ^( R! F% F4 A
  15.         //返回数据: D* Z& u( `8 g( V( n9 A) E
  16.         $server->push($fd, $frame->data);. M% l% v, [8 h. H6 X: z
  17.     }
    ( Q4 T7 V$ A4 _) x6 b6 M

  18.   z+ N! g5 {9 q, P; |
  19. });* a, C! @7 L# F
  20. ( {! K4 ^, H7 ^$ O
  21. $server->on('close', function ($ser, $fd) {/ P# E, B, h: M7 O, `) f' A
  22.     echo "用户id: {$fd} 退出\n";
    2 k3 c- v+ N# N- e1 I
  23. });
    - O7 S( G6 c* o$ E4 w

  24. : I6 \: M, u* }  w. ^
  25. $server->start();
复制代码
, O2 V. B7 b) K) U; v6 _
; Z' {9 o+ }: l
& c' l* @! j( ^
" k" U5 D! k4 R+ Q& B
1 c& A$ {3 c9 S6 G7 |
! b. e/ T9 ?/ H( h
2 W+ |( Y7 l: S' O
5 z9 V* ~  q3 D, s0 G3 F
& b7 s; J# }- C4 d& [
8 l- H- v$ T! x1 h4 x& u
! J9 J$ c. b) E! D* H: B4 F

0 \3 z& d( A" q5 E9 ]1 Q* c$ v




欢迎光临 cncml手绘网 (http://www.cncml.com/) Powered by Discuz! X3.2