cncml手绘网
标题:
swoole 直播
[打印本页]
作者:
admin
时间:
2020-3-31 19:41
标题:
swoole 直播
主要使用 webstocket
4 B# `+ x- Y* ^2 l
上代码
前端
观看页面
<script type="text/javascript">
3 q3 y2 {; K+ p0 q. \
var ws = new WebSocket('ws://192.168.0.150:9502');
$ W S. ?( \( ]( @7 M" W+ X' j
+ q: D, S8 k W9 A: f. D% t
ws.onopen = function() {
3 A4 x) Z% w) [: j7 y- }
console.log("连接成功");
/ H* {' X8 H: Y: ~0 B
};
, ?$ G( e: h b) \1 o# b1 K
ws.onmessage = function(e) {
9 {3 n9 z- W& E5 ]0 C* {/ y
console.log(e);
: d. m# S' ?+ b' @
4 o' G2 N9 u+ _$ P# K
var data = e.data;
! ]- U% A) R; S
document.getElementById('player').src=data;
, l) l: |% c% Q8 W
};
8 O$ T# _+ I1 i
ws.onerror = function() {
" F$ S' t% w1 }2 K3 g& l. {; x
console.log("关闭连接");
6 P# y0 C" T8 n, N5 k
};
9 y4 }! ` v' ^& X1 y
</script>
复制代码
录像页面
# r0 x$ v7 x$ T6 U3 M$ D$ U
最好用火狐测试。
<canvas id="output" style="display:none"></canvas>
% @" n' R1 E) Y1 T# }3 c/ |* m9 q0 x
3 N2 z* b( T# @# `
2 J8 h( A- d6 W% A/ ?. O
j- H! o6 ~, h4 y4 L
<script type="text/javascript" charset="utf-8">
" Z& p+ C5 U G9 M6 f/ y
9 n* k8 M$ @# o# D& E
% X( ]. R( ?* e0 R' v
var socket = new WebSocket('ws://192.168.0.150:9502');
; x* |$ y, o9 l0 v! E! s" p# B L
//socket.send("嗨我登陆了");
4 ?1 ^# T% E+ Y6 ^2 A
# B O2 K! w" i& U( ?
var back = document.getElementById('output');
( k6 ~/ _- _: V) Q# x
var backcontext = back.getContext('2d');
1 J% \+ n4 Q+ T$ I, i& H% @ Q2 ~
var video = document.getElementsByTagName('video')[0];
4 i; P" s( L( |- r- N( T& I
( T2 o6 @8 A! L# t, U' T
var success = function(stream){
! k% ^ o+ U, |# O! y3 \$ g
video.src = window.URL.createObjectURL(stream);
( O; }/ l/ `3 O' Q
}
5 N* `% e! ?2 r: ~; ?8 L
9 h) v+ ^' G& i: v8 U
socket.onopen = function(){
" T- n0 e3 t* H7 E
draw();
# q, F2 _1 z* t; e1 h: X, e
}
$ C. ^; m9 E* R% V3 Y/ @
# `: g4 c& P& Q8 q
var draw = function(){
* v4 C9 w* M4 ` h* U" Y) q
try{
4 J/ f. X, q# A1 V' b* s
backcontext.drawImage(video,0,0, back.width, back.height);
4 s- Z% L. u# t' W1 h
}catch(e){
) r# \( r, H3 Q) n( p
if (e.name == "NS_ERROR_NOT_AVAILABLE") {
/ L( w8 M( V3 H5 U$ d$ W/ w Y
return setTimeout(draw, 100);
% u/ V& w. W0 ~( y; v6 w2 f
} else {
5 O' T! s( Q- X, \) d' \
throw e;
& {$ _% `: @* X0 X6 w
}
# s2 ^; o6 c1 _6 F. u1 B4 z
}
, D9 k5 a( `0 I- f1 L
if(video.src){
0 m: u" B8 N4 ], d: y
socket.send(back.toDataURL("image/jpeg", 0.5));
4 Q+ r2 r# H/ f0 F' ^* d: n2 Z
}
1 o& C( |4 m( u% A- f
setTimeout(draw, 100);
' Y c- ]' C4 C. F l
}
7 l$ t( X6 `! e/ B' J: A7 g9 I
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
8 m6 d- l/ M( C8 B" n
navigator.mozGetUserMedia || navigator.msGetUserMedia;
$ t) P" l0 D" ^; h$ `
navigator.getUserMedia({video:true, audio:false}, success, console.log);
5 U9 `" u4 Z: U3 S
</script>
复制代码
php
6 _3 k0 M! L, D6 S: L, D
- W( C" N' O" e% D
$server = new swoole_websocket_server("0.0.0.0", 9502);
# i9 c6 A7 s5 p: k) _
$ I/ X% p* s: P- z# q' y
$server->on('open', function (swoole_websocket_server $server, $request) {
5 [8 e t7 D( V3 T, t
5 w0 u1 _3 K5 \. v H4 y5 | l
echo "新用户id:{$request->fd}加入了\n";
; \9 T( W+ E0 C/ A {+ |8 N
// echo "server: handshake success with fd{$request->fd}\n";
9 f9 _) }0 g) P$ N7 A; c' U
});
* o7 C" D, W, E
# U- c) t- f# s$ S) i6 R8 A
$server->on('message', function (swoole_websocket_server $server, $frame) {
. s( U; I) t2 O0 I6 w% O: k
' p a) x: ?2 S' L) M) E
//循环所有数据
. O- L( Q( e+ T( ]+ [ F
foreach($server->connections as $fd) {
& K' X3 I+ A/ D& m: K' \5 ?( C
//返回数据
4 W) ^+ h! @% ?/ g0 C6 g
$server->push($fd, $frame->data);
7 u5 B, t5 @, D `2 ^$ s: G
}
, k/ g4 E% g8 k- Y: ]' _6 Z
9 M& } P6 q+ c& R$ {) s; X& N
});
$ z" ?/ D u2 h0 B# J
5 O- B. l/ v2 \
$server->on('close', function ($ser, $fd) {
[0 S4 U6 k# O+ L% x
echo "用户id: {$fd} 退出\n";
; J! T, j; l, A7 x0 b
});
7 Q5 T! s2 N9 [. j9 s$ W+ {+ V! `
' _0 V. D( u( p/ v& t0 }. C
$server->start();
复制代码
$ _' H% U/ Z$ B2 R9 C% y$ k
6 e- Z1 x, u# S1 X4 Y9 L
* q7 E2 f) \' t" q# n2 F' r
. J" @8 ^5 Y$ }8 O5 v2 n( e7 Q% l1 ~5 E1 g
# v$ ?( b; Z* Z. O i# `3 z
& A! h5 c2 R& k' N3 v6 s' ]% m
7 x: G8 S) ], V! }
7 R' M5 L- z' c) K! ?
, a& x3 @* U/ l- _8 J6 x
, s/ M6 {+ W- p: ^5 |( q
% j" l* I! o" K2 X! k$ u, F
9 A" U4 C5 v$ K+ n
欢迎光临 cncml手绘网 (http://bbs.cncml.com/)
Powered by Discuz! X3.2