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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole 直播

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-31 19:41:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要使用 webstocket3 _. z$ ^8 a. a# k
上代码
前端
观看页面
  1. <script type="text/javascript">
    ' @% P4 ~( U( n6 i0 [% y
  2. var ws = new WebSocket('ws://192.168.0.150:9502');
    0 }' p: D- h4 G) j7 @
  3. 4 i) \. J/ P( [
  4. ws.onopen = function() {
    9 e& ^- ~# ?2 T3 U
  5.     console.log("连接成功");6 D/ X2 v$ ]0 d% o& Y
  6. };
    * O8 ^7 p8 \* O3 ?1 m' {
  7. ws.onmessage = function(e) {
    " Q- I; G; a- R; u+ Q! E0 P
  8.    console.log(e);3 b' u1 l% l0 r' p( V

  9. 5 d5 b7 ^  V% ~$ ?: H, o% O2 f5 R
  10.    var data = e.data;1 f5 ?; e. |( y- h- ?- r
  11.    document.getElementById('player').src=data;5 h- V" s/ v: c+ E
  12. };3 }" O/ |0 ^/ e5 `1 i4 {
  13. ws.onerror = function() {7 m2 E* l4 f  F0 e
  14.     console.log("关闭连接");
    5 S6 G1 S; Y% b
  15. };
    % E! C2 F8 b) t, }  U2 T
  16. </script>
复制代码
录像页面

