cncml手绘网

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

作者: admin    时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket' S( }+ |' K8 O) {( g
上代码
前端
观看页面
  1. <script type="text/javascript">
    ; ~1 v0 D7 J& R" O
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    ( @9 s. }: b6 [# `
  3. , Q  r4 s/ ?8 P
  4. ws.onopen = function() {
    " ?6 A% u* A6 M7 @
  5.     console.log("连接成功");
    6 D) W# T* _8 a) s( S* q
  6. };! j. W1 u2 L$ {' y, {9 e! g
  7. ws.onmessage = function(e) {$ t" u+ }2 D/ d  h* ]- O
  8.    console.log(e);, L1 L/ V$ i- |/ Q! u  y3 T2 q4 T
  9. . z; D6 n0 |0 `% M$ t1 c8 h
  10.    var data = e.data;# k& I! r. W. I, Y, U3 Q  }
  11.    document.getElementById('player').src=data;, }! [# Z! _# o  T
  12. };. Z: _; D% o" W  V% ^( t
  13. ws.onerror = function() {
    , F8 v: p' T, x- @
  14.     console.log("关闭连接");8 u/ l) r3 k( N0 r& o- g
  15. };
    - J, w# A. x$ t: l; Z
  16. </script>
复制代码
录像页面

3 _7 K2 ~5 s# ^% S1 b9 h+ D( c3 N
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    7 E" }$ H" y0 w  |

  2. % L) s6 z; H: i: f) v8 H) r) Q8 Z
  3. / S9 }# r) R8 d$ F9 |& a& u
  4. ; Y( c' L8 D4 Y  H. t" G) }; A
  5. <script type="text/javascript" charset="utf-8">
    0 q% T; O- e$ R- ~3 h
  6. 8 k2 a) h9 U# q( W0 l2 _! O

  7. ) a& e: J+ y+ [2 D/ w& ?
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    , G0 _, _/ p- b2 @$ M. X# ?0 Q
  9.     //socket.send("嗨我登陆了");
    8 m) e- {7 z6 G! e' Z2 _8 v
  10. 0 D3 j0 e9 y& u' C
  11.     var back = document.getElementById('output');
    5 T1 k: b' F; g6 D
  12.     var backcontext = back.getContext('2d');' V! \- ~: e0 S: |! T, L
  13.     var video = document.getElementsByTagName('video')[0];7 h. R7 U% u  j& j5 z9 {$ B5 Q7 C
  14.    
    + C5 i% J+ m4 _: [
  15.     var success = function(stream){8 `) t+ N6 }4 y7 F
  16.         video.src = window.URL.createObjectURL(stream);, E" i, e% r; P6 i4 H( P3 H
  17.     }- E+ _% g# Z8 K( y/ Y$ {5 I/ S" e

  18. 4 y  Z- d6 f. m+ H
  19.     socket.onopen = function(){
    ( _$ e4 W$ \7 u5 G0 ?5 q
  20.         draw();
    , M* r8 S: V9 a" d
  21.     }
    % k" O* S% h" J$ R$ \) }+ P

  22. 7 J* |, k  n1 u) p' P
  23.     var draw = function(){
    0 y/ b' F/ c2 ]5 b3 E
  24.         try{# p, C7 m- O. G; f  L! i
  25.             backcontext.drawImage(video,0,0, back.width, back.height);* A/ i3 F# n: \) W( i
  26.         }catch(e){
    4 W9 ]- Y' P% E, d* c+ c
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    9 ]8 T0 i$ ~* l1 U% i' Y4 K
  28.                 return setTimeout(draw, 100);
    9 M% P' u) g# [/ v" Z
  29.             } else {) P$ m: D) @& ~! v5 e
  30.                 throw e;8 l# P8 ]+ }5 c3 Z& n
  31.             }
    + G; {. P/ F1 [
  32.         }
    6 m4 z+ o5 g; T+ b6 g
  33.         if(video.src){
    7 z: I6 q3 L5 b# K  e2 Q
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    4 Y* m2 T6 e7 y- g0 C$ A  s
  35.         }
    ( Y  J+ I, y8 Z7 n
  36.         setTimeout(draw, 100);
    # \7 v: v+ q  t. x5 c# ^
  37.     }* n7 d1 {4 R2 W7 g2 e& E; Q
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||; ?3 i+ z8 J" j5 s# |9 k6 t
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;/ F, w/ D! E9 t
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    " b0 E& Q1 ~# W  `1 ?# s) h' m
  41. </script>
复制代码
  1. php
    , U$ U  M9 _" _) x# `2 v: Y) P

  2. " q. L9 Y; B) I' l9 u, w
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);/ p0 `9 e1 {. V- n" G; F; c

  4. ; e, f4 u9 Y' H
  5. $server->on('open', function (swoole_websocket_server $server, $request) {4 v8 Y; f/ }9 r0 r3 |9 t

  6.   ]( z# X3 E' c$ ^, m( _
  7.     echo "新用户id:{$request->fd}加入了\n";
    7 W) p) H! H7 {
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    . ^5 Z) d2 I7 M4 s2 P, `! X
  9. });- T+ E) R; r$ ]* Z, i% I& B: {
  10. 7 r( ~( j% K% m3 t' Y0 c! {' r; V/ O
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {5 }( X$ l0 E. _, {% a5 m
  12. 0 V' \7 w5 ]" U/ B
  13.     //循环所有数据" _: V- }  N# ^& I6 B& |
  14.     foreach($server->connections as $fd) {8 f9 g! p4 I" H
  15.         //返回数据
    ! o: x" o! o$ Z: K
  16.         $server->push($fd, $frame->data);6 Z+ r- Z: P. M$ p; X
  17.     }- q4 j  r9 s* Y" |
  18. $ z9 J; Z) A) Z2 X9 j6 i' }1 Z
  19. });$ S( D4 W) k" J7 H" B
  20. 7 K- z! @: F; S; _
  21. $server->on('close', function ($ser, $fd) {/ a; s! q0 C' `7 D
  22.     echo "用户id: {$fd} 退出\n";
    ! O4 r/ s' k8 M
  23. });
    , z4 r; S* |  }5 s4 {: O

  24. . O. f8 Z, A0 ]
  25. $server->start();
复制代码
$ E: G% M4 ^' ^; N) I

3 e) a7 h4 [: W9 h0 L2 I0 r* l2 |
- Z. ^* N3 b" ]) Q& ?6 a. e

! o" d2 ?$ ?9 n9 P; o
, |' F5 s+ C$ H$ j5 d9 c: m# n' [: D9 n, v% G9 O

' G5 w8 I) ^# I2 U8 j* J/ U7 W$ s$ Y$ @" U

' S- H8 f" E. ?* b- [- q$ s0 |$ u  _
8 g9 o9 h& f& U* h& N& @# F' A  W5 R3 E9 t$ t( v





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