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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
) J- H: ^  a; e5 m( I上代码
前端
观看页面
  1. <script type="text/javascript">( f. ~' A5 e; v3 }8 N$ l, z
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    6 A# p* B; ]0 C1 X+ X3 t
  3. : F  ^! R8 A' S9 S: e8 M
  4. ws.onopen = function() {- r! B  E* R* q, g0 x
  5.     console.log("连接成功");
    3 [4 e( M  w. S/ ^+ @/ A3 m
  6. };
    * I/ w7 _3 L5 d" K
  7. ws.onmessage = function(e) {& p7 g5 e) c0 i$ e1 L1 `
  8.    console.log(e);" n# p& Z" x" {: {: L" H$ q
  9. 9 m+ G5 O8 S, q+ e1 H
  10.    var data = e.data;
    % o) {4 A3 M0 K- }5 `- q. g$ h9 z- P" z
  11.    document.getElementById('player').src=data;
    : l* w' `) N" Y# o% a. H! ]
  12. };
    - H! U! M5 t2 T8 l
  13. ws.onerror = function() {
    $ U6 Y6 K& E. Z9 ~
  14.     console.log("关闭连接");
    $ t- V  T( m, I, U% L$ V
  15. };
    8 o% j! y0 Z8 f  l+ V
  16. </script>
复制代码
录像页面

! i( J/ D1 G, \: P2 e
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    . @" b- d( a; n

  2. 3 z, E- a5 T2 G

  3. # G- Y6 R1 ^9 C) y

  4. 6 m& S. j) E6 q. _/ @$ }2 ^/ v' l
  5. <script type="text/javascript" charset="utf-8">
    2 Q! f$ }) F8 k3 G6 b2 K

  6. 4 N+ m3 m% v- o- v+ r
  7. 6 I/ n4 A. s8 p6 J# C, O
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    3 i! ^1 ~4 Z* {1 w1 ~# m0 d) ~
  9.     //socket.send("嗨我登陆了");/ S0 C3 m9 o; J. V. h/ |
  10. : X8 ^; s( w& Z' U" M
  11.     var back = document.getElementById('output');% `3 A( n& \/ n# I8 d4 I3 d( ?8 a
  12.     var backcontext = back.getContext('2d');
    , G" e2 d9 f) \! V" \
  13.     var video = document.getElementsByTagName('video')[0];
    5 Y) M5 }4 y% m- J
  14.       q/ }5 h; q$ O; f1 K4 ~5 g1 D
  15.     var success = function(stream){
    1 f1 ]& _# s1 m8 E6 N
  16.         video.src = window.URL.createObjectURL(stream);
    * _" h- |: K! X! O+ S0 V0 a
  17.     }
    ! ~1 X& u9 ?5 S4 L$ R- B; \5 G
  18. & q( c9 M3 O7 x0 H
  19.     socket.onopen = function(){
    3 w! T: n. F- P% D  t9 _
  20.         draw();0 M; o. Z8 g3 K1 Z  F4 b5 I
  21.     }
    0 i  l, h( Y+ I* [' d+ c9 N

  22. ( X& h) Z+ F! r6 A5 S5 I
  23.     var draw = function(){" g0 j# Y6 M( _
  24.         try{
    : N4 z/ A' }% @6 P* B: R
  25.             backcontext.drawImage(video,0,0, back.width, back.height);' c% d* J5 h0 M& h: |4 \: @
  26.         }catch(e){/ _$ R5 U; J6 Z# N  E
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {5 r; S, G0 ]4 Q  y
  28.                 return setTimeout(draw, 100);6 N; p# U5 \( Z1 ?; D
  29.             } else {+ a# S, P& _$ H- e
  30.                 throw e;
    2 H* {: M4 M$ R3 g4 Q! `
  31.             }( _5 ~& Q  f; k  A+ Z) X9 S1 Z! N
  32.         }2 ^, S8 @" D. L; U# S
  33.         if(video.src){
    ( x3 |! e7 p7 k! ]* m; \
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));5 N, O0 q: P2 [1 T& N
  35.         }. F& M6 z) p4 m' J
  36.         setTimeout(draw, 100);
    . k- P6 J* t  j0 ^" A
  37.     }: m0 H; Q- c- Y! {
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||( ?) u8 n" ]9 e5 E  u2 O: J) q
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    5 y4 _, p% m! x
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);1 R, g/ K7 {4 V$ a2 |
  41. </script>
复制代码
  1. php6 u- }3 x( \" ?. V
  2. . }8 Q& E: m! K6 C/ ^% d
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    ( S% M4 f) H6 E- l& Q( b* a0 ^/ i

  4. + ~7 \) Y: z# @' a+ d
  5. $server->on('open', function (swoole_websocket_server $server, $request) {# w$ ^; S$ k+ t$ C
  6. # r- k* T0 V# d1 U$ n8 J7 E' S
  7.     echo "新用户id:{$request->fd}加入了\n";9 s# Y; Y8 B) a2 x) {9 T4 r/ ]
  8.    // echo "server: handshake success with fd{$request->fd}\n";0 g5 O# q; R& j! l  h
  9. });
    . ^8 }3 q1 e3 I9 G

  10. & G+ y8 {& D5 R9 s# n% a
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {" O3 J( C: U, g$ n8 O- T. b) g
  12. , i1 [  f2 ^' \) d" {
  13.     //循环所有数据
    & ^8 _$ i1 F2 v9 F1 l# A4 `8 h
  14.     foreach($server->connections as $fd) {% @; H, X7 Z! s& Q, c; @
  15.         //返回数据; b1 V# y/ q7 \
  16.         $server->push($fd, $frame->data);
    : {/ l( ~5 ?4 c# U* q0 o
  17.     }0 d) S% m7 A, a: ^2 M/ H: O) _
  18. / X* ^" F! l. a) |1 B
  19. });
    1 n' \! n* x1 T  h  c4 m

  20. : E( G( P/ a2 Y
  21. $server->on('close', function ($ser, $fd) {8 S% |+ J. m. Y" }  Q
  22.     echo "用户id: {$fd} 退出\n";. W) R1 H# E7 F" S7 l: J
  23. });
    / k8 E. d, D" E# n8 s6 U
  24. - m4 E6 l) V" f- i8 ~: v9 }1 U
  25. $server->start();
复制代码

! z% w0 e- w! @2 B* w6 d5 Y# P7 y  u) p) J; p6 E

3 I! B8 T9 K) }7 o7 N1 L5 @! k( T3 U0 i- A0 B

$ ~( i, C- }5 M9 U" a5 Q, I3 I2 B" w( _. \3 r5 f
+ i8 w+ [& s% K) B" O) I5 c
- V+ a8 f3 z$ Q5 o- V5 L9 l
- N; L* K. ^( P
: J4 O! Y# `# q, J, K7 W
/ c+ U8 I1 m7 |) H3 [/ D

" c+ L, h* R$ B; i+ Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 14:51 , Processed in 0.114584 second(s), 19 queries .

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