cncml手绘网
标题: swoole 直播 [打印本页]
作者: admin 时间: 2020-3-31 19:41
标题: swoole 直播
主要使用 webstocket' w o% ?" s2 G% H! ]. u* o# R( p
上代码
前端
观看页面
- <script type="text/javascript">; ?+ u! `* @! z, N3 o# { S. u
- var ws = new WebSocket('ws://192.168.0.150:9502');
0 b# h3 N1 O% p" J - : p3 ^& y, m5 |0 g e) ^
- ws.onopen = function() {
2 {2 K" R, D. P: N& q - console.log("连接成功");
' q* X, E- c8 l2 y - };6 n: u+ U0 L8 v* n- P
- ws.onmessage = function(e) {; ]! ?( I0 d7 [
- console.log(e);
1 i9 h: y, [ q Z - 5 c% z4 e) N, p" C
- var data = e.data;
- O& r: ?# k5 l# b/ ?! M; l( k - document.getElementById('player').src=data;7 s+ k* I/ n) {! _. F" w
- };
* V0 Q$ V9 I3 {$ c/ T$ G - ws.onerror = function() {
/ k2 h; T) {7 l - console.log("关闭连接");
4 P! J: E: a! Z) G) V3 l& i* r8 w - };3 C, \( C9 X% y0 f7 {
- </script>
复制代码录像页面
6 U8 w8 v7 z$ s) B0 d最好用火狐测试。
- <canvas id="output" style="display:none"></canvas>
+ f- r& V: W1 J, S: B- l - % i3 m1 S3 M3 c- o# u4 h
- ! j" y& e/ U9 i# |. M3 W
: p$ }7 E# V- r. V- <script type="text/javascript" charset="utf-8">
0 L( D1 h5 T7 `, J; H1 R8 X
* ?, @$ @' A5 y3 w$ d- / ?7 F E5 k' Q0 D, _0 U9 r5 g, L
- var socket = new WebSocket('ws://192.168.0.150:9502');
/ m' ~# K' S- H) N) l1 ] - //socket.send("嗨我登陆了");
. |8 J; V/ Y2 B+ K( N' Z- b - 2 ^, ^9 j" q. v
- var back = document.getElementById('output');
# C) [0 A- b; R+ h' |5 u$ L8 R) g$ ? - var backcontext = back.getContext('2d');+ f, ^* o; u$ A9 U: ^# ~7 |& s
- var video = document.getElementsByTagName('video')[0];+ l5 W' e1 W; ~& o0 M+ r: G. K
- + V, o3 G; d0 r* W/ m! o( j( A# _
- var success = function(stream){
& p# R" O0 T p0 B7 p5 [% P - video.src = window.URL.createObjectURL(stream);5 v- h6 j( C+ s5 {4 k
- } R* e! K& _/ H: }
Z- \0 k e0 _% x4 A2 f- socket.onopen = function(){
+ k$ Q8 Z( O1 B8 E* e - draw();
( G* @% U; }, P( O. q - }6 `& W; o4 f) ^1 h* Z& [1 N! s' K
- ) g c6 ]) G+ \( R! S& v
- var draw = function(){, X) W; j z' U `6 T D0 ^8 `# a
- try{
* E# r k6 F8 j& L0 r9 w- ~6 A8 B1 { - backcontext.drawImage(video,0,0, back.width, back.height);
5 w& W1 W: W1 {. W - }catch(e){, {( G( C8 b$ e: V$ U) E# ]0 z- @
- if (e.name == "NS_ERROR_NOT_AVAILABLE") {6 ~5 S( u% S% d3 B. ?0 i2 M
- return setTimeout(draw, 100);/ P: Y. f0 @; O+ T
- } else {1 C% v1 `9 h9 t+ D( v$ N
- throw e;
+ R# Q& I) S. ~8 B% w0 N - }- Z, N4 o4 p" ?& a- z7 f& H" Y# V
- }3 u( W: j' l& y5 \
- if(video.src){
$ f3 H; t9 p" j. p1 D% N$ i - socket.send(back.toDataURL("image/jpeg", 0.5));
: {9 }8 V4 a+ G, J# c. T7 \ - }
: Y/ n7 \3 u7 K8 j' t' h3 o% D - setTimeout(draw, 100);
+ h, O; p; f, [9 v) l) l - }9 d- z/ l7 S# ^) f
- navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
& t# s, @/ y$ z* _6 @4 N* f - navigator.mozGetUserMedia || navigator.msGetUserMedia;
# O, B: ^7 B9 }$ E - navigator.getUserMedia({video:true, audio:false}, success, console.log);
$ D1 {$ s; T) d" }/ X - </script>
复制代码- php$ S, i0 @. h4 @- m0 M7 [ Q
, u' W- d" d: \1 c% \9 b- $server = new swoole_websocket_server("0.0.0.0", 9502);! s* B4 \( @# @3 S8 m
- 2 }3 V1 ~- M) v/ ]
- $server->on('open', function (swoole_websocket_server $server, $request) {, U9 W4 M Z) B
1 L7 n% e7 v! h0 n8 }& V& y1 I- echo "新用户id:{$request->fd}加入了\n";8 }3 N7 |0 W# T: ~0 J/ y3 W: m2 n
- // echo "server: handshake success with fd{$request->fd}\n";1 J7 Z/ P3 v* I; N
- });
$ P. ?: {5 ?$ `. O: g1 t1 J
J# w, k% l9 ] Z- $server->on('message', function (swoole_websocket_server $server, $frame) {8 u. N1 R7 W5 z: b: `( q
8 v$ Y3 F4 V/ F- //循环所有数据& s4 m" B: i" m
- foreach($server->connections as $fd) {
( B( ~, b5 v$ C5 ^ - //返回数据
- G3 s6 I1 Z5 ^! ~ m. L - $server->push($fd, $frame->data);
+ }& g6 ?( @( i9 l A - }# j# W' L* I! d
- ) x0 M+ R* W( i3 [
- });5 N) E% w. b) ]& e# D
' M/ j, W2 W1 p) m, U& }) w6 `- $server->on('close', function ($ser, $fd) { U& b) C1 \/ f& y6 x) v- O
- echo "用户id: {$fd} 退出\n";& p4 L8 ]0 s! w" |/ n8 H! r1 ]' j
- });) Q+ R6 w" ~ }0 o$ t
- 3 {' O! s5 ~! c8 n, c# M
- $server->start();
复制代码
1 w; P3 B& s4 g
" u; y3 v( w9 {$ Z9 U2 L9 P$ Z' d5 @& C6 t' L2 `/ O' ~
8 E I9 M5 N& i$ `; X d3 O; [9 U$ ~. z2 u) a0 T: U
9 B; H6 o# f" q2 C) i2 B! b. X- u. w/ t3 D& q% B5 E' `
9 o# W, K( ^* q3 Q, l: M) e# k: |- s
- I' W- q2 o9 P
9 M. s% Q; I1 X' [5 ~
# g) }3 Q y9 K2 _
| 欢迎光临 cncml手绘网 (http://www.cncml.com/) |
Powered by Discuz! X3.2 |