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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket& y# z) b  Z7 }2 W) i4 W
上代码
前端
观看页面
  1. <script type="text/javascript">
    # w$ R# o4 @3 `3 y: i7 q
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    9 r# S9 Y$ Y2 x; j0 E+ Y6 A! s7 U

  3. 6 }$ a: D3 o* I& T
  4. ws.onopen = function() {
    / Y1 r3 t/ T  g* f' h
  5.     console.log("连接成功");
    3 V+ W4 k* J+ i9 q$ X+ v  ~
  6. };
    9 Z% q3 O$ H- y5 u  s# e8 ^
  7. ws.onmessage = function(e) {
    : h+ T( J* D2 y( Y0 g* s* c
  8.    console.log(e);
    & I! i/ P. ~- n1 N  o
  9. / ]5 g. D; i; d4 l4 _2 F- ]$ @5 y
  10.    var data = e.data;
    8 U) Q' J% t" w* a# {* U- N/ {
  11.    document.getElementById('player').src=data;
    # [. ~4 A2 ^6 f5 ?6 M: o: g
  12. };
    4 k9 M  Z/ o/ t( `
  13. ws.onerror = function() {
    . E3 g- h  J, t4 Q) |, Z
  14.     console.log("关闭连接");
    3 h- x9 [8 M; G: w$ |% n
  15. };) Z' u) x% ]( o3 u1 l
  16. </script>
复制代码
录像页面
+ R7 c8 J: g1 v1 P
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    , F7 T* E# ]! o: C1 |" r

  2. : h8 k9 V) ]- t: W
  3. 5 n7 Y1 g3 M4 w" r2 s7 D
  4. 5 n6 s; l. w( r' K0 u
  5. <script type="text/javascript" charset="utf-8">5 i* D2 f9 {4 F1 E2 w/ B7 j9 `
  6. ; Y: M' G4 f5 n( {/ t7 F

  7. 1 F9 Y* d4 E. X* g+ Y
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');1 |+ n, ]7 c4 M# j
  9.     //socket.send("嗨我登陆了");- r! O; p8 n, c2 G) P
  10. ! p6 W. U  {9 W4 [
  11.     var back = document.getElementById('output');# v5 K: _$ m) d
  12.     var backcontext = back.getContext('2d');
    ' P9 q8 E& U8 O8 y) B" l
  13.     var video = document.getElementsByTagName('video')[0];
    ; ?0 W( L2 |& Z) N  T+ w2 f$ X
  14.     % n; B4 f- X# C  t
  15.     var success = function(stream){
    4 H/ c2 e6 @% o$ X, t5 ]. c
  16.         video.src = window.URL.createObjectURL(stream);( o" V: ~5 W8 {( j( z+ M( D
  17.     }8 ?6 x; @2 x, J8 k) s' I
  18. " Z' B! g; G; P3 r8 B0 K$ _, f. Q
  19.     socket.onopen = function(){7 d8 p/ F2 M) [3 P
  20.         draw();
    4 q8 d2 Z. l. O# i+ M
  21.     }3 |5 i& S" p/ f! B- Y

  22. : M2 x1 e5 B- u2 t8 Z, D
  23.     var draw = function(){
    & G7 l9 C/ G4 v# \4 Z  C
  24.         try{" A* |* `9 h6 b9 Z2 c  g
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    . o: C5 g  A* a7 y6 e
  26.         }catch(e){
    # `+ X" B3 o8 O0 q, p
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {- E' A$ I  L7 t& h
  28.                 return setTimeout(draw, 100);% E, t7 ^9 P- q2 Y1 U, _
  29.             } else {; {- @7 [! L: |5 l' c& C
  30.                 throw e;
    6 r9 _+ |6 b7 l/ K2 |) p2 G5 d( x
  31.             }
    ' v! B% v$ I8 E/ F. [/ `! D  c" C
  32.         }" u, a6 Q" Y/ q$ H7 Z2 ]/ r& E
  33.         if(video.src){
    8 h1 p- T# [& F
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    , r2 N! v1 @5 e* ^6 e
  35.         }
    : }) M3 d. L+ v3 P- [& E
  36.         setTimeout(draw, 100);6 u0 b! _4 k3 ~+ H% P6 P" m
  37.     }
    4 j+ O4 a/ T6 ^! G/ _# {2 ?
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||7 ~/ r- c( U" e2 _
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    5 }7 P; [2 E* ^' J
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);% a3 V$ n: ?1 I& u0 p
  41. </script>
复制代码
  1. php
    " I+ x( X# N+ q/ M8 k9 D( q

  2. , ?7 k9 P' }# G* Z% j
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    . ?: ^* p8 _1 N1 s& v
  4. , _' Y5 m! Z6 f; v' c$ V# P% c' G
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    8 b  D" ~, H( A" Y1 Y5 L; ^
  6. + c' b+ [1 n5 A2 W
  7.     echo "新用户id:{$request->fd}加入了\n";4 Q9 }# A5 f* t8 b  u
  8.    // echo "server: handshake success with fd{$request->fd}\n";  g) G9 F& j9 r5 g2 e& e
  9. });
    1 u- u' W6 D8 a7 Q$ Z/ W/ I
  10. 9 e4 D+ {6 B8 I' X9 M: s$ U
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    $ z. [" Z& Y* Q0 i
  12. ( s3 l9 M, h$ |
  13.     //循环所有数据6 o7 j) y0 W& M0 K
  14.     foreach($server->connections as $fd) {8 S; k% O1 r5 D. ?% x! S6 Y6 a
  15.         //返回数据6 Z  V4 B. D/ q, _9 j; l' H+ G+ n
  16.         $server->push($fd, $frame->data);1 p$ K  r( O4 j' i4 e! w( S  a+ z! T9 U
  17.     }
    4 A! u2 H6 Q  R% k/ h
  18.   V7 ^, P1 ?, b4 o1 @3 j! D
  19. });
    2 W2 g$ Q. R4 H6 W. ~- E& u
  20. . x  V4 Z' x; H4 |% w
  21. $server->on('close', function ($ser, $fd) {) Y% U) h% L) n3 _; x, f9 l: Q" B
  22.     echo "用户id: {$fd} 退出\n";
    8 P0 t1 y  s8 d1 r4 I0 t% m% _
  23. });
    , [$ h3 w" a0 n/ ^% ^3 V) l9 e
  24. . P% d9 ^" R( K* B0 L3 U! H9 `3 g
  25. $server->start();
复制代码
& ~  v+ z( |: q( v3 i5 U

. K& I7 Y& [/ G7 J. n* p$ c! T1 U* {4 V1 R( C% x  R# o
* Q6 a& D' @) I$ Y4 K/ f* B5 V

  }! K8 s$ {' d+ e$ m+ [( Q1 F3 [! z( q0 ?9 T1 F
; u0 t: l3 h- m4 I. x' W

) H% c( n9 [! M! p5 r# ~5 c
* @) ?2 z- f2 v. Z$ {( E' U7 P1 }' p1 i- J+ V) M

( Z4 t% q& [$ h5 P. g: X0 b
9 R4 J$ _6 D4 M2 _( c! V7 s. z7 g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 19:40 , Processed in 0.050605 second(s), 21 queries .

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