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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket9 S, z; r8 x1 l! m4 l
上代码
前端
观看页面
  1. <script type="text/javascript">
    - ]* b4 ]: |1 T, Q2 Y0 F. `
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    3 D: m# S) [. h( a6 ?, X
  3. 7 {0 i+ M- j' n5 n- h0 a
  4. ws.onopen = function() {/ W" H' |. r1 }) G+ C8 e3 U- t
  5.     console.log("连接成功");  ?1 y. E7 K( X; ~
  6. };3 G  h6 b: e: i8 W8 ]7 r) S9 f
  7. ws.onmessage = function(e) {
    $ O% F  p" X! b% C
  8.    console.log(e);9 q: S1 K$ w& k. \6 z
  9. 0 x! I2 ]0 R( p
  10.    var data = e.data;4 P9 [6 o3 Z* y, [
  11.    document.getElementById('player').src=data;
    : r- R' t$ O+ C) C
  12. };, \# n7 n2 ]+ v
  13. ws.onerror = function() {
    ' [6 }  Y, x! {3 z- k! O) B! W" y8 q
  14.     console.log("关闭连接");
    + ~1 e" F% h# ]6 D/ s  L
  15. };
    % ~. q1 [/ O6 l
  16. </script>
复制代码
录像页面
$ v: e1 l/ y6 @& T$ t7 `
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    - l/ ]( c: d4 l' {. a; `( |8 E

  2. & _7 q9 l) l- a+ x& R

  3. # W" f& p) m% G& U3 y
  4. 8 c/ t  x& v5 L5 Y2 {
  5. <script type="text/javascript" charset="utf-8">6 d3 _9 D8 A1 e' C1 ]1 \- B

  6. 3 m' a% V7 P- X2 X2 S: X
  7. 3 m7 J3 k  o9 L" n) l8 S: l2 i$ A
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');: e& F3 L" G! e; B; _! k  s
  9.     //socket.send("嗨我登陆了");
    % I2 y& ~# Z4 ?

  10. . O8 K! d& \0 R6 ~" q
  11.     var back = document.getElementById('output');
    4 s6 v3 ~. S, q
  12.     var backcontext = back.getContext('2d');) f: u( Z8 Q4 m7 n2 ^$ N- F  l  k
  13.     var video = document.getElementsByTagName('video')[0];
    6 a( k# Z+ Q9 O" t
  14.     . K$ y0 s/ v& |2 a7 y4 W6 r; Z
  15.     var success = function(stream){' d# ^$ V5 ~2 ~- ^& \6 g( N, H
  16.         video.src = window.URL.createObjectURL(stream);& z; z- a8 S2 `9 `1 x
  17.     }+ ^8 O+ W/ I  h: U, Z

  18. : B9 Y, M8 q! w* F3 ]9 G0 _
  19.     socket.onopen = function(){
    & c. Z1 `; }$ z# o  X  F
  20.         draw();% b' [  \5 H9 Q3 ]# c: M2 n
  21.     }
    ; i5 y) |" X8 Y2 C- d2 ?( f9 b

  22. 3 ^' F3 s# W; }. L) n. X
  23.     var draw = function(){
    1 {2 K: y* c3 ]. K9 A
  24.         try{
      h1 R: s9 m2 w2 h; M: k
  25.             backcontext.drawImage(video,0,0, back.width, back.height);; h* e# ~0 H& V3 I+ b
  26.         }catch(e){
    & ~; V  Y+ l( h8 u
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {7 n* Z, e: A/ g* ?# |: h5 f
  28.                 return setTimeout(draw, 100);) U- E( [' K1 {" v- M
  29.             } else {
    9 Y  W) y: U  m' o' Y
  30.                 throw e;
    3 P! o) o9 w3 n. m: n6 Y
  31.             }" v4 Y5 j; g: f0 \1 z/ x' `4 }
  32.         }
    6 C: c* [6 `7 \/ _
  33.         if(video.src){% l9 R* W6 r, i4 w3 s2 @) `
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ; ?2 }9 Z% W  d, U0 A+ g1 z
  35.         }& m2 {! Q% z; h/ L
  36.         setTimeout(draw, 100);
    3 v6 d9 H! b' z+ |7 m. `( ~- B
  37.     }
    ! J. Z0 X# A4 H2 X
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    # Q% v0 |& J: L- `9 @
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    8 r) o9 n* G8 F/ d" s
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    1 \0 X$ r* u4 P
  41. </script>
复制代码
  1. php
    ( s) ]. C# t$ s) q. V, ]
  2. 5 N4 y- J7 a4 X4 Z1 ^2 L6 o
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);- R/ f$ F! w( T

  4. " Q+ K6 ~. t5 ~% U* G
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    * {+ m! y. {/ G0 I. e: A
  6.   o- \3 N5 |1 y) x8 D0 W
  7.     echo "新用户id:{$request->fd}加入了\n";
    ! b! X9 h) A; Q" a; F  _& g
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    - ]- f/ Z( z. t& [
  9. });9 |& L' X% {6 K* [& C5 Y

  10. 1 `2 @8 N! I# d! \: E1 d% |
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {/ Y0 ]' n0 t; D: n+ d

  12. 4 a9 |5 O1 |) N- f* w4 ~
  13.     //循环所有数据
    % Y9 w$ }* s) y7 U$ K  t$ b0 m. C
  14.     foreach($server->connections as $fd) {
    / }% h8 d8 e8 h& h- p% |; S
  15.         //返回数据
    & `, ~9 U6 k8 y/ s7 G
  16.         $server->push($fd, $frame->data);2 W( Y* \2 I+ |/ Z( s. m
  17.     }" }  {1 ]- M! B: L6 n9 c8 O

  18. - M. Q  f5 n5 P/ h: L
  19. });
    2 b' n2 O0 B8 q
  20. 5 ]: p% j* m4 Y7 u1 U% E
  21. $server->on('close', function ($ser, $fd) {! T$ Z  o! P/ a5 K3 z
  22.     echo "用户id: {$fd} 退出\n";3 j' H) J& [6 \2 L1 t
  23. });: T4 j" q( l+ T& }! f

  24. # E& E+ m- _7 h9 \
  25. $server->start();
复制代码

: L  X" d3 h9 c6 M( Y9 j% M2 T
8 g6 s% r, F" P9 {, D7 \) q' J: D- l. B5 s& F. X, h$ a, B

) E- H2 u/ m  u! ]% J; w7 T1 ^7 S/ o# M3 g" U
- C/ r& ]" c9 L1 Z8 ?! P4 h. M8 ~

9 Y2 x3 T& w, v: D! m$ Q( G+ U1 L% y( h8 l

$ d6 h, m9 [6 w
5 n4 L: z* ^6 m* p3 t- g6 f& V$ x! v: `2 o0 V/ p9 x
6 C9 F! L! r1 t$ [) z/ E: S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:57 , Processed in 0.069096 second(s), 20 queries .

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