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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
6 s: X  T& M9 p上代码
前端
观看页面
  1. <script type="text/javascript">
    & c# ~& f) Y4 i  q4 C, }6 y' n
  2. var ws = new WebSocket('ws://192.168.0.150:9502');: o* Q# a( y% h( |. F( A6 \/ P
  3. * ?1 S% n9 ?; V) B3 Z
  4. ws.onopen = function() {# D* G6 S2 G/ j: |
  5.     console.log("连接成功");9 |0 {6 m" G6 L" H
  6. };
    * \  A$ I  D+ ~! N# Y3 v8 ]) {
  7. ws.onmessage = function(e) {
    + S! J; S( S4 L7 X* Z% ?
  8.    console.log(e);
    ! K5 N. S* {0 N8 l! t4 ~% Z

  9. # E) o8 X& r' H/ d6 L+ M1 R" w
  10.    var data = e.data;, s" l1 {5 I- g5 R1 @
  11.    document.getElementById('player').src=data;9 b% C$ k, ^& C3 M: w
  12. };
    . p$ X3 `9 q( H: M+ ^
  13. ws.onerror = function() {
    9 b0 J0 o/ w* N2 f# T
  14.     console.log("关闭连接");9 Y$ j) H2 |- h
  15. };: B& a# }8 C9 f6 H) f
  16. </script>
复制代码
录像页面
$ n" s$ ~) |% O1 n* `' B0 |
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>
    ; Z9 E/ b/ [- m8 D9 `. D' n

  2.   P% S  D& Z; x7 y0 H

  3. 7 p( \% O" ^9 O. n6 B- B  j; }
  4. 2 W3 T% v1 `: e7 g  V1 I
  5. <script type="text/javascript" charset="utf-8">( y* k# X1 I6 o; @
  6. + q8 K6 ^$ g! l% r# T7 \
  7. 3 ?% L: p1 j) E1 K8 |
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    4 z/ B' w" h) ^0 d# f$ H! B
  9.     //socket.send("嗨我登陆了");* u/ k% |4 c- [$ k' Q2 Z* e

  10. , ^$ t) M  y) `2 M5 S7 Q0 `
  11.     var back = document.getElementById('output');
    + J: V# o* D( ^) H" X8 G3 l6 v/ e
  12.     var backcontext = back.getContext('2d');: l; I4 a7 T. F  S7 C! a
  13.     var video = document.getElementsByTagName('video')[0];2 \. I1 }2 U% i  r3 _
  14.    
    ( D9 |1 e. q1 S" A2 O# A0 I
  15.     var success = function(stream){2 a5 g' x1 I2 _1 ]
  16.         video.src = window.URL.createObjectURL(stream);7 w7 s" b" ]6 B. w3 M# h2 b6 [
  17.     }. w" f) A1 w9 ?! o; y: w+ S
  18. - L2 {$ M5 `" Q, G
  19.     socket.onopen = function(){
    0 k6 S+ ~. I4 L' R, w6 C0 o3 V0 H
  20.         draw();$ q8 K9 ^1 ~3 U
  21.     }* H2 J' `1 \# Z  ?
  22. " K  l, s8 t) n4 E, C  i
  23.     var draw = function(){
    3 f; F: R4 d- n' k6 c' R
  24.         try{
    & J4 u) l( K/ P
  25.             backcontext.drawImage(video,0,0, back.width, back.height);0 r! F8 \% S: c7 [' [- v8 R
  26.         }catch(e){3 A% I8 b6 [% O* @$ C$ X  _" S# x
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
      }6 b9 n2 V3 v  l/ o6 c
  28.                 return setTimeout(draw, 100);% t8 Y4 |( \  `1 T0 G, R; q
  29.             } else {
    5 m( {9 j" ^# p, Y4 y
  30.                 throw e;% J# [/ u  V" ?
  31.             }0 a) n5 J* }! t' i- |
  32.         }
    + E. a8 g# {& w* w
  33.         if(video.src){
    ! W& Z- g2 G4 c  U3 r7 z& R% ?
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));
    ( E; X9 N8 o4 l- s. z
  35.         }
    6 k, h5 q5 R! V: o2 \0 r7 T" }
  36.         setTimeout(draw, 100);9 _4 t- m3 O$ g  H
  37.     }
    ! c- [1 d& Y% j. I% U
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||: t7 K& P# R4 Z, X
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;9 g1 ]6 W- H) `3 e. U5 r$ y
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);5 v! |3 u4 K, Q. t& B; r
  41. </script>
复制代码
  1. php
    5 C) M4 z& ?( o

  2. 0 ?5 q( F5 b, C
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    3 h) ?; C8 W- w- y3 J

  4.   _6 i$ O$ q8 S/ u6 j
  5. $server->on('open', function (swoole_websocket_server $server, $request) {. d2 \3 i- k* R5 U% Y& V- }. T" u: J

  6. * @9 ~  ?" E  U% K+ e& T
  7.     echo "新用户id:{$request->fd}加入了\n";& F7 S* Z8 L7 o" N: E
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    : u3 j& _, x1 ?4 @  M6 l
  9. });
    ; p+ d4 S+ z# I9 Q/ \

  10. 7 F; Q; b( X2 Y, n+ Z
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {2 `: A5 z# X  f% w3 ?& u

  12. " C3 ?; ~! f- v$ _- T, m7 T3 J* J
  13.     //循环所有数据! n: g8 z6 |# A( b: Y; F
  14.     foreach($server->connections as $fd) {
    / J, `  T0 \$ W6 l% D+ q7 R
  15.         //返回数据
    - t& L: b& \0 ~( w$ P' P( V
  16.         $server->push($fd, $frame->data);4 B- |; E5 M; D$ q. e! @9 A
  17.     }5 i9 Q7 a# u& P# I2 b/ d

  18. ) @, v7 B. J# W
  19. });
    ; l( l0 \9 D: l. N
  20. ! w: G) `' Z) Z+ ^8 l* G. a% v
  21. $server->on('close', function ($ser, $fd) {8 U8 V! y" B6 y5 I
  22.     echo "用户id: {$fd} 退出\n";
    2 F# z/ G! L- ]( U, M+ K: O5 Q
  23. });" I7 f- W9 e6 F
  24. ( U$ M) c7 E) k+ ]
  25. $server->start();
复制代码

* {! k. f# C6 ~' D/ V) V; W, N
5 d  X- E' ]8 m8 b9 |! z9 n
8 V6 z% C1 M* I: L% p" d
4 S( Y: C# w, L) [0 |! s  i: a$ A7 x+ P

& h" Q% X7 s$ s
7 }( j% J4 e: r8 b" \! E  t& m( W" I4 s% r- K2 A
% ^- }- g! \. @* ~' K
: C+ u$ E6 Q2 s1 D4 G* R
! S$ r2 ~4 \! L& B8 a

8 }, x, _! `6 @3 s; p. }4 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 11:45 , Processed in 0.064019 second(s), 19 queries .

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