cncml手绘网
标题: swoole 直播 [打印本页]
作者: admin 时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket5 J* x# u+ b) ]2 a/ c
上代码
前端
观看页面
- <script type="text/javascript">
( Y1 M" L: h9 h3 O2 k8 c - var ws = new WebSocket('ws://192.168.0.150:9502');
) p N, V: k9 O5 ?7 E4 v$ g$ Z1 k s8 k4 }
6 J8 [& n" `* S% D- ws.onopen = function() {6 d9 P7 X) Z5 L+ D
- console.log("连接成功");
`7 P$ K0 M3 w+ R - };
7 M* t; W# c4 Q! D' J& I1 q - ws.onmessage = function(e) {6 v- S; Z1 \; S7 p G* r/ d
- console.log(e);
5 \2 H2 w& G5 q: s - ! m& L% ?. P) z7 Q) O
- var data = e.data;
# O& d9 k$ ^" f1 D) i+ A) u - document.getElementById('player').src=data;
( `9 y8 u$ M, P - };/ }( U- J4 @8 i9 J6 S6 v
- ws.onerror = function() {
! E" m( _- o9 f% X. A - console.log("关闭连接");
5 R1 J+ T+ S9 Z; K7 D4 N - };2 C6 C; D8 K9 p: z
- </script>
复制代码录像页面
/ e2 R' A" P) y. o( A/ c
最好用火狐测试。
- <canvas id="output" style="display:none"></canvas>
( ]; J+ }1 ?* X) m' P7 T - , X9 O" G: w: t1 ]! p$ N/ a+ f9 C
/ x2 ?- U+ J9 E
; _/ p; q/ b/ I+ U& D% r4 |- <script type="text/javascript" charset="utf-8">& [# q7 j1 `9 D1 ^7 I8 }
8 {" A! A3 l9 A5 \5 R4 W* F! ~5 G-
: J' W! W6 v: ]" k - var socket = new WebSocket('ws://192.168.0.150:9502');" B( M( Y6 A5 U: W
- //socket.send("嗨我登陆了");
$ X9 b0 S; a* U! _4 A0 ~3 w
! S% Z! Q7 S' G% f m- var back = document.getElementById('output');9 N- o2 P1 K& n% t8 c
- var backcontext = back.getContext('2d');
' m4 ?% i+ f) B2 o5 K8 D& J - var video = document.getElementsByTagName('video')[0];& y2 h7 \; {, ~* I# A
- 0 w% |( y! V7 ~" J
- var success = function(stream){
5 i0 }8 X3 c& ^! u$ C& T - video.src = window.URL.createObjectURL(stream);1 w b1 G: u' k, K
- }
: n9 f C9 k6 T- j& W - + E$ O5 m$ [8 C0 t. a s
- socket.onopen = function(){0 D# g/ `# c) ^$ v( g7 {
- draw();
* j Z8 o& S* ^% J" o2 y; L - }
/ e% s% U/ J" b. F
2 {8 P' w6 d: i# `! x- var draw = function(){6 i& q6 F+ p* f" r% ]& c
- try{- t" |$ z9 z" Q C' z6 Z; ]
- backcontext.drawImage(video,0,0, back.width, back.height);
6 Q% `: V& j+ u; Q - }catch(e){+ x: {1 N* A' _2 m- z. [7 n
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {
; a+ H; f5 N: i* d( G! y) m: x2 a2 I - return setTimeout(draw, 100);- _$ u! T0 }2 h7 a2 Q
- } else {* `% P+ |( V0 H: b+ t7 ~0 \* Q
- throw e;
0 Q' n9 e+ C8 V+ B1 Z4 f1 P - }; n6 j( ?% b& k3 {
- }
' I- A$ H3 [1 n# @' B' H9 z4 O0 W2 i - if(video.src){
3 x6 x1 x; m- f; d" i: v% j - socket.send(back.toDataURL("image/jpeg", 0.5));9 z$ h4 y! t+ z$ ^' t1 k
- }
5 k! F7 U3 [% ]9 k( l% ~ - setTimeout(draw, 100);" o" M( [0 K" w* c: R
- }
; I- w9 z9 M" r0 u# K/ e+ V9 | - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
4 y5 \) N- k3 H( W' ~+ V - navigator.mozGetUserMedia || navigator.msGetUserMedia;1 u+ v: } T! W0 K, Y) }# V3 W
- navigator.getUserMedia({video:true, audio:false}, success, console.log);
w3 H! K( x- c2 _0 P# J1 r - </script>
复制代码- php
, B5 F, X% f2 w' f; W
% `. m* b6 z! E. K3 v- $server = new swoole_websocket_server("0.0.0.0", 9502);
9 h! A( w, s% o; p
- P" t ~9 u- L" Z8 t7 Y- $server->on('open', function (swoole_websocket_server $server, $request) {
' R, [. z; q/ Q( @( M& T
5 a* O( y8 V3 n% d' @- echo "新用户id:{$request->fd}加入了\n";2 d+ M3 K( D; i! W+ t: }
- // echo "server: handshake success with fd{$request->fd}\n";# g! a/ O% F" N. f1 N
- });
8 K( f' B; T) @. A, u$ V4 q5 G$ ^ - * P5 Y4 C/ K, V v6 v% Y
- $server->on('message', function (swoole_websocket_server $server, $frame) {
% T0 V8 B0 P- H! ~
) b. L5 M6 i0 c& ~2 ]- //循环所有数据6 I9 U3 m& \. j3 x$ G
- foreach($server->connections as $fd) {5 _/ K. n2 {. T* @- r
- //返回数据2 `2 z7 s5 ]# V5 W% ]7 R- @9 S
- $server->push($fd, $frame->data);
7 T" ~) [3 | g0 F2 V! D0 L) G - }9 l) s5 W' |7 @- p. b' m
- 6 Y1 _5 f- u& P2 H$ }( S; b5 @
- });
4 p1 T' U) F' ^; `! Y- d. a y$ ?1 A
+ P, `' G1 o& P" C9 E2 W- $server->on('close', function ($ser, $fd) {/ Z/ A7 G+ z) S; @# H5 I
- echo "用户id: {$fd} 退出\n";* R. o# `5 q/ L; o
- });4 N1 W6 G9 U8 O0 U! W
7 a0 i2 C( i* `. i- $server->start();
复制代码
8 D# f: T+ ^4 y6 r
7 r0 _: Z: j+ {
! C- e, G& T* b4 I& F) K9 g1 ~- t9 |+ G+ Z+ Q
: H- F# @4 o4 C+ i f
2 g5 g5 p2 l6 d2 I5 N4 _ U. i+ S) G: Q, Z' y S
( D/ y8 U% _+ P+ t7 M3 L
( R8 Z4 u6 o7 J% {7 \ y% X& F3 o1 {& k r
5 }9 ` E7 d% ?4 o0 J# b( T) l
8 R8 j* p! N! L. J0 D) @9 B( {
| 欢迎光临 cncml手绘网 (http://www.cncml.com/) |
Powered by Discuz! X3.2 |