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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15898|回复: 0

[swoole] swoole 直播

[复制链接]
发表于 2020-3-31 19:41:34 | 显示全部楼层 |阅读模式
主要使用 webstocket# M2 d  d# h: ?( S& R! C
上代码
前端
观看页面
  1. <script type="text/javascript">8 t- D5 }, |1 C# s; |
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    6 j) J: Y3 I, m7 {7 `6 E+ Z

  3. ! u2 g2 [1 `/ L3 w
  4. ws.onopen = function() {
    " _+ [  J8 J! @
  5.     console.log("连接成功");
    $ m) z% `1 W. ]0 j* t, g+ z8 {8 ?
  6. };
    / R$ u% P4 V  W1 }4 i' \' y& H3 T  k
  7. ws.onmessage = function(e) {3 g, u2 k; X: K2 J0 N5 x! |
  8.    console.log(e);
    4 Y  A% w6 s3 I7 @7 q# T

  9. $ Y5 l! L: G5 _, S4 O0 {
  10.    var data = e.data;
    5 S$ @' Y# M* _$ J# Q/ Z4 R& r% L3 d  v
  11.    document.getElementById('player').src=data;
    ! Q# _0 I" o4 l8 y- Z7 `, f
  12. };% ?) \" A- U2 y$ e8 t0 d( B- v. k
  13. ws.onerror = function() {, f3 w% `. c7 Q1 _* F& x7 b1 a
  14.     console.log("关闭连接");
    9 t# y0 [& `" H4 ?, n. B* M% ?
  15. };# }2 M) R2 ^% @- u3 G
  16. </script>
复制代码
录像页面

) ~* M! f7 K0 j  D; u
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>* k+ v% m" }  K: J0 q0 S

  2.   T# \, C+ r8 U) K- j, k# b

  3. , V9 q5 M9 F3 i7 @/ }3 z- {

  4. , J+ o9 O% ?& ]9 b: X8 F
  5. <script type="text/javascript" charset="utf-8">
      F, S3 c) d" @8 J0 f* M' O

  6. # q4 p. O) y' P- p; _& c
  7. 1 Z6 L1 q' k, r& u' K. x
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');2 ^! [, S, C: Z& l4 @
  9.     //socket.send("嗨我登陆了");) [" x' d2 h0 x2 R
  10. 1 s) w+ ~+ i2 |8 X
  11.     var back = document.getElementById('output');
    6 ~6 t, X6 X% t- M0 w3 T
  12.     var backcontext = back.getContext('2d');& Z# E# u) i- }+ V" \9 ~: O' X& I
  13.     var video = document.getElementsByTagName('video')[0];
    3 ]5 M8 q( ^5 |0 J" p* ~& T7 T
  14.     ; B' k' U$ t! E  d
  15.     var success = function(stream){7 ?! t5 H# W1 Z6 g
  16.         video.src = window.URL.createObjectURL(stream);/ C0 w0 c# ^* y. {
  17.     }
    / O2 w) B. \4 ?6 F: b' @& h' v
  18. ' B7 {1 d  _, K+ _' v0 ]+ A
  19.     socket.onopen = function(){
    6 `5 L4 K- o, N2 r9 N: |7 e
  20.         draw();
    4 m1 Q! e; h$ \6 f5 ]
  21.     }
    ( F' c$ v3 m0 E* r. G( q7 c

  22. 6 ]  ~: a- f5 L* h. M
  23.     var draw = function(){( t# e5 ?' B5 L3 I9 ?
  24.         try{* r/ A7 L9 E2 O$ O) x7 x0 A
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    " V/ @. b7 G9 b) H0 D: f& p( ?
  26.         }catch(e){& h4 t3 Z7 B2 V  R
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {  d5 J; u9 Z# o! h( b1 J
  28.                 return setTimeout(draw, 100);
    4 |; E; E- U. x; q7 k
  29.             } else {
    , F1 U. o- u" t- v; e( \
  30.                 throw e;
    6 S& N' P8 f) D" _) r
  31.             }( z7 F8 _. @! |# ^% h' l) V4 Y
  32.         }4 q( h. D* a/ [8 r) V) ~
  33.         if(video.src){& ~2 [+ `) H# O# @
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));2 T  j( d2 Z0 d" }
  35.         }$ `( w1 T4 `% E4 ?( l9 c) E* W( u: b
  36.         setTimeout(draw, 100);2 N# f6 L% O0 G; }
  37.     }
    ) }1 [5 u5 P' V- R/ e
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    ; L2 B( n# i; M: G1 ~
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
      a6 l; W, C, ]
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);+ a9 ?# x' q( z, @3 ~
  41. </script>
复制代码
  1. php
    6 ^% I! o2 H+ q
  2. ( V7 P( g/ d1 P8 a& q
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    $ O( ]% f" D6 h1 S5 ?5 s
  4. ( r& }# P' C  B$ X4 B8 \! n
  5. $server->on('open', function (swoole_websocket_server $server, $request) {- X  a9 F& C9 {" ^$ q" m; A
  6. " U& Z. ^( r- [
  7.     echo "新用户id:{$request->fd}加入了\n";+ n7 p. d+ a8 [+ H) _4 I/ P
  8.    // echo "server: handshake success with fd{$request->fd}\n";" D" _$ j- C2 z
  9. });# R6 n# Y( e8 F) e# `
  10. # K5 N* M9 A: ~- z7 b3 \: ~
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
      h! ?# Z# c3 v$ w8 l  a: h

  12. " s4 q+ m' T5 c8 ?. r
  13.     //循环所有数据& I: X% H/ o# s
  14.     foreach($server->connections as $fd) {
    " ^& H5 |7 s- |4 `* l- r5 E
  15.         //返回数据
    3 l5 M" J8 N4 k; |+ [
  16.         $server->push($fd, $frame->data);
    1 n7 U. B2 S# ]* H4 W1 S7 B
  17.     }1 D4 r  T! Y. {, J% u

  18. 9 p$ D" \5 X2 O3 d: o: L9 a- Z* n2 q
  19. });
    : d+ ]1 U! b3 h
  20. 2 z0 W4 V& P0 {6 Q# C% C' X( b
  21. $server->on('close', function ($ser, $fd) {
    * ~8 n+ r: q" Q2 H$ Q
  22.     echo "用户id: {$fd} 退出\n";/ v$ @2 |$ j" y2 q# @& x/ \
  23. });. z4 s! G. U3 o& l/ S6 Z- y1 u

  24. / b3 l# m8 G) D! y+ G# j! b
  25. $server->start();
复制代码

0 o; [" W9 g# ]: q' q, A4 B; f  G% L4 X  ?1 V4 v

' i) N7 T0 z6 T5 \& {5 r# X7 @- `6 o# z$ ^. k2 t6 A5 M
9 T) ?- ?) G) x9 [

+ ?4 ?: G, s0 C
  @8 l: O/ v! b7 r& _7 s, Y
. j: B- }% e$ y9 @: r" y
1 o# r+ X. l: ~0 x6 ~6 |. l. I/ e6 x5 T; {4 n
( X6 d0 g+ h! E' B( o

- {) {/ @9 F2 ?/ ?" R; ~9 y
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-13 04:33 , Processed in 0.067768 second(s), 22 queries .

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