4 s- `3 ?  e2 y7 r$ J
最好用火狐测试。
  1. <canvas id="output" style="display:none"></canvas>5 j! v. ~' @! W- b5 R1 v% G+ J
  2. * n' }  U: m$ L

  3. ) k( _3 z5 A6 p% E# S- q

  4. 2 I# H; \, @& x: [. `
  5. <script type="text/javascript" charset="utf-8">9 ~6 L% H" n* w( _7 O: n2 u
  6. % Q/ {6 m1 C3 K3 t: u/ Y
  7. ; B2 N. i- V, ?
  8.     var socket = new WebSocket('ws://192.168.0.150:9502');" k5 \% z8 {% j3 }4 N; _; |' w* A
  9.     //socket.send("嗨我登陆了");9 Y0 }$ r% R% O, `. a

  10. 9 k6 g9 L8 D* x) L8 p% f) D- i& j
  11.     var back = document.getElementById('output');
    * N0 u. ^( Y! }
  12.     var backcontext = back.getContext('2d');2 f( I& I; d' z* q/ [5 }
  13.     var video = document.getElementsByTagName('video')[0];7 b) J7 N4 Y- b
  14.    
    * D0 `6 h  y2 p0 W  H7 I1 r
  15.     var success = function(stream){* K( P  ?( B+ T4 B+ u, r. J
  16.         video.src = window.URL.createObjectURL(stream);
    $ [' B& M" b7 }, x0 d8 _; U
  17.     }% {; A1 _9 w0 w* k

  18. ! ^2 a7 |/ @1 D6 ^3 R
  19.     socket.onopen = function(){. K" b5 o2 ~/ S% \7 {- C' r
  20.         draw();2 L* A3 Q$ `2 A( R2 c# [
  21.     }, A6 R  F+ u( n4 @
  22. 2 D3 \1 T* [! Q5 G6 o# h0 X
  23.     var draw = function(){4 ^  z5 y; L( z# b* t
  24.         try{0 |+ L* C9 h( D, z& }! |1 `
  25.             backcontext.drawImage(video,0,0, back.width, back.height);
    ; W5 U! [( y+ X$ h9 W+ F# A9 }
  26.         }catch(e){/ y' L" Z1 a- P$ l! b
  27.             if (e.name == "NS_ERROR_NOT_AVAILABLE") {
    7 G* m$ q7 n/ {2 U" e1 f
  28.                 return setTimeout(draw, 100);3 r% ?' D( j' U# G
  29.             } else {
    5 _! Q7 q  \0 o: B* [% C
  30.                 throw e;1 k' y# n7 C  N9 Z3 E
  31.             }% G3 `( K5 M; J, v8 E
  32.         }
    . q/ ~+ O9 w% b, `
  33.         if(video.src){
    - A& D! ^6 P  w, D, h( I! F, ]+ x
  34.             socket.send(back.toDataURL("image/jpeg", 0.5));7 M0 D5 ^, b  i9 K, }$ v' x" R3 I6 G
  35.         }, g7 M0 j) Z6 ~$ ?5 {
  36.         setTimeout(draw, 100);' E3 b4 Y) w5 W  E
  37.     }  A4 A" s; N  L; x- k' S" T
  38.     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||6 d1 V2 a3 w% h" J5 r  p
  39.     navigator.mozGetUserMedia || navigator.msGetUserMedia;
    , L( }7 N/ u* c% t& [  x, j
  40.     navigator.getUserMedia({video:true, audio:false}, success, console.log);
    & u5 e9 @( V# }% ?0 z- Y; b# \) }! n
  41. </script>
复制代码
  1. php
    6 t3 i3 e6 z" O. `$ f
  2. 7 E' [* Y7 D3 r9 r, f1 {
  3. $server = new swoole_websocket_server("0.0.0.0", 9502);* U, [9 _8 [' N% @8 P, [+ @

  4. ! t# Z. x8 r% W, e7 B, E! l, K
  5. $server->on('open', function (swoole_websocket_server $server, $request) {
    7 @6 e, i  W# |- q2 F

  6. * \4 H6 y& K! A! g& R
  7.     echo "新用户id:{$request->fd}加入了\n";
    # }8 P  j# g+ c& \) a+ h
  8.    // echo "server: handshake success with fd{$request->fd}\n";0 h& o- N; ?. P2 y
  9. });
    - O5 L. [8 n/ M' u4 j7 D( G3 r, M+ h
  10. ! j0 @8 P. f! {( O2 S! H) n
  11. $server->on('message', function (swoole_websocket_server $server, $frame) {# _% T0 Y( }6 [1 O  m5 e. R  U+ `

  12. 1 s/ D& D7 q( U8 s4 D
  13.     //循环所有数据" i" t3 }* Y: \0 U
  14.     foreach($server->connections as $fd) {
    ; U  S; t8 _: O$ e
  15.         //返回数据1 Y; E3 @/ ^- k2 r% m  k9 z
  16.         $server->push($fd, $frame->data);
    . N& X5 L. M4 k% `" J7 y& ~, E& o
  17.     }
    ; ]# x, N# E6 C# x' V& p
  18. " U. G2 u; r( v2 ?+ c: m
  19. });
    % y- I# L! h9 ~1 I/ k" J

  20. 5 J1 |% [+ M$ Z8 ~
  21. $server->on('close', function ($ser, $fd) {
    ( j3 }* C5 V) A3 B+ I0 @. ]
  22.     echo "用户id: {$fd} 退出\n";
    2 @6 n9 T7 N0 q8 r% ]" G
  23. });
    & F) F* c: s3 x- {. g. Y# M8 O2 o' z- j
  24. 8 F6 V2 i3 i3 g4 f
  25. $server->start();
复制代码

0 j+ a* s* p) F! `! K  i/ e( f1 a0 K% ^: n5 a% Y9 o
/ ?& w; ~; X: c# _+ _8 D. ]
/ v5 w) `8 \& }6 Q; J7 _& l

4 s/ D# ~4 Y8 }" H3 a+ T" p) N
* E* L0 s$ m* I5 M
* K2 d  P, q1 ^$ m( o" V1 h, ]3 h

" H1 Y* O7 O3 [2 m. _& V$ D, H; {1 L0 B# h9 g0 z9 H* b  x+ }3 H
  I* q6 p- W1 C! P( g
: O, w" U, B' j! L+ {4 h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:13 , Processed in 0.056619 second(s), 22 queries .

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