管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
|
主要使用 webstocket& y# z) b Z7 }2 W) i4 W
上代码 前端 观看页面 - <script type="text/javascript">
# w$ R# o4 @3 `3 y: i7 q - var ws = new WebSocket('ws://192.168.0.150:9502');
9 r# S9 Y$ Y2 x; j0 E+ Y6 A! s7 U
6 }$ a: D3 o* I& T- ws.onopen = function() {
/ Y1 r3 t/ T g* f' h - console.log("连接成功");
3 V+ W4 k* J+ i9 q$ X+ v ~ - };
9 Z% q3 O$ H- y5 u s# e8 ^ - ws.onmessage = function(e) {
: h+ T( J* D2 y( Y0 g* s* c - console.log(e);
& I! i/ P. ~- n1 N o - / ]5 g. D; i; d4 l4 _2 F- ]$ @5 y
- var data = e.data;
8 U) Q' J% t" w* a# {* U- N/ { - document.getElementById('player').src=data;
# [. ~4 A2 ^6 f5 ?6 M: o: g - };
4 k9 M Z/ o/ t( ` - ws.onerror = function() {
. E3 g- h J, t4 Q) |, Z - console.log("关闭连接");
3 h- x9 [8 M; G: w$ |% n - };) Z' u) x% ]( o3 u1 l
- </script>
复制代码录像页面 + R7 c8 J: g1 v1 P
最好用火狐测试。 - <canvas id="output" style="display:none"></canvas>
, F7 T* E# ]! o: C1 |" r
: h8 k9 V) ]- t: W- 5 n7 Y1 g3 M4 w" r2 s7 D
- 5 n6 s; l. w( r' K0 u
- <script type="text/javascript" charset="utf-8">5 i* D2 f9 {4 F1 E2 w/ B7 j9 `
- ; Y: M' G4 f5 n( {/ t7 F
-
1 F9 Y* d4 E. X* g+ Y - var socket = new WebSocket('ws://192.168.0.150:9502');1 |+ n, ]7 c4 M# j
- //socket.send("嗨我登陆了");- r! O; p8 n, c2 G) P
- ! p6 W. U {9 W4 [
- var back = document.getElementById('output');# v5 K: _$ m) d
- var backcontext = back.getContext('2d');
' P9 q8 E& U8 O8 y) B" l - var video = document.getElementsByTagName('video')[0];
; ?0 W( L2 |& Z) N T+ w2 f$ X - % n; B4 f- X# C t
- var success = function(stream){
4 H/ c2 e6 @% o$ X, t5 ]. c - video.src = window.URL.createObjectURL(stream);( o" V: ~5 W8 {( j( z+ M( D
- }8 ?6 x; @2 x, J8 k) s' I
- " Z' B! g; G; P3 r8 B0 K$ _, f. Q
- socket.onopen = function(){7 d8 p/ F2 M) [3 P
- draw();
4 q8 d2 Z. l. O# i+ M - }3 |5 i& S" p/ f! B- Y
: M2 x1 e5 B- u2 t8 Z, D- var draw = function(){
& G7 l9 C/ G4 v# \4 Z C - try{" A* |* `9 h6 b9 Z2 c g
- backcontext.drawImage(video,0,0, back.width, back.height);
. o: C5 g A* a7 y6 e - }catch(e){
# `+ X" B3 o8 O0 q, p - if (e.name == "NS_ERROR_NOT_AVAILABLE") {- E' A$ I L7 t& h
- return setTimeout(draw, 100);% E, t7 ^9 P- q2 Y1 U, _
- } else {; {- @7 [! L: |5 l' c& C
- throw e;
6 r9 _+ |6 b7 l/ K2 |) p2 G5 d( x - }
' v! B% v$ I8 E/ F. [/ `! D c" C - }" u, a6 Q" Y/ q$ H7 Z2 ]/ r& E
- if(video.src){
8 h1 p- T# [& F - socket.send(back.toDataURL("image/jpeg", 0.5));
, r2 N! v1 @5 e* ^6 e - }
: }) M3 d. L+ v3 P- [& E - setTimeout(draw, 100);6 u0 b! _4 k3 ~+ H% P6 P" m
- }
4 j+ O4 a/ T6 ^! G/ _# {2 ? - navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||7 ~/ r- c( U" e2 _
- navigator.mozGetUserMedia || navigator.msGetUserMedia;
5 }7 P; [2 E* ^' J - navigator.getUserMedia({video:true, audio:false}, success, console.log);% a3 V$ n: ?1 I& u0 p
- </script>
复制代码- php
" I+ x( X# N+ q/ M8 k9 D( q
, ?7 k9 P' }# G* Z% j- $server = new swoole_websocket_server("0.0.0.0", 9502);
. ?: ^* p8 _1 N1 s& v - , _' Y5 m! Z6 f; v' c$ V# P% c' G
- $server->on('open', function (swoole_websocket_server $server, $request) {
8 b D" ~, H( A" Y1 Y5 L; ^ - + c' b+ [1 n5 A2 W
- echo "新用户id:{$request->fd}加入了\n";4 Q9 }# A5 f* t8 b u
- // echo "server: handshake success with fd{$request->fd}\n"; g) G9 F& j9 r5 g2 e& e
- });
1 u- u' W6 D8 a7 Q$ Z/ W/ I - 9 e4 D+ {6 B8 I' X9 M: s$ U
- $server->on('message', function (swoole_websocket_server $server, $frame) {
$ z. [" Z& Y* Q0 i - ( s3 l9 M, h$ |
- //循环所有数据6 o7 j) y0 W& M0 K
- foreach($server->connections as $fd) {8 S; k% O1 r5 D. ?% x! S6 Y6 a
- //返回数据6 Z V4 B. D/ q, _9 j; l' H+ G+ n
- $server->push($fd, $frame->data);1 p$ K r( O4 j' i4 e! w( S a+ z! T9 U
- }
4 A! u2 H6 Q R% k/ h - V7 ^, P1 ?, b4 o1 @3 j! D
- });
2 W2 g$ Q. R4 H6 W. ~- E& u - . x V4 Z' x; H4 |% w
- $server->on('close', function ($ser, $fd) {) Y% U) h% L) n3 _; x, f9 l: Q" B
- echo "用户id: {$fd} 退出\n";
8 P0 t1 y s8 d1 r4 I0 t% m% _ - });
, [$ h3 w" a0 n/ ^% ^3 V) l9 e - . P% d9 ^" R( K* B0 L3 U! H9 `3 g
- $server->start();
复制代码 & ~ v+ z( |: q( v3 i5 U
. K& I7 Y& [/ G7 J. n* p$ c! T1 U* {4 V1 R( C% x R# o
* Q6 a& D' @) I$ Y4 K/ f* B5 V
}! K8 s$ {' d+ e$ m+ [( Q1 F3 [! z( q0 ?9 T1 F
; u0 t: l3 h- m4 I. x' W
) H% c( n9 [! M! p5 r# ~5 c
* @) ?2 z- f2 v. Z$ {( E' U7 P1 }' p1 i- J+ V) M
( Z4 t% q& [$ h5 P. g: X0 b
9 R4 J$ _6 D4 M2 _( c! V7 s. z7 g |
|