您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10051|回复: 0
打印 上一主题 下一主题

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket2 R0 Q6 O7 ?$ U/ ?# V
上代码
前端
观看页面
  1. <script type="text/javascript">
    ; S: l; S9 f5 C2 V3 Q( c; B2 v$ n
  2. var ws = new WebSocket('ws://192.168.0.150:9502');  D0 ?# i4 R( D* M. @1 [+ e
  3. $ P1 Q! L% O0 ^$ t  N$ Q
  4. ws.onopen = function() {
    5 A+ I! |* n! J+ q. T- ^) u  H% e
  5.     console.log("连接成功");7 b* ~) S% ?0 T* R1 N
  6. };5 d% |5 J2 H6 H5 P! L! E
  7. ws.onmessage = function(e) {
    * R* O# ^+ \2 v3 B$ Z1 W
  8.    console.log(e);
    - ~$ e, q& I/ n* C2 y# [' a
  9. : I3 I  a" b$ I4 ^4 Q
  10.    var data = e.data;7 A8 S4 A8 s1 C3 s9 @
  11.    document.getElementById('player').src=data;
    / [3 B( \; z  F; C* _
  12. };
    ( I. P0 Q( o" ?
  13. ws.onerror = function() {
    3 a1 j4 `. ^- H
  14.     console.log("关闭连接");/ S  p7 u! Y' \0 |( r8 Z: m: A
  15. };7 k7 e3 K' y: e3 D0 _) e, m7 `6 p' S
  16. </script>
复制代码
录像页面

- J1 A, O7 ]1 ^" x9 x
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    8 T0 ]2 e  N# P$ _0 k

  2. " ]( H7 J; ]% o! y+ n" T
  3. 6 ]" O* j1 `  r$ t# g

  4. $ V' D1 H5 d9 L) R+ a' V; ?/ i
  5. <script type="text/javascript" charset="utf-8">
    * @6 O. e! S$ T  e0 f' u9 |3 P
  6. : Y9 Y5 L/ @, t/ z4 k" O
  7. 6 l7 l* v+ Z" B: t2 l1 a# t; a
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    6 G8 _4 u+ E9 R9 S( g' [
  9.     //socket.send("嗨我登陆了");
    9 G: e8 ?5 I' Z3 J6 J8 @( t

  10. ) j: u* v  |) S# D8 [" J* b4 F
  11.     var back = document.getElementById('output');8 f" ~. e# Z' ~; c9 M; s
  12.     var backcontext = back.getContext('2d');# n9 Z7 r8 Q# v& U
  13.     var video = document.getElementsByTagName('video')[0];) e! m0 i; t: e$ z' `
  14.     ( p9 @9 g4 z" @6 k$ P% ^  j
  15.     var success = function(stream){
    . E2 _- w6 Z, _. c* |
  16.         video.src = window.URL.createObjectURL(stream);; g: S. j# s2 m% m& t: b/ V
  17.     }' t5 \9 z( z6 \

  18. - u7 q5 b) J: P3 I4 h
  19.     socket.onopen = function(){+ @8 o$ F" L9 V: i, \3 E0 G" E/ q, b# |! x
  20.         draw();
    0 r) M* S5 V3 I6 g( y& w" m  R
  21.     }' v+ y/ z2 Y( g2 F0 N7 l  k
  22. " O3 V, ?# o& W: ^# [& ~
  23.     var draw = function(){7 x7 @& K/ f' |, D7 g, W; L- d* v8 P
  24.         try{
    8 z% V, a% V) W; X
  25.             backcontext.drawImage(video,0,0, back.width, back.height);  z1 U2 {! J* c6 T2 v/ x; O5 e
  26.         }catch(e){
    6 T6 r0 E" c- n" V
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    8 B4 w: a! b4 o5 t$ u
  28.                 return setTimeout(draw, 100);9 P6 n: e9 c4 J; o  p# m5 v3 i
  29.             } else {
    + c" r# a- e$ R% ~. v% {
  30.                 throw e;1 e: g2 O# n1 \$ N
  31.             }
    $ J' j4 m6 F9 g) \. ?1 b& X, n
  32.         }
    6 |, v4 x% a# G' F) }5 x- T* e
  33.         if(video.src){4 t5 v+ `; ?0 D0 o( v% q
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ! Y, E) P* @5 H9 Q8 p( x% m: y
  35.         }0 X! y' n$ x3 e# Q, m* W
  36.         setTimeout(draw, 100);
    6 K8 u. P2 b" D1 F# ~
  37.     }
    ( K+ W% L# L/ t9 X- C) w
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    ; v- Y; w2 l& d' _
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    : @* H1 O0 z2 |5 O
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    * y. v; G$ s8 K* z
  41. </script>
复制代码
  1. php- H1 o4 _0 }7 e+ k. ^# u* W8 H* V
  2. : h+ V# A, o! \( z( d
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    5 r) i6 w. Y8 c" ~, k+ ^( B1 W

  4. ) X5 `# A/ [4 [# W
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    9 M- i3 r4 @6 @' l4 {) V" T3 E

  6. 1 N* C: Z6 a$ ~! Q
  7.     echo "新用户id:{$request->fd}加入了\n";
    5 ^! d) N1 N% x* r( w
  8.    // echo "server: handshake success with fd{$request->fd}\n";" r5 Q$ Y  _5 W& N' F
  9. });
    * [) _: |+ d/ u2 t: W+ F0 T
  10. " i" C5 f1 D3 |5 `7 Z* o
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    : X3 h8 r9 T! q9 R& `
  12. 4 d* p. Q% K* z" x% l
  13.     //循环所有数据
    , L4 Z$ i( Z6 X# c
  14.     foreach($server->connections as $fd) {
    ( [. [  j2 K; }7 _6 \7 P1 l' |6 F
  15.         //返回数据% |' R! c1 {$ a% V4 U* R4 \
  16.         $server->push($fd, $frame->data);
    * i- n+ E+ Z0 ]0 _/ u
  17.     }9 R3 {8 d7 ]/ n7 F

  18. + j9 y" k6 o' p" t3 q
  19. });9 C# x) v5 C; Y

  20. . ~3 k! D9 f3 g# M% D
  21. $server->on('close', function ($ser, $fd) {
    7 U* ]$ n: K1 Y9 j3 f
  22.     echo "用户id: {$fd} 退出\n";# [9 h* `0 J" N7 l: g6 Y8 V8 x
  23. });) W6 R$ |' M8 t/ M" O

  24. $ t5 u0 P) p& x4 i
  25. $server->start();
复制代码

; y( k3 R3 B2 F, {- G9 {3 Z( M6 ~! N; ~; {0 F" T
' a; ~0 y: `8 P# S2 [) R

8 v1 i( R2 ?% B  U5 I# _: t( t, U! l0 [. m6 E

: A4 {, Z! o  t  E+ Z/ }1 I
" }; F0 ~3 n2 ]! N( t& t: x1 j- |
, i0 N! N# l9 T5 g9 i; M  A, A' J
! h/ U( g* x( s; n. C
7 Y+ j& m& J6 o6 G4 A  N% D) J2 l) w5 e
* y) Q3 n9 ]- q8 e( V) d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-2 04:43 , Processed in 0.119362 second(s), 19 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!