管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
服务器代码
5 S. S5 t: h0 S6 i- $serv=new swoole_websocket_server("0.0.0.0",9501);
* @! q3 B5 c" T/ o - $client=array();
/ M* M/ E5 f" g J2 D1 @) @ - $serv->on("open",function($serv,$req)use($client){
8 ~" n% g. X! J - //echo 'connect'.$req->fd;
! n$ F" c8 c6 ]' e- z$ h - $client[]=$req;1 K0 {; B5 B) P _
- //var_dump($client); K$ h" V! h1 t+ `7 h; @
- $serv->push($req->fd,'aa');9 y$ {6 f, n+ y% L, V
- });* Z4 G+ ?* f4 s. h& N, v9 o
- ( X! e! ~% @3 M& `6 Z% e" f' a% d8 m
- $serv->on("message",function($serv,$frame)use ($client){
# |# u# c3 k2 K% u - /*var_dump($frame->data);
) j9 N9 Y7 k0 h' {# D - foreach($client as $key =>$val){: g! E: m9 h6 l9 e: R" ~
- $serv->push($val->fd,'aa');1 c) M& i' A$ g3 f u) o
- }*/% o& e" G2 F, Y8 Z7 N# k! t
- $client=$serv->connection_list();5 F+ _8 P0 \/ b+ c! \# I( a7 L
- var_dump($client);
7 X4 L% P3 k# v$ G/ k - foreach($client as $key =>$val){
% a6 d- i8 E+ s- D6 \ m$ F - if($val!=$frame->fd){
; T6 `, s3 j) C - $serv->push($val,$frame->data);4 `" H! r3 Q+ @. m N- W
- }
8 n+ j* |4 o+ v7 x - }
8 h% i: d% A+ h: c - % X# u3 ?; x5 h# J
- });
: m) x# A4 {+ m1 J - # s& R' P* K- @ o ^
- $serv->on("close",function($serv,$fd){5 V( z; o1 I, |* V3 x! J+ Q; |9 @
- echo 'close';
' H: {9 D& l4 c - });8 Z% o. X! q, O( w! _; k! F, } A
- 6 M8 V v9 h- T3 c9 o. Q% \* J
- $serv->start();
0 \9 \1 ?4 B: ^/ |+ x
; m. K! z9 }, `" n4 c
复制代码 主播客户端1 Y) t3 f4 f, h/ n% _' `" I
- <!doctype html>
( h& B$ w- t$ ~ B* ~* l7 { - <html>/ b! t$ r& p% Q
- <head>& \8 l/ U7 y; U" ~6 a
- <meta charset="utf-8">
% p0 N/ j0 x5 F3 k$ r! D - # B/ u, N1 A; U: k9 ?9 T) o: h
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">4 p: ]# u4 `8 C9 S: A: ]; e
- <title>404</title>
2 r2 h5 _9 v& t2 N4 I" Q1 E% r! X4 E2 J - <style>0 w5 k B3 f# ^/ x$ @8 q
- body{) D2 B O% _3 H9 @( Q
- background-color:#444;7 R! x+ V4 ^1 d# }8 A
- font-size:14px;; y+ I5 J( U: t9 ~; H# N
- }; ^% A7 `+ z& a: [8 c: x
- h3{
0 Z+ W& u- P( l0 z/ t - font-size:60px;- _5 \8 {% f5 ]! z6 U3 G& l' o' O
- color:#eee;
, ^/ Q* ^. ]& M. A - text-align:center;
1 k9 ~* | p+ G1 N6 ~* B* f5 } - padding-top:30px;/ R; X2 z; i) z" x
- font-weight:normal;& Z9 |0 e* v4 d! t
- }
4 v- k) ~- c# Z& _1 ?; R - </style>
" b% t# E) ?; K Y+ ?/ t3 ^ - </head>4 i# @: Q. N1 z# j
4 q$ o8 T5 N0 s1 p( ^% }7 _, r- <body>
$ Q# W! w8 L8 r1 { - <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video> I9 K0 P* {1 y b ?$ Q" e
- <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
4 Q6 y9 Q z3 R - <canvas width="400" id="canvas2" height="400" ></canvas>
* e& R% }2 s, E( J - <script>
, B; n& K+ L! o - var video=document.getElementById('video');
8 G* |( T0 q8 v8 J! i2 e/ T& T, y - var canvas=document.getElementById('canvas');- _/ R7 `8 {. _
- var canvas2=document.getElementById('canvas2');
1 ]+ M4 V: s: y/ r) C! s7 S( Z- ~6 P5 y; c - var context=canvas.getContext('2d');
. J/ N) o2 @9 d - var context2=canvas2.getContext('2d');" j/ h. Y2 z) ?2 V% l1 d4 G
- function draw(){$ y, c4 i0 `4 x1 M
- context.drawImage(video,0,0,400,400);
8 U- _$ E$ C. R0 }( X - ws.send(canvas.toDataURL('image/jpeg',0.8));
% t& g. r- q v2 ?7 I$ H | - setTimeout(draw,800);
0 ^1 e* D7 l6 _7 p5 q2 Q/ `( q - }
/ j" c+ ~$ W+ Q; T9 x! `' i' D
) l; q- r/ D( i( j0 U- //客户端跟服务端通讯0 E( g U0 h! Z6 b1 C1 H
- if (window.MozWebSocket)
' \5 p" V( o, R2 J9 B - {1 j" Q+ E7 j5 a! {- \
- ws = new MozWebSocket("ws://182.61.42.187:9501");* f* D% g9 V, @( z
- } else
+ F& z6 G1 ?0 W - {0 U% v+ r$ Y! \4 C8 S% j
- ws = new WebSocket("ws://182.61.42.187:9501");
6 u, _+ {, H2 S7 Q; K8 I8 q - }
* [% `2 L+ F# |$ Y2 e+ B4 T
( ~$ E: n% \" r9 [: ?6 d- ws.onopen=function(event){7 `( W. @" c0 V. d
- alert('连接成功');: y( X2 ]& \$ Y- C: i! S# h
- ws.binaryType = 'arraybuffer';) ^& @3 A, o0 o& X+ J* p
- draw();. n; M1 m6 s9 e) ^' `! z' o0 o
- }
% @4 m3 J) y3 ^# \3 R* h - ws.onmessage=function(event){6 I9 r, l) |9 C1 T8 V' z* a1 Q
- //alert(event.data);! u8 _. Z( x. [$ H) l, ~
- //ws.send(event.data+"client");
$ h% k* T3 F2 F( d/ F' O3 \ - qrCodeImg = new Image();4 j4 g. J2 I8 K9 s
- qrCodeImg.src = event.data;* } e% X3 s6 I7 i
- context2.drawImage(qrCodeImg, 0, 0, 400, 400);
# R# o/ z r- O5 j -
3 B2 k/ F3 ~; b" i - }
6 u3 h2 p( Q( c1 D3 L# Y6 M - ws.onclose=function(event){
% M1 d' V' E( c0 O, {7 v - alert('close');
. n! v! G8 d" O( [' A" P - }
1 N' U) O) k4 ` - ws.onerror=function(event){
" A4 C% n4 i& U7 D. w/ y - alert('error');
7 [* ~ D3 c1 Z% i; V3 i. k - }
- G* ]% x! @9 U4 j/ i! {* Z - //video,标签模拟视频
) @+ n" s2 ~1 y1 b. W - / h# k( E, B2 A
- </script>3 F. q+ ~* \4 W( r3 B
- </body>
! e) ~6 }& N! p - </html>
% c' }7 E V; Y- r1 M2 k& d9 _2 l; ~
) g1 N7 L, F# b5 K3 L
复制代码 客户端:
7 h; g h7 \2 }3 s# z8 i- N, P- <html>1 `3 @, ]9 O+ W* l( K. E: l# e
- <head># i+ `! H7 s6 J, h! c; l
- <meta http-equiv="content-type" content="text/html; charset=utf-8">1 g$ X7 `5 P5 \
- <title>客户端直播页面</title>" A' J+ c+ Z$ j) `' t2 {
- </head>. z* p2 W2 V/ Y L( _
- <body>% R8 T* Z2 U4 D# t2 ]% e
- <img id="receiver" style="width:720px;height:480px">
. k3 x7 p6 p1 D7 X - " g/ ^( a) x* A+ q" |! y
- <script type="text/javascript" charset="utf-8">
( g% O; u4 I/ t( [. _1 B5 \ - var receiver_socket = new WebSocket("ws://182.61.42.187:9501");
0 Y+ n. j$ d7 H7 A4 C - var image = document.getElementById('receiver');9 `) ]0 A- ~* K' h, `* }
- receiver_socket.onmessage = function(data) {, t- ]. M. t7 |9 K& o; N7 G
- console.log(data.data);! A5 g) g( x! u% S$ Z
- image.src = data.data;
" v6 O5 H6 L- f( X0 C - }
& v' Q( x; W; J1 e: s - </script>
0 e) _9 y H; l5 B# F - </body>( n) W" b7 k; x& Q
- </html> H0 J/ {$ @* i
5 e3 f+ `4 k, s1 {" W
复制代码
, i( k1 ]; F) D+ R: t" }0 f
& L% H/ M3 C4 x5 W8 M" s. t! N3 y% ^, P$ _
0 | b( w' F( h( U; m6 ]# Y6 Y2 N4 d9 g' O/ }
|/ h1 M6 Y0 U7 Q- k I |
|