cncml手绘网
标题: swoole 直播 [打印本页]
作者: admin 时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket9 h3 ]" R$ g: ?* n: C
上代码
前端
观看页面
- <script type="text/javascript">
, b4 D6 }5 A ]* \ ^$ N4 @ - var ws = new WebSocket('ws://192.168.0.150:9502');! b! C% W, e0 N! e( r& O
: E. f! j5 y) ^" v- ws.onopen = function() {
: M% [5 O7 f) Z' A) d+ U - console.log("连接成功");
0 V. q- x& a$ A7 s+ X% d- z( g: H - };. T; d: f- Y8 R9 x) D
- ws.onmessage = function(e) {
0 I: k) Q/ J, d) N. u* C) p: _' L$ H - console.log(e);
; e3 ]. ]* }2 ]" G2 {! V/ [7 f
6 Y; A$ C# m" L" |- f- var data = e.data;
4 L+ r$ S1 W) |8 | - document.getElementById('player').src=data;! N6 E- ?* p% g; u+ [! a
- };( u( d$ o* _/ l; A0 z! w4 \
- ws.onerror = function() {
& h$ E, d& l2 N - console.log("关闭连接");
) Y2 |- B _0 a: t/ p5 m+ e+ r& s - };' _/ c; O9 u7 a1 J
- </script>
复制代码录像页面
, S5 }1 }. t1 ~; e9 m
最好用火狐测试。
- <canvas id="output" style="display:none"></canvas>3 R8 p: _$ P7 Z+ {: l
- - z8 c$ `9 A$ ?
- 6 I$ }" |( K- S x* W
3 h" H' g C' d3 B$ ?/ i- <script type="text/javascript" charset="utf-8">5 ^- L7 A% ]4 } J$ {) _
- 6 E: F& `4 O. Z% q% B- P0 z0 o
-
8 R" p8 k7 }9 l - var socket = new WebSocket('ws://192.168.0.150:9502');0 i4 k5 J' e; y: p+ L1 B8 T
- //socket.send("嗨我登陆了");1 ~/ y* H% M% ~/ Y3 E1 H
4 q) a5 t0 p: A4 R ~0 l- var back = document.getElementById('output');
0 D; I% p) b1 @. g - var backcontext = back.getContext('2d');
& y+ o" @0 v& G' P" I# P$ q' s - var video = document.getElementsByTagName('video')[0];
& g* m1 v4 x c& |6 W' H -
1 }$ y. w) {. l2 } - var success = function(stream){
9 F* p& ^1 {' d) P$ \1 W4 J; P - video.src = window.URL.createObjectURL(stream);
9 d; C' g# n3 J1 h k. b - }& f7 A1 T0 q, ?; J3 d( S$ h2 {. E
' e( D' j6 {! I! b2 P# J9 N- socket.onopen = function(){& G, t+ F0 G% ?0 T) L% N$ {9 p; Q
- draw();$ t( A {3 X; W5 ~
- }7 f6 F9 ~1 N7 h+ [2 G$ B
; H" t" r; y) C- var draw = function(){. y6 D: k3 f5 p7 ^! a' O% s
- try{; Q2 C9 i6 y, J3 ]
- backcontext.drawImage(video,0,0, back.width, back.height);. O! N6 L& J# v
- }catch(e){
1 ~+ J |# K2 Y7 M* q' n - if (e.name == "NS_ERROR_NOT_AVAILABLE") {
! i6 y2 V3 Z: {1 _# R+ M; U - return setTimeout(draw, 100);
# c$ H, B( W6 a7 W, ? - } else {
0 D6 T( x$ t# b1 N0 V7 I0 |& u - throw e;! P8 S4 ~' N$ \4 F$ s7 G" R9 Y" j
- }
" O6 T+ P: {' D6 r7 v% R7 i9 M - }) F( ]* {1 Y( g/ F% g8 J2 @ }* X
- if(video.src){
/ ?5 V$ [' b( N q4 g) Y6 A9 H - socket.send(back.toDataURL("image/jpeg", 0.5));
* [7 ?2 X0 G5 r E5 ~$ @ - }
) j2 C2 }, Z* N- s6 Z0 P* R, C2 C - setTimeout(draw, 100);. w3 x ^. k, T7 a" c
- }6 c- u7 e- t0 I7 T
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
/ E, h) D7 A8 v - navigator.mozGetUserMedia || navigator.msGetUserMedia;
6 z1 p/ i0 I9 K$ Y7 x3 U - navigator.getUserMedia({video:true, audio:false}, success, console.log);3 P) e8 c# c" B& L8 y
- </script>
复制代码- php, i( y2 L& |+ z$ A0 w. I
+ ]1 i* `! u4 Y8 x- q% [* W3 G( _- $server = new swoole_websocket_server("0.0.0.0", 9502);
5 r) i @ D4 N- O
2 ]# b E4 a3 P6 A" ~( @8 N- $server->on('open', function (swoole_websocket_server $server, $request) {( `9 B' c. z8 z/ W. F0 N
7 E+ ]5 G* D; u' l. k7 K" k- echo "新用户id:{$request->fd}加入了\n";
& G! j1 M: f* A+ q; D9 E - // echo "server: handshake success with fd{$request->fd}\n";+ ?2 B( ^4 b/ a6 _8 B% a
- });( Z& A& K! v4 e; u# l" J$ a% I
- / T, W) W2 D- S* i7 k) @
- $server->on('message', function (swoole_websocket_server $server, $frame) {$ t' B' p, W8 }% ~ c7 u5 ]# P) t
. O$ n/ j" ^1 S" ?- //循环所有数据" _4 c# u% H# b
- foreach($server->connections as $fd) {4 `3 N s' r) e- a6 R) a
- //返回数据( k" } i8 @6 L' t' |. C. D
- $server->push($fd, $frame->data);5 j9 \! W, D; W. S2 d6 Q
- }0 x4 N) Z" \6 K
- $ m9 [1 ]5 ]9 Z. X7 X
- });
" X% A6 q0 ^, e1 u* c' p! n- E3 I2 M w
7 i3 O. ~0 a! C- $server->on('close', function ($ser, $fd) {
+ l. {8 c# S' _2 M& e( Q) j7 _ - echo "用户id: {$fd} 退出\n";
; I8 A, x/ {; Q - }); |7 b* ?) w9 Q9 r
3 m* P5 J/ c) C* ]% c1 p# Y7 j- $server->start();
复制代码
: q, U7 C' t+ L1 }+ E# H! A/ h* t5 ]' X" }
$ U6 u0 b+ T4 o
! `' l( j2 K1 m3 C0 Z% |0 |! c
1 _' t! H; J U* {0 G( K, ]/ y5 C/ k! _6 N7 s8 T
! d# Q/ N7 b& j, t* H4 a0 Z; T: x! ]: m( Y& [4 R
! w5 Y2 [6 f( G
6 o! G4 u) q( m0 Q4 u- O
N* ^$ r" J" N$ q8 v
; H0 L: }5 n7 H" G# k
| 欢迎光临 cncml手绘网 (http://www.cncml.com/) |
Powered by Discuz! X3.2 |