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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
. q3 \# m( j7 p+ |7 s- U1 j: N上代码
前端
观看页面
  1. <script type="text/javascript">  S/ ^7 M7 B6 C4 I7 D8 C# L5 A3 E/ p
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    . [& J6 r5 D# \. a- K  E3 S! m
  3. / D) R: Q) p  F% ]. A* L/ k
  4. ws.onopen = function() {' N5 [. p" F% X. t9 M) o& a
  5.     console.log("连接成功");' M7 I8 T/ h) W  n9 k* c" a
  6. };4 ~# G- \8 C" X% ?/ x2 j7 o
  7. ws.onmessage = function(e) {
    ' ]0 C) `8 r: Z! N
  8.    console.log(e);
    ) ~( _2 @/ ]3 p# [
  9. , t: E# L8 v9 b, D& d- e$ U9 q
  10.    var data = e.data;
    ! l  J( [) |( M% @$ L
  11.    document.getElementById('player').src=data;
    , F5 N7 N; d; m2 Q+ i# _$ L
  12. };
    ' p4 y7 m8 |4 z  J  Z2 e) y" X: ^0 d. B
  13. ws.onerror = function() {
    ) O' Y0 ]. o) M& C
  14.     console.log("关闭连接");# G; [- ?! a* y, `, z; r% |1 B' \" b7 _
  15. };% G" g' q6 `) J; |+ C
  16. </script>
复制代码
录像页面
& w5 `  V1 i' F8 ~
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>2 S5 s( S4 ~3 Z/ u
  2. ! w. X6 J0 C- T6 j

  3. ) U: Q9 L/ r; Z3 r' `; E9 N

  4. 6 \9 _8 v& b0 _* R0 A
  5. <script type="text/javascript" charset="utf-8">4 s: U) q7 a9 S* S

  6. % K/ b% ~- T5 q- Q

  7. / h: i: U" ^& g- a- ^! J
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');( W6 g8 f1 j$ n  C
  9.     //socket.send("嗨我登陆了");
    ' ~+ w% @+ k1 {( g3 J5 I7 ~" Q
  10.   a: }# w( F7 k$ F: I/ n8 u
  11.     var back = document.getElementById('output');4 a' p4 \7 |7 d/ [9 A
  12.     var backcontext = back.getContext('2d');
    . q1 I6 z. _% G" z, J+ L1 M
  13.     var video = document.getElementsByTagName('video')[0];) R* d' u7 d0 W6 p9 Z: }$ K
  14.    
    + f" N' g' M, j1 D5 z8 G8 m" [
  15.     var success = function(stream){
    - M  {+ l) i3 m& D2 L# `
  16.         video.src = window.URL.createObjectURL(stream);
    $ m  R+ V+ r) I( @( O  a( |
  17.     }1 _6 h- {. n( `% O) J& j
  18. " R: u) A& {2 {* \6 w1 D
  19.     socket.onopen = function(){
    / m6 s" S* t: |; D
  20.         draw();2 k8 p0 ^+ i) K# J- b
  21.     }+ j# L' v* J, T, V& K. Q; X
  22. * E! K8 h2 l# {7 i% G/ r  q' V) K, Q
  23.     var draw = function(){! y4 G& ~9 r0 K" \
  24.         try{  E* U  S9 |" q) y  P
  25.             backcontext.drawImage(video,0,0, back.width, back.height);  M+ q$ d1 `  z1 A
  26.         }catch(e){
      o3 m1 a( g; W: ~& h; G& h
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    + K- M/ }! J& @; Z9 e! y7 o' i, ?
  28.                 return setTimeout(draw, 100);  l0 ~% N2 j+ I& C# ~
  29.             } else {" i* \2 a- C2 S
  30.                 throw e;, u' f0 G8 J$ d/ s! U1 P7 \# W
  31.             }
    % C1 {5 ^2 J- ?: ?/ y( Z8 j
  32.         }, @7 s0 N& r" r: j: X3 z( _
  33.         if(video.src){! Y. i, k& B4 i# a5 B& h* ?. W
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    " e3 X# W( F, {$ L
  35.         }
    . C4 \/ z; F) X9 F, `
  36.         setTimeout(draw, 100);
    ; y0 J+ [$ R% b
  37.     }  h1 w3 S1 L6 I$ u
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||" j  D+ h' R2 y1 f3 V4 p2 |
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;+ y% k0 j- f" K& n2 _
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    ! m8 ]7 D$ k$ ?3 M  q
  41. </script>
复制代码
  1. php
    8 s* I! Z4 b0 z6 M8 {+ Q+ B
  2. 0 L7 }$ x& `( e: [- o: G- w! T3 K
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);+ d; }9 R3 W& ]0 r$ s3 [# M( n

  4. # ~' c2 l( b* v
  5. $server->on('open', function (swoole_websocket_server $server, $request) {) o$ @) P. v2 G4 t6 ^# Q( B' V
  6. ) I" r) J! G2 T' P4 ?
  7.     echo "新用户id:{$request->fd}加入了\n";
    3 Z6 q' Z! n. I9 m
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    ( m0 ]. A' h" t9 u# i5 x( Q$ ?
  9. });3 P: Q& C8 f' h7 r% {( h
  10. 3 I- {) z9 o  ]) G
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    ) }8 g2 ?, P4 x

  12.   o7 }  n, @2 o  d: u8 D# Y% ]# ?
  13.     //循环所有数据8 C" R( ]: d+ X9 v
  14.     foreach($server->connections as $fd) {
    6 c9 j- S* I0 f& L8 S
  15.         //返回数据6 @% D! C" c/ ]5 K. b8 ?
  16.         $server->push($fd, $frame->data);
    1 c1 a/ c/ ^  @% N/ o
  17.     }
    - S% H- I! `" ?4 u0 @
  18. + `  e) |, N' t0 A' c$ H! D
  19. });
    9 m: z5 Z! C& x9 ~) O' O# L/ {, L
  20. # u& X' \% F8 k/ ^" f( H. v
  21. $server->on('close', function ($ser, $fd) {
    5 F5 R# {" s  E: G0 C9 F4 {0 a
  22.     echo "用户id: {$fd} 退出\n";
    9 i3 X4 u' o: ?; J6 H6 [
  23. });
    / o4 R$ w! ^1 a2 \- e3 |: k; [) g/ l

  24. 8 Q% S0 {3 `2 ~" n/ M  q
  25. $server->start();
复制代码

+ u$ o* G$ v- _' G4 U, V1 I/ U. {& `
. d3 U1 s; i  f
9 U* t/ @1 u: T& r5 D0 b- c! a/ J" F( k- ~9 ]

( C& m7 s5 h4 R5 j& V" S8 f; K
/ M5 O7 h- j: n
/ S. l% C* z& s$ c4 G! l. ^- U, r# ^( {0 L

5 _$ f2 \6 U6 M) z) d' T/ O% Z
. ~- b. c/ g, M; {( g2 j+ S, T3 C  @2 z* {! Q4 F
8 c+ n, v, N$ ]. q& t* W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:14 , Processed in 0.054800 second(s), 20 queries .

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