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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket# O8 t$ A# d: Y& A. d
上代码
前端
观看页面
  1. <script type="text/javascript">
      O0 t% h- c2 t2 v2 {% Y3 y3 J% ~
  2. var ws = new WebSocket('ws://192.168.0.150:9502');9 u+ n! l! Z" Z
  3. - L- a: W6 Z6 V3 d1 L5 I7 H2 \) W5 B6 |
  4. ws.onopen = function() {$ h8 ]9 \; V& g/ Q0 v$ S* V/ g
  5.     console.log("连接成功");& P: d) m6 y; H3 N' Y( q
  6. };( T- M; N5 P- k
  7. ws.onmessage = function(e) {4 m6 r& \( y  M% s
  8.    console.log(e);
    $ q6 N. f# ?7 }1 Y; c: A4 r/ ]
  9. $ L, q& y0 ]2 ]! k( K' {
  10.    var data = e.data;& a" e  m! t( b' y  R# S. r: f
  11.    document.getElementById('player').src=data;
    / x0 s" S! n5 V  v" V5 }7 l  p; \
  12. };
    . c9 T( Y: l7 X' S" r4 ~
  13. ws.onerror = function() {
    7 i9 W7 n: Y1 S" v9 ]6 k# k" r
  14.     console.log("关闭连接");
    3 R8 c0 v" T' K. S! W$ p# G
  15. };
    . I1 r2 H5 Y7 h+ \0 _" C
  16. </script>
复制代码
录像页面
5 g# {$ s0 a. F* ~3 ~  T: ?
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    ; e+ O2 ~2 k7 O

  2. 8 y, x% s, I* H& t% a/ o1 h
  3.   ]$ o. B' L; l* X7 h

  4. $ o$ q. o* P- W, F: w4 k
  5. <script type="text/javascript" charset="utf-8">0 e1 d# ?9 ^7 E+ I: j! u4 ]

  6. * o0 e! ^1 n7 s% u' a/ ~2 n% L1 r

  7. & @' N2 _% q% U  f4 Q0 t+ I
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    * n  k6 U! C1 }, ^+ V* h, G3 `
  9.     //socket.send("嗨我登陆了");
    3 p0 A- U4 ^/ l

  10. ' F+ k3 u+ t8 O3 W6 x/ \
  11.     var back = document.getElementById('output');
    ! [3 c! U2 p8 ]: J9 L# u
  12.     var backcontext = back.getContext('2d');- C, f- J: ]+ [& b, i) g
  13.     var video = document.getElementsByTagName('video')[0];5 q  }0 W7 a/ K% J
  14.    
    0 [/ ]- [% M3 t1 O% a( K; z+ @5 s
  15.     var success = function(stream){
    8 _2 I6 _3 w$ n( ?, p3 {/ l
  16.         video.src = window.URL.createObjectURL(stream);
    / i1 x, J, z4 S4 w" z
  17.     }
    7 N0 l2 {5 ?$ s/ F( q
  18. : V2 `. F+ j. v8 F, |9 b
  19.     socket.onopen = function(){
    6 ~& }) q& x1 s0 l+ c
  20.         draw();$ h/ d& k; s- t/ z
  21.     }" E8 A& E6 G3 Z- y& x* _9 r
  22. " ]  _1 d" F, h+ m5 c
  23.     var draw = function(){
    1 b/ f* c  o* I) u! @
  24.         try{
    2 L/ y4 D1 K4 w! J$ a% k( ]
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    6 D! ]' e& D& D8 X
  26.         }catch(e){
    2 B4 B6 b  z* T+ p# T
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    5 R. ?1 Q, u9 x' l( j
  28.                 return setTimeout(draw, 100);
    # e* [" ]! Q2 Y; p0 h* @
  29.             } else {
    - z5 T& H6 X, v
  30.                 throw e;
    : |4 v9 b7 d- r
  31.             }
    ) t/ Q2 c' @2 Y" n1 @) U$ A
  32.         }- @/ I, [* n- s- X
  33.         if(video.src){
    7 `# v; D7 Z7 q% |8 \  W
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ! R& W4 f- i2 B
  35.         }$ _8 [9 J# J& s1 @
  36.         setTimeout(draw, 100);' |  x6 e; M" ?; s/ z6 E
  37.     }0 k- r9 D& x' v- r
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    2 e' ?$ i, B- w! p* {
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;, ^: L0 L6 N  ^- q! l' K
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    1 l( k3 r) t* o( V% L% q
  41. </script>
复制代码
  1. php
    0 e1 h* k' l  y/ ]0 _2 Y7 I& R
  2. : b. q* f( H: Q8 Z& e2 k3 {6 Z& [
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    / w0 s# ^! b+ R7 R
  4. " M( L; ~, {2 l! t  }/ s
  5. $server->on('open', function (swoole_websocket_server $server, $request) {" e2 b+ H; a1 d' x
  6. $ f+ L4 s  ?( h$ O
  7.     echo "新用户id:{$request->fd}加入了\n";. p) ~, m( }! k3 a+ H& @+ D1 W5 o; m
  8.    // echo "server: handshake success with fd{$request->fd}\n";- c/ q8 k% `% r) T
  9. });
      Q% l( t" s; j* g. f! e2 P
  10. 5 m* S; m8 S1 u5 U; z) ^, ?9 z
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {( \) z( \/ @0 Y( G: C6 v0 Z' {
  12. 7 i* h1 b$ l3 |
  13.     //循环所有数据
    3 n4 ^2 J7 y/ |7 |
  14.     foreach($server->connections as $fd) {% ^! U' e; O2 L# S. Z
  15.         //返回数据, S& d6 o$ Y$ L9 w$ J+ E
  16.         $server->push($fd, $frame->data);5 U3 |1 w% i% K  x. t' F& R6 M
  17.     }9 u1 b$ N9 l; h4 C
  18. # e5 |5 I! @2 [3 s8 @4 q5 q' G
  19. });8 m5 N+ Y# V$ R. m' ~1 l- s

  20. 2 e) d# x4 R  K
  21. $server->on('close', function ($ser, $fd) {
    5 p  D+ m' d+ e6 [
  22.     echo "用户id: {$fd} 退出\n";6 D* ?2 C, p+ Y& n
  23. });
    : A" t% C6 n8 V1 E$ |# L/ C

  24. 6 b7 H# I- J+ w' R2 |
  25. $server->start();
复制代码

# A9 F, e% R1 n6 V4 J) M2 v/ {/ @. o
; e% F! H7 @/ k$ t% D4 D
( S! Q$ R/ t: J/ t

( C. h/ \2 O6 _; w" ^1 v; v" ~7 U* S

; `! R% d8 ?4 Z7 z/ s( D- `6 _$ {! u8 `9 B: J0 f
1 \0 i5 p# b& v4 g0 F2 ~3 |3 }, k
9 ~0 G$ N4 G  {! z
7 B& C: z4 Y8 E5 I# P
$ m' s8 y5 g1 X; g" b& `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 11:47 , Processed in 0.052112 second(s), 20 queries .

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