cncml手绘网
标题: swoole 直播 [打印本页]
作者: admin 时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket
3 g _9 [8 h# k( O( i" o, l上代码
前端
观看页面
- <script type="text/javascript">: M+ R) z- T& l/ B
- var ws = new WebSocket('ws://192.168.0.150:9502');+ Z0 y' Z M4 P
- # i( l9 l% K/ ]8 t4 t
- ws.onopen = function() {' X; I/ n% S1 w+ H; j
- console.log("连接成功");
) W! I8 U# @9 @1 L - };
: t! K, Q l# j8 y - ws.onmessage = function(e) {
& F2 j; |! i$ u. F* v - console.log(e);( X. L! L' c7 y8 E$ X
- ! e( T+ D8 [7 e* J9 E# f) k
- var data = e.data;
9 p7 A4 J8 H# A - document.getElementById('player').src=data; a1 _( C: y3 m: A) z, ~) N
- };
- G0 H- ]: ^3 x/ w z" d - ws.onerror = function() {
# ]0 t& r8 L' ~3 ?, D# R) ` - console.log("关闭连接");
" ^, @& `* N6 B. a3 G - };
0 X1 F# ? D3 x: ^( L9 u4 ~1 u9 V - </script>
复制代码录像页面
6 {8 ^: q, r) ~& ]
最好用火狐测试。
- <canvas id="output" style="display:none"></canvas>8 `+ B1 ~! b; Q* f
- d( M" R( H- ~, x5 }$ t+ E
- - G( ]3 C6 R7 D
- 5 M! f7 G. A; U
- <script type="text/javascript" charset="utf-8">0 ]( q6 \! E& Q+ x3 e# J8 _6 V
- . @+ n' }) n x+ ^4 ^( I; M
- ( W" F* D! m* E6 L& Q
- var socket = new WebSocket('ws://192.168.0.150:9502');
' n' w/ |& V& I% t9 u - //socket.send("嗨我登陆了");
* a: q. y0 @: g% O$ p& o* a; Y
5 _& o: r% A+ @8 ?- var back = document.getElementById('output');
: p- n/ o, u0 j% k. m5 L3 O - var backcontext = back.getContext('2d');
. {% ^* V- V# B+ n$ l - var video = document.getElementsByTagName('video')[0];
, {% u5 f. l8 o4 ? - - u0 Y" o3 h9 q! f
- var success = function(stream){; l) g7 T+ r$ v9 H
- video.src = window.URL.createObjectURL(stream);
! w/ Z' F* M* J9 [# v$ J - }
# r, R+ o, ^# \4 `: t6 f. q - + T7 ~8 ]# O9 G* K3 L
- socket.onopen = function(){
, ]# S7 f1 j1 j( h/ `+ _) b- V - draw();
) D; c F# b2 i - }: T( P5 N/ Q- j2 S1 l1 s
7 B1 W+ |7 ~. R% _; F2 A% e- var draw = function(){
4 ^" T; k& A) s - try{; f/ F& Z: a [. Y" ^/ C2 Y
- backcontext.drawImage(video,0,0, back.width, back.height);3 G6 @ o2 O- W& X! R7 D
- }catch(e){
* Y6 H; i' a1 V* E M8 \ }8 z" I - if (e.name == "NS_ERROR_NOT_AVAILABLE") {
) U' Q8 ^6 z. m# d/ H" e J - return setTimeout(draw, 100);; A- }7 q2 w' A8 d5 E9 U
- } else {1 E% t) \) Y- v7 [5 E
- throw e;: J7 v" w3 `! d5 F& E% f, c" `
- }9 h) B! y! N' |4 V0 a1 S( A1 ~# q
- }
1 F7 y4 J6 U" v - if(video.src){
1 T% ]: u1 _1 V2 W - socket.send(back.toDataURL("image/jpeg", 0.5));
5 A" ]5 G3 t; f - }
" r5 U4 R/ ?! F - setTimeout(draw, 100);
' J" ~ @/ _/ Z8 k% y - }
. l+ J- t5 g# c# h - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||" y0 c! T6 Q2 o, g
- navigator.mozGetUserMedia || navigator.msGetUserMedia;
# m3 P" j1 L7 H. g5 c2 k& s; H0 z - navigator.getUserMedia({video:true, audio:false}, success, console.log);: T j8 z. q; M
- </script>
复制代码- php# G1 s9 k J W) t% v' y3 X
- 8 N+ {& b/ t- E- u( z
- $server = new swoole_websocket_server("0.0.0.0", 9502);% I0 A0 F. M! Q9 Z" A4 b
- ' r$ S0 R" Q1 r* `; N' w
- $server->on('open', function (swoole_websocket_server $server, $request) {
' W+ D1 i- |/ n, T$ @* j6 p - 5 O# Z0 P: V" o% s- K* R( I5 A" d. _
- echo "新用户id:{$request->fd}加入了\n";
% Z/ M% |' U' t/ \& h& J) M - // echo "server: handshake success with fd{$request->fd}\n";: R* l: ]+ d; |6 H
- });7 i9 `3 H5 v$ A' `2 Y
1 M W" Z1 {, Z( g: X- $server->on('message', function (swoole_websocket_server $server, $frame) {
% \: B' A {/ _7 [* L - + B' V; i2 z! Z( G5 ?6 Q+ P. U/ m
- //循环所有数据
T6 Y- N( n' S. N- S" n1 d - foreach($server->connections as $fd) {
, r6 g; u. j6 o9 B2 v) o' ^ - //返回数据4 W$ r' i4 Y: m% {. v
- $server->push($fd, $frame->data);$ w8 C) L! I: ?1 _' c4 t1 `+ }
- }
* a2 G! u3 b' d+ X" s2 q
/ {! s0 t1 a/ ~; Q) E% }1 T- });7 [' ~/ L2 b4 l$ t* t0 t
- 2 @1 `' L) ?$ P( f, r. J' |0 `
- $server->on('close', function ($ser, $fd) {
" Q3 L! p* c6 e2 |3 T/ m/ C - echo "用户id: {$fd} 退出\n";# r5 @ D# F& n K1 A) ?" z$ ]
- });
( M: f. p% j' l, r( {# {+ k+ U - ; g3 m) A. Q, {. Y
- $server->start();
复制代码 , E6 A% k5 }% O) o
! j( B* d: X5 A/ ]! _5 h8 S
4 o6 X7 H+ c/ |! S+ Y b$ N0 n" ]
' s; G! u9 u+ b. ]4 }! h" \( c/ L4 f7 o* T4 m
: O! r! H8 i7 V- i% y
) y: H# j, K. F1 E
5 D" V! u Y: b. d% l+ S0 N* R4 A0 O
8 w* {5 O) x3 M* W* e
; ~3 S0 q+ Y) j+ Z$ I& R6 R* i# v: `; D7 M/ S/ A
| 欢迎光临 cncml手绘网 (http://bbs.cncml.com/) |
Powered by Discuz! X3.2 |