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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
2 h6 c8 H* g) g% b; s" r9 p上代码
前端
观看页面
  1. <script type="text/javascript">- x! A, D1 |/ D* Y
  2. var ws = new WebSocket('ws://192.168.0.150:9502');4 u4 g0 ]' @. F/ a9 \+ y* D2 T0 y; a

  3. : @/ }' m3 Z  C( V2 y
  4. ws.onopen = function() {' F  {. s$ M: [; w0 M+ b3 g
  5.     console.log("连接成功");
    4 E$ N, G+ @. M/ Q: O4 ~) [" Y, n
  6. };6 N6 o% z) S# V& L7 V
  7. ws.onmessage = function(e) {
    1 K8 j5 u" N& v  f% o- a
  8.    console.log(e);
    , X+ S* u4 x3 d+ [

  9. 3 s, S' e, t6 l9 j
  10.    var data = e.data;
    * P6 s& Z6 b: ^, E& B8 O5 G4 x4 F+ \
  11.    document.getElementById('player').src=data;) B8 a+ |% x- I  K' n. c
  12. };
    3 ~7 m% K  t- z& |
  13. ws.onerror = function() {
    : F$ y# ~+ D0 I5 o
  14.     console.log("关闭连接");
    9 o5 l) y/ c( V/ k+ A' b( N
  15. };& m$ d9 c: p) I# u  y! u
  16. </script>
复制代码
录像页面
4 D% g( L1 W8 d( v6 S
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>$ T' j# V! |9 S4 u" t! q$ h! U
  2. % P2 L; q0 a8 `, n

  3. 3 X& c4 ]% i/ P; v/ F0 D

  4. : U4 d! [- l6 B9 m) ?
  5. <script type="text/javascript" charset="utf-8">
    ; }" f- j+ ^/ c3 a7 ]# o) P" W# [* q

  6. : X# R; r. m, [# X) C; v. j) e
  7. $ l- H& T6 X4 l4 g  P: H/ {
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');
    ! y0 {( C/ P' ~
  9.     //socket.send("嗨我登陆了");9 y5 F  B" _. B3 T# C
  10. " m0 @" }2 H5 G' V1 {, V( V8 I
  11.     var back = document.getElementById('output');
    & e$ t: D$ g5 m% h
  12.     var backcontext = back.getContext('2d');# h; o  E& _4 R! H
  13.     var video = document.getElementsByTagName('video')[0];, F1 ?/ j' z5 X- Q' z4 w0 w1 c
  14.    
    % w# `7 H/ \% q0 U2 f, f3 {8 d
  15.     var success = function(stream){
    7 P" m2 R' K+ L. Y1 m% ^
  16.         video.src = window.URL.createObjectURL(stream);% H* Z& y! c+ n& E) m
  17.     }
    , s  K' j: n" _/ u* ~* S
  18. , {& V! ^6 L2 O/ B" T
  19.     socket.onopen = function(){
    $ E( I, L+ L* J, e
  20.         draw();5 M+ R! a/ Y) b6 @( ]
  21.     }% q! u- P9 k+ h# ~
  22. # ~$ G: }, P9 p- F6 w- ?1 x
  23.     var draw = function(){0 e( b* c, t  h9 P) I% o* a2 Q
  24.         try{
    6 I! A9 \# o6 I& x! Y
  25.             backcontext.drawImage(video,0,0, back.width, back.height);* q- W% d5 S! L
  26.         }catch(e){
    " D! S, t( E1 y1 }0 k! w' @0 j& D
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {7 x$ t2 q/ |/ Y# [2 j$ S
  28.                 return setTimeout(draw, 100);
    # s3 [+ f1 l3 C. q
  29.             } else {4 W4 `7 \7 D# G: |
  30.                 throw e;
    ; H! k6 k3 T) ~
  31.             }  r) w' M6 \+ g. {; ~
  32.         }
    6 e+ g. J' G- S: M0 r/ A
  33.         if(video.src){
    5 y  _" h9 W5 D( [# A. q
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));6 T4 `! N8 [" l4 Q) O+ V
  35.         }
    % g4 i$ V+ H4 w, Y* S/ ^
  36.         setTimeout(draw, 100);
    / f* o' L( p2 `! T" q6 ?' q4 B
  37.     }
    5 \% K2 E# U2 ^% z$ ]# f
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
    " w/ z$ Y3 M( B/ I
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;( ~7 g! c6 Q& \0 L/ v% h+ q
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    ! Z) J8 v2 k* o5 O+ p
  41. </script>
复制代码
  1. php* }7 [2 n+ z% q: F" h. Z
  2. 4 o' a3 y% _. M/ P8 J$ F% J7 Q
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    " M0 M3 {! U6 F0 s: h
  4. 7 A! H4 {: L1 ^" }
  5. $server->on('open', function (swoole_websocket_server $server, $request) {- q. x% T( B/ w. H% m
  6. - p2 A# f$ i  S) O. F; z; r& l- V
  7.     echo "新用户id:{$request->fd}加入了\n";
    ) d+ k" d. w: y4 t, Q
  8.    // echo "server: handshake success with fd{$request->fd}\n";+ ?( p8 o. [9 O0 S# U
  9. });) I* j% h# Q% f1 H

  10. ) X- M7 v1 w, \% E+ l& M
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
      d# |6 z# F; g3 V+ P) J
  12. 6 k" d  _$ C8 Y2 B/ j
  13.     //循环所有数据: s; B" B* X; }7 ?
  14.     foreach($server->connections as $fd) {5 y1 [6 b! i5 X, A8 i, @
  15.         //返回数据
    $ D5 f; O6 Y. \  O' F. p" s3 j5 }
  16.         $server->push($fd, $frame->data);0 v- M' H. S6 f: u) L! l
  17.     }% f" A7 M6 W1 \' P8 ^
  18. " e' S3 h6 K  ~" a- V
  19. });- L* t! l* f4 H/ m7 j: ~9 P
  20. ! S+ I- }  O3 q9 l" k
  21. $server->on('close', function ($ser, $fd) {
    . I) H$ j0 P) b, W( |
  22.     echo "用户id: {$fd} 退出\n";
    ' M, v3 S/ r! o: t9 k' L
  23. });
    . `3 B4 T2 j7 n% F

  24. 1 C) Z; j/ I7 A2 s% ~+ I
  25. $server->start();
复制代码

, c- O" f  u# N0 U6 C/ E
" A1 k  I- L4 C8 s
0 ]8 g1 r7 M! J3 @
2 q/ [1 ^; G) m1 c' f4 ?& c/ j; G! q+ g2 a
: s8 `, l. J+ b, O' M# N
7 i' j: B! `5 ]9 u

9 t$ S4 U2 u& ^9 V  v9 H2 u
+ u. j$ f2 a1 P" ]6 {3 c* |# l
3 Z. W. a& y# R6 u5 F2 d
4 k- ]# E  d7 p; t2 }1 t
) ]4 r+ n( n: ]- d* M) Q6 g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 13:02 , Processed in 0.055854 second(s), 19 queries .

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