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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket9 \# d) `0 {  k
上代码
前端
观看页面
  1. <script type="text/javascript">- s) ~! q+ N8 M: K2 f
  2. var ws = new WebSocket('ws://192.168.0.150:9502');4 ~% L; {# n, t4 \* O! j

  3. 6 [% t3 C8 ]2 \4 i, N$ `4 Q
  4. ws.onopen = function() {
    # c3 T0 Q- a2 z6 a
  5.     console.log("连接成功");" [% d# g( Y) {
  6. };0 ?6 {% u, l2 H4 H" w" X$ J
  7. ws.onmessage = function(e) {
    . ?5 l, R9 k7 g, r
  8.    console.log(e);
    , A0 b! k0 |* x/ y2 V  y

  9. * G% G/ L4 ^5 m, e, g+ ]" C5 Q
  10.    var data = e.data;0 O* Z5 [/ p% m$ R# n2 D
  11.    document.getElementById('player').src=data;2 o; l2 T7 c5 `3 p) [
  12. };
    7 ]; z1 _6 H1 u% Y/ U
  13. ws.onerror = function() {
    1 g! E' h$ P- n' s
  14.     console.log("关闭连接");
    ' h5 I7 D, Y7 a  `
  15. };
    4 Q" P# l. N4 C1 T8 j
  16. </script>
复制代码
录像页面

# {$ i# r+ \$ ]3 `3 W* x
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>9 h9 w/ ?; i1 @
  2. . R4 r* @0 p7 X

  3. ) A& x. e; |, T4 h$ \. z; b9 M
  4. 0 A2 K; x6 g' M: q$ Q' _4 k# `
  5. <script type="text/javascript" charset="utf-8">) M8 |# W7 C3 _9 v

  6. & ]/ L5 Z# S, I8 P9 X! I1 t% i5 m

  7. ! ^4 ?) V" }' T# T
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    2 J) H4 Z/ u/ k. J) U
  9.     //socket.send("嗨我登陆了");
    . W3 a3 C3 B- e, y5 C9 j
  10. ' [7 z+ t& ?- K) z. R* }; G. K
  11.     var back = document.getElementById('output');
    3 `8 g  w0 m$ m5 |5 r- r
  12.     var backcontext = back.getContext('2d');
    / c/ l$ l' ~& m! n2 n
  13.     var video = document.getElementsByTagName('video')[0];* F0 ^7 E* u3 X3 [
  14.     9 x/ O* N4 P" F4 F7 q
  15.     var success = function(stream){
    ) H; w2 T# ~( x; v
  16.         video.src = window.URL.createObjectURL(stream);  p% L" ~  z9 f
  17.     }+ H$ z+ K/ |- g" z2 j
  18. 3 X3 d7 r: u. g+ h
  19.     socket.onopen = function(){. [% T  _1 P7 @$ W9 S2 B" O/ Q
  20.         draw();
    6 Y, N& X' p: C* n! V
  21.     }
    ' N# T9 v' C2 A  A
  22. ; ^: z4 ]1 T* Y& `$ v) c: C
  23.     var draw = function(){
    5 w; I9 h: R0 s
  24.         try{. y2 C1 s7 W2 \) {
  25.             backcontext.drawImage(video,0,0, back.width, back.height);  G/ }- J$ E9 s" ^: Q& l$ o4 h
  26.         }catch(e){
    / Y) i  r' ~6 l% U8 Q
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    3 w) E8 \9 ?  ^
  28.                 return setTimeout(draw, 100);0 |8 [6 Z) e* c2 R. W
  29.             } else {7 \! |8 ]( j) k! Y2 l2 ]+ j2 L
  30.                 throw e;
    . x$ ]# Y8 K9 Q
  31.             }9 t" Z# z1 Y  i) m, ?4 U
  32.         }
    ! ?* ?' n4 u" ]1 q, P
  33.         if(video.src){
    - N* u8 |. W8 T: s; l' Q( f$ T( t2 U
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    8 A6 C1 r% w' \% B' d$ B
  35.         }
      p/ q2 ~0 P% L! u" S( R
  36.         setTimeout(draw, 100);
    0 Q/ V, ^& w- ?2 s( Q8 G# j
  37.     }
    : S! i6 g( {8 L# b' W
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||- \0 ]& [+ l4 D1 O6 _
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;8 U, R" n: U& q
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    % r; O  ]6 e0 p, x, ^0 D
  41. </script>
复制代码
  1. php
    : Z) Y1 K& K) ?& }: {, B5 e
  2. 9 a! Z) O, o6 `; M, y6 T
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);( d  t9 L5 `9 q" n3 N

  4. , w4 b$ _" w% Z# V( o* l& `
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ( \4 H# P7 A- h$ Z

  6. ) H/ s3 W/ h5 N% ~" X  p
  7.     echo "新用户id:{$request->fd}加入了\n";9 k& R7 s9 [, c' {1 O- k) p
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    & T. r! ~4 }# U
  9. });
    & b- }  b9 ^& D0 A2 W

  10. 5 j# u0 Q1 o; D4 Y  r- D
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {* d1 X2 O8 |  P  t$ B
  12. 5 `8 A- ^( Z' r& ~7 g& C
  13.     //循环所有数据+ i" n) u! p0 w
  14.     foreach($server->connections as $fd) {
    7 J) F7 b) S. M- O6 F5 W4 z" N0 d: A
  15.         //返回数据
    1 K! d/ C( B8 S
  16.         $server->push($fd, $frame->data);  R7 B( Y) W: V; n
  17.     }6 z. t( E) B6 h6 M  l( U% p
  18. 6 U1 U/ i2 d0 S
  19. });9 D; K3 i$ }( x/ O- h/ V3 z* K! c
  20. , i4 U  k) y. `: L
  21. $server->on('close', function ($ser, $fd) {: D5 s* L! `: e( i
  22.     echo "用户id: {$fd} 退出\n";$ n: Z* s' Z* V5 D! R3 M/ f4 p8 r
  23. });; d8 z$ z% S+ y7 i- m

  24. 4 d% v9 e6 ?8 n( b+ ]0 _3 _% F" Y
  25. $server->start();
复制代码

( K' e3 {" }+ F, S+ h' X- _+ P  C: l) t
! c# D5 D8 V/ o. l0 J& C! S

4 e! j5 Q* ]- i/ o2 }: ~* q- Z& C6 L0 ^
+ Q* r& D: J6 d* _: R) B

. l& x. F( ~; \) t+ Z: P8 C$ T1 S% [
4 V  b; q- p  G
" A+ Z- x3 E8 `3 o; l  a
- E1 U) m# @  C, x9 }% Q
0 }2 e" q6 H" `4 S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 01:18 , Processed in 0.052810 second(s), 19 queries .

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