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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
& L+ ]2 K* `# g: g6 d上代码
前端
观看页面
  1. <script type="text/javascript">
      l; ]8 X& \3 _
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    ( I$ e. l& B# `( h) }7 H& ]

  3. : ^$ U* z. K6 i; h4 ~% u: l
  4. ws.onopen = function() {
    $ k' g4 b6 f+ \9 L5 C! q
  5.     console.log("连接成功");( _  T& x- ]8 I3 X& u% U# G( X+ B
  6. };8 T( m9 t  l& |0 C2 H% q
  7. ws.onmessage = function(e) {
    ; K: L3 ]2 t  `! O9 x
  8.    console.log(e);& t" i6 w8 r" u- r

  9. " E( `7 X& M/ k& J: M9 ?
  10.    var data = e.data;
    4 j. i/ g2 b3 I" l3 q* W. b
  11.    document.getElementById('player').src=data;
    4 G" Q9 W7 x% b5 l* ^
  12. };. n$ ^  k$ G8 ?
  13. ws.onerror = function() {" |1 g1 P  t& ?" F) q
  14.     console.log("关闭连接");5 s* z9 ^& I, |6 m0 J& o' ~
  15. };1 O  R5 \7 }0 X
  16. </script>
复制代码
录像页面
: q  n% |! W: U. F8 O' V- y
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>8 y9 b( e0 h6 K& `. n4 o

  2. 1 t2 Q5 ?9 x5 ^: |6 E' c6 ]
  3. ; Y4 v2 z6 k$ C/ r. ]

  4. " J5 o' K; f' b, A  T; P' @5 u
  5. <script type="text/javascript" charset="utf-8"># h& L  `& a- }4 |' R

  6. 5 b3 N- U7 x3 f' U  d

  7. 2 g% Q1 O2 i1 \8 O: L  {$ i
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');4 ~1 F5 h2 S0 b
  9.     //socket.send("嗨我登陆了");! \* x6 P  i  A: c. g
  10. 2 R6 x9 H" B+ u- F
  11.     var back = document.getElementById('output');
    8 V6 Z- i* A! V2 l+ S3 M7 V8 l
  12.     var backcontext = back.getContext('2d');0 f: Q4 g( L! N, Y
  13.     var video = document.getElementsByTagName('video')[0];
    # d" K# A2 |2 O* x9 V
  14.    
    % g  u  P. `$ h
  15.     var success = function(stream){
    9 ]; a1 X5 R# V' _" n2 Q* ]$ [
  16.         video.src = window.URL.createObjectURL(stream);) [9 A* A+ ^  @8 v
  17.     }/ \0 G# i% Z7 K% Y

  18. ; e+ T. z0 a+ \6 p# C  `
  19.     socket.onopen = function(){
    ) e# R6 k) J. A/ \9 n- V- H
  20.         draw();
    ! d/ I/ }' P2 g9 J; N( A! [9 `
  21.     }9 i, C% J- U# \4 P. m7 L) s

  22. / Z7 f3 S: s4 ?8 ]
  23.     var draw = function(){2 O2 n' ]; p/ w
  24.         try{
    & X8 {  z( K8 H9 ^- o8 I
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    2 ?8 D' Q( k) \! T8 ]3 {
  26.         }catch(e){1 r* V! @  {" y8 v1 m
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {+ _$ @$ M; V; J$ x0 e1 s3 v$ V
  28.                 return setTimeout(draw, 100);
    ' G3 o+ q% h' m( {8 k1 C! o
  29.             } else {
    + P" ], p2 k1 A# |6 Z  |
  30.                 throw e;
    9 h: h- G2 P, J* \
  31.             }
    8 n3 H! ?% H! W. J
  32.         }: G9 r3 |7 S5 X6 G
  33.         if(video.src){
    * R  s2 Y4 `7 U5 z" f7 Y# m
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));) `9 c+ @' U8 i, R9 N1 I) k
  35.         }
    6 @  g% A  }) ~
  36.         setTimeout(draw, 100);) ^3 L- p5 U% q' M) w; S$ J
  37.     }( v9 `; b% R  t$ v# H/ s% A
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||/ o, S" b! _' E" O, Y" [+ p+ ~
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;9 M( `0 Y, U/ R. [
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    4 y8 `' t$ p1 f" k. X1 W- ~
  41. </script>
复制代码
  1. php
    / S9 \* }4 K1 B, {6 B+ ?
  2. ; x7 X! S3 w7 M. [! |
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);' u& t' k# s4 B* K

  4. ) u8 c% I: r+ Y% V
  5. $server->on('open', function (swoole_websocket_server $server, $request) {4 H* g* J- t/ w1 L/ E- a: X

  6. & r* T3 U/ {8 h6 q
  7.     echo "新用户id:{$request->fd}加入了\n";
    & K% Z( O, L1 H3 U$ W5 E5 p! w" Y
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    # d" S" v! i$ o* q7 L! E
  9. });
    3 l2 R6 H/ t7 r1 {% G9 b% r! @

  10. # q9 I' [4 [0 h& ^2 k, H) {( d
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    2 z) z! @# N! \

  12. 0 D* s2 M$ U, H
  13.     //循环所有数据
    7 Z/ f# g: b. x/ `) K; U' I( q
  14.     foreach($server->connections as $fd) {$ Q, I) g- C* q. X& S! h
  15.         //返回数据, _- M2 }8 |: L% ^% ~
  16.         $server->push($fd, $frame->data);
    9 d! X; E4 s% v: A
  17.     }5 g% f; t- d8 l; H6 Z6 D  {
  18. 8 q4 b! l8 A) J) g# k
  19. });
    ' X) I! u' d" F2 u% ^
  20. 5 K7 H; P' v5 h7 f6 p& n7 O/ }0 M) `
  21. $server->on('close', function ($ser, $fd) {
    ; x* y# @$ r* @; U8 |/ X
  22.     echo "用户id: {$fd} 退出\n";+ J7 f/ Y; f, M8 C8 ~( o
  23. });0 i: `6 c) T& o. Q8 k% j

  24. * @! S1 z, V- V* B0 c
  25. $server->start();
复制代码
" M- B6 @; I3 s6 J9 V2 i+ x/ k

# v. [  v/ Z. T. N! a3 q
! C* H, }* a# V1 e( f
0 D. l0 ?( Z3 l7 n/ p  h+ K. M, K2 R$ |$ t2 y0 B- u
& j$ v# l8 f' ~

. d3 f# i7 L2 T2 D
4 O2 B; w, b- n" P5 o, l# o2 C+ H5 a/ l* |# ]
. G" [+ b; ^! v  M6 z
  |/ m, r$ ]1 f# X
* G' l( A. w' H+ i0 n. c8 W( K! e, `) K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 21:08 , Processed in 0.061645 second(s), 20 queries .

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