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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket
7 o' C7 a! ]3 n上代码
前端
观看页面
  1. <script type="text/javascript">, ^$ a9 f+ q$ Q# v$ l
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    ) D0 P  Q7 ]' v# |( V# f

  3. * U+ y0 ]! s1 `7 a! `# t; F
  4. ws.onopen = function() {
    9 v  e) ~7 b6 x6 [
  5.     console.log("连接成功");
    . D/ @) u! G& t) R  G2 G# ?, B% o
  6. };
    ! L+ I4 x+ T7 M
  7. ws.onmessage = function(e) {
    - c( Q! {' K4 \3 K) D" a; l# H* Z
  8.    console.log(e);
    ! A+ ]3 \( z/ J4 M+ v8 L' T
  9. ' W, K- {- D2 N: ^, \' A) d' s. q
  10.    var data = e.data;! x4 h, N7 c: H" |, @9 @' r
  11.    document.getElementById('player').src=data;
    5 N& g6 a+ C' h! a9 r4 [+ K
  12. };, X1 ]5 _  U" j+ d# l7 C
  13. ws.onerror = function() {% W$ B- e: o) }/ A# f
  14.     console.log("关闭连接");8 z% V* ]5 {- i7 h+ I, M
  15. };
    ' a* X7 s- [2 ^+ y. H$ p' A
  16. </script>
复制代码
录像页面
, N2 H" u; O! b( _" [' z& m
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>: r6 M9 ~' ~, o/ F* U2 R

  2. ' S3 P/ ^# N* c8 w! t/ {

  3. " N$ \  g' q# k- w! `- M
  4. ; `3 I8 O+ o* Y! M6 `
  5. <script type="text/javascript" charset="utf-8">
    # O- [, `, L+ p, w7 s' Z) v

  6. % x0 u5 _# f' l2 ?* m' p
  7. & W7 T( }0 ?+ W2 p; e
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');( d* j. j, p8 q) C
  9.     //socket.send("嗨我登陆了");
    & s: Q, e/ f7 }4 a, h6 T$ I; g
  10. 8 a* Z& |8 _; D0 A, O0 A
  11.     var back = document.getElementById('output');. j' n8 S; I7 i4 z6 `" Q5 x; z1 s5 l0 ~
  12.     var backcontext = back.getContext('2d');
    % ]& ^' o3 l0 z2 ~, \& i
  13.     var video = document.getElementsByTagName('video')[0];/ K( e$ b% ^' v9 v* @
  14.     $ |0 a: |* Z+ Y# O) k" s& x
  15.     var success = function(stream){2 D- G  e9 ?, N4 Z3 N! A
  16.         video.src = window.URL.createObjectURL(stream);
    5 H6 A+ M' ]2 C" F
  17.     }9 n# ~0 I% j: g! q
  18. ( k( K! l- K6 Q! H5 B3 U
  19.     socket.onopen = function(){
    9 E) @* j& z# h& c8 G- @7 p
  20.         draw();" G4 |- r: R1 h/ O3 I
  21.     }" ^5 Y; `4 ?' h) {/ y
  22. ' j) `+ G% }( ?* f. v! W+ m
  23.     var draw = function(){
    3 r0 S" ]3 V1 C( f! P
  24.         try{8 @3 L7 H4 C. H
  25.             backcontext.drawImage(video,0,0, back.width, back.height);1 D+ C: E1 ^! X  G  l* f* @" w
  26.         }catch(e){
    3 h# k. D4 X% O
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {* G2 O0 y9 v: ~8 h
  28.                 return setTimeout(draw, 100);
    / f! q+ V# n4 N" b8 g- n
  29.             } else {  I. Y" I, ]: V
  30.                 throw e;
    ' y2 q0 s$ M2 D( I: T9 k
  31.             }
    7 D3 s$ Z% N% |9 r
  32.         }' J, ~# S7 k# V' o0 K
  33.         if(video.src){8 d3 U) h2 {/ y% l: W4 c4 E. _
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));0 q: U  [3 q1 R: ~3 `
  35.         }' i: o; o" S! N* c  B
  36.         setTimeout(draw, 100);! J3 W! H$ Q' I% q$ H
  37.     }: o  }7 `3 n8 W& N5 `, v2 u( y
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||  p- h( n" w& P2 X) W9 R
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;; h) ^$ R, p# F* c& D  p
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    . l% p: G. U  E( l
  41. </script>
复制代码
  1. php
    5 c  d4 u! p5 s8 r3 R
  2. + r' w( u( N) A, t& \4 X. z
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);
    4 q8 u8 ~5 `1 n5 D3 P

  4. . O! A6 c( U, n' K9 l9 A- t% }
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    ' H/ n; ~9 f$ D3 `- ^- e

  6. 0 q) q0 a6 z7 S
  7.     echo "新用户id:{$request->fd}加入了\n";! E2 W3 ]& W. f0 {, L
  8.    // echo "server: handshake success with fd{$request->fd}\n";
    ! V, g/ l5 {8 B
  9. });
    - ]/ m' q. m9 H' N1 M. s0 G

  10. # B3 l! ]" d7 C) r
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {
    ) Y7 i8 w. p& M5 D1 Z" x, i
  12. 3 D6 V8 l3 y0 K$ c! s( A; A
  13.     //循环所有数据1 n  q. n4 Z: x/ o- N
  14.     foreach($server->connections as $fd) {8 t9 W1 A" C0 m3 Z/ a6 S
  15.         //返回数据. t" U4 p  z' O) t3 d/ K- ]7 y
  16.         $server->push($fd, $frame->data);/ m, F( Z& x" R5 `" F" a$ }; m2 L* F
  17.     }
    ! t' Q$ A# c1 Z& X' q4 y

  18. # R% {8 l9 o: c& U: `
  19. });
    . `9 z% d1 V* L! X- t- d. e' T

  20. / _6 h5 o: b$ u8 j+ x4 f( @7 t/ W
  21. $server->on('close', function ($ser, $fd) {
    , N8 Y7 l: U3 _7 G0 u; c6 N
  22.     echo "用户id: {$fd} 退出\n";
    $ h( f* U* m% G0 X) h2 N5 @! e
  23. });/ q- X8 @, a! w* l& R
  24. - u2 F$ M6 L1 b9 N
  25. $server->start();
复制代码

- q& n8 [) }6 w! @% I& ~  w: d
" `/ |/ g. ?8 B9 G" y3 Q; ]- F7 p% f2 T' |8 A) L

/ B& v2 {; ?) h" u
  M& A. E) a/ ^0 _2 e# b
1 u  N: D$ X) b- i  I. O
6 ?0 w0 Y: P8 f+ s7 H# v0 y. m6 a# J- G/ X9 r$ ]

/ L  `) |: j. P+ X4 e) L6 f2 i
9 X/ N& e. F: b/ c; @5 l- E, q
2 l. ~( X5 H1 z0 E9 M5 z# w
9 P8 t9 w' M* P  W+ e/ \, i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 07:24 , Processed in 0.052444 second(s), 19 queries .

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