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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket  j1 ^- o+ J- e$ k8 M) J
上代码
前端
观看页面
  1. <script type="text/javascript">. _) S3 q3 g) l8 r' n
  2. var ws = new WebSocket('ws://192.168.0.150:9502');3 X3 }3 F# r4 y/ g
  3. ( A: r3 B+ Z$ h: A8 \
  4. ws.onopen = function() {
    0 ~, ]$ t+ D' k9 |& E; v% G
  5.     console.log("连接成功");
      y& J8 }, w# C. A
  6. };( O. J& i1 Z7 r
  7. ws.onmessage = function(e) {
    # ^, R% C3 X0 x" H# s% g
  8.    console.log(e);
    8 e8 S/ o+ v" _

  9. - ?4 b0 p+ F; o
  10.    var data = e.data;
    2 ~, F( s( `6 C. e6 _
  11.    document.getElementById('player').src=data;' a$ Z5 Y( O+ j
  12. };
    + C  P+ R! ]7 E; e
  13. ws.onerror = function() {
      u# @- Q2 ^) R% ]6 P7 b$ Z
  14.     console.log("关闭连接");
    ) ?; d8 t, j6 J! j% g* w0 a
  15. };
    9 S4 T1 r0 _; Z; a" ~' j
  16. </script>
复制代码
录像页面

% {3 X( j6 ^% b
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>4 R; I( |  `7 [. i2 s8 I) w

  2. ! z2 G8 ]  q, ?8 N, T+ k5 \2 H
  3. + {2 B' d4 o) u& v  b; S  j, D( |, @
  4. . R. `  L$ U& h. q! c
  5. <script type="text/javascript" charset="utf-8">
    * B* T- e' L* I7 e) o* e

  6. 2 |% r  P- n8 m# e2 T

  7. 7 t9 v3 U, G. @$ \
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');0 X' u% w* E1 i6 F; C
  9.     //socket.send("嗨我登陆了");: j( j. X9 y! ^7 p

  10. , s, B' g0 C& A5 ~
  11.     var back = document.getElementById('output');# O2 V4 U( K, n) _
  12.     var backcontext = back.getContext('2d');0 q8 v3 Z# l% H# [5 s- V
  13.     var video = document.getElementsByTagName('video')[0];) _6 M3 k+ A8 I8 N3 w" l% m1 ?
  14.    
    4 H" h# g5 x/ n% y6 e
  15.     var success = function(stream){% A6 o/ m# w$ D% h1 n% T
  16.         video.src = window.URL.createObjectURL(stream);, C0 b( W' u, m; S6 R( w. t
  17.     }
    # Q5 b) @/ b4 H+ v6 b

  18. 3 n9 X2 k8 a$ q5 p; D
  19.     socket.onopen = function(){) g  x+ L* a3 Y0 r  E6 w
  20.         draw();0 |" u# N3 ~6 W2 Q1 _# z
  21.     }8 [. g( B! f* z/ m

  22.   u; Y) ~, e! q- j# \
  23.     var draw = function(){2 v" q3 E, H% e. d# ?
  24.         try{
    - b& ]6 W4 |; j1 _6 P8 j
  25.             backcontext.drawImage(video,0,0, back.width, back.height);% y2 K& u" G% U4 }
  26.         }catch(e){
    * J) F# l& A0 E* Z5 e
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {: w7 O1 g% u# Z! ~+ m
  28.                 return setTimeout(draw, 100);
    ! V: G( C, R. u7 ~5 O
  29.             } else {  P2 \; Z* x& I7 u
  30.                 throw e;
    * S9 r8 ]$ L2 j4 f+ B5 l1 p% {
  31.             }
    9 Y5 z( c+ F" a. `0 K1 O6 l" d
  32.         }) `1 k4 ]: l5 k1 h. a
  33.         if(video.src){* Z+ k/ ~8 q2 D, J1 P; w' I
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));5 N5 J: r4 g3 h7 S
  35.         }
    + A( Z/ z. |; ]
  36.         setTimeout(draw, 100);
    & W$ j6 @+ l4 }* u& A/ H2 Y
  37.     }) a6 f) R9 D, Q; U4 y' _! x9 R
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||: d# `. }# j( q% s
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    0 j9 M6 C% |: f3 V: b
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);( |6 e* ~" `; Y0 Z
  41. </script>
复制代码
  1. php
    ; c5 r- h. t. \( t$ `

  2. 7 M8 D5 R1 U& W0 }. _  P5 Y
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);# `; C7 I9 p( [  K$ J/ C6 o

  4. % s! |8 k& K; H+ n9 g& B3 s/ n0 k
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    , o9 M8 J' g; }5 f( S  b

  6. ! r! O! t3 a. P* u. p* M
  7.     echo "新用户id:{$request->fd}加入了\n";
    ' y2 C# G* ], L' P' D  k
  8.    // echo "server: handshake success with fd{$request->fd}\n";" j! D. ]9 f1 u
  9. });
    . ]/ K2 L8 |3 `  [! Y

  10. , r) o( m! d+ S* E( u, U# u
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {* w5 f& h. I' I* i" e2 q

  12. / y1 z6 p+ M1 J8 n
  13.     //循环所有数据# L) l. X7 O* E4 k7 b
  14.     foreach($server->connections as $fd) {
    : D6 V$ {1 F2 T( Y4 [
  15.         //返回数据
    ( F# c( _8 G' E! m3 n; w8 z
  16.         $server->push($fd, $frame->data);2 s6 U4 y& u9 }6 X
  17.     }  h8 g; J0 ~) z% J* [, K2 b

  18. ) D. M) M, }& F- Z/ J* W
  19. });. G4 H" F8 m- f/ ^& a7 G

  20. , u+ ^' n" C% `
  21. $server->on('close', function ($ser, $fd) {
      H* N7 Z8 C- _0 {) T  p
  22.     echo "用户id: {$fd} 退出\n";
    3 W# |2 |. W3 e0 v# Z6 C
  23. });5 J! v- Q9 [5 f0 d* ]

  24. + [! h8 {+ k6 [7 O0 n
  25. $server->start();
复制代码

( f% I. s; K+ c" Y
$ n' b# ]# O% D9 \
: N6 ?, j/ O3 _; @- b- O; `
$ Z2 H4 g! O( w4 U, p5 V; N9 M2 r( p* n# ~: {% o) M
1 T8 v, j% p" X7 q. @
( P6 e3 w/ _6 f( [  P% I# ]

- [( b7 n8 N3 H9 u( t: ~( T" t  y7 T% l& ?) E7 ?8 n) P/ @

3 x5 F. M" N% W3 i  q# P& @  @( ?
) Z, O' a& @. l/ v4 W6 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 11:04 , Processed in 0.107037 second(s), 21 queries .

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