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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[swoole] swoole视频直播(记录用 未测试)

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-29 18:53:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
服务器代码- H! t/ I1 v. I- e8 w
  1. $serv=new swoole_websocket_server("0.0.0.0",9501);7 V* ^" W4 ^1 q' R5 [9 j
  2. $client=array();6 P/ C/ m3 f- q+ h8 A$ v
  3. $serv->on("open",function($serv,$req)use($client){
    ; q  @& @, T4 @) M7 R6 ~# `
  4.         //echo 'connect'.$req->fd;
    ! U  ^( l( r) L# r
  5.         $client[]=$req;: u$ x& j8 M- ]6 ]( j
  6.         //var_dump($client);; ^" Y% P5 b. D: x  Z# t' X
  7.         $serv->push($req->fd,'aa');
    * R$ ]" U$ [- P) q+ k
  8. });5 Q# i9 u- Y" i6 b8 N; v

  9. - V( c/ [. o1 A! {# T2 N  ~: `, v7 P' L
  10. $serv->on("message",function($serv,$frame)use ($client){# V( o4 ]* L7 ]- v
  11.         /*var_dump($frame->data);
    ' B5 c  k8 t, q, k! z
  12.         foreach($client as $key =>$val){
    . X6 r7 g3 L9 Y1 r6 G0 g
  13.                 $serv->push($val->fd,'aa');; ]* L9 m1 n/ ?2 B: U
  14.         }*/
    . M% M) N2 s" s
  15.         $client=$serv->connection_list();
    + Q& L2 n7 X% U1 \
  16.         var_dump($client);
    + Z! I6 B! ^% t( D% t6 {8 \( G
  17.         foreach($client as $key =>$val){
    , n" q0 }( e2 h% b, X) w# q. O- O
  18.                 if($val!=$frame->fd){/ @0 y6 K8 a# [: N. r$ |
  19.                         $serv->push($val,$frame->data);
    . G4 L2 _. M3 E- ^* ?  M' j. m) q# u
  20.                 }% ~: k6 `- V# n' f0 D
  21.         }) V8 @) @5 K1 e' T4 U  Q
  22.         
    1 C9 M# ~5 @, I7 z/ F
  23. });
    ( o8 v: W, W, G2 G1 g) S

  24. 4 O5 B: N: T. e) w: B4 C8 l1 R4 s
  25. $serv->on("close",function($serv,$fd){
    ; F9 n: |9 D, z5 {: V  R
  26.         echo 'close';
    . [# I# _# f- Y! ?4 T6 F% P5 p
  27. });
    . L4 r, H7 V$ d' o7 O6 |7 W
  28. , M  j/ t: n0 {  C5 Z4 I2 o
  29. $serv->start();" R. y, `3 _% w% S
  30. $ d) }  Z8 j9 P
复制代码
主播客户端' o% H6 ^$ {- e
  1. <!doctype html>8 a2 J0 S  w: V1 |
  2. <html>% K( j7 d: G; {! v! @1 [. I
  3. <head>$ ?/ \6 N4 q, |, W5 a0 A6 y
  4. <meta charset="utf-8">
    * N; N/ @6 `- i% e; B
  5. - Z! s$ I8 f' X. a6 b0 _: P7 O8 q
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    9 A+ m0 m9 j2 J6 B! V- M; ^
  7. <title>404</title>1 X6 r* D  A2 H( V, M6 ?4 ?
  8. <style>
    4 @+ e6 t4 v7 |. _! e
  9.         body{
    0 p# z7 Q. B7 J( v5 ], u
  10.                 background-color:#444;6 [6 F4 ^/ f5 A
  11.                 font-size:14px;
    ( c) z" C! X6 E" E
  12.         }
    4 `# A; F1 c* \8 T5 t5 `' `
  13.         h3{
    ! o$ @2 {: @' `0 E
  14.                 font-size:60px;( E2 p, u! {  {# v/ c; O* r
  15.                 color:#eee;8 t* J6 |7 \( p& L. l
  16.                 text-align:center;
    : s( \" t5 ]( ~4 |- J# V
  17.                 padding-top:30px;3 V5 o% q/ `$ R5 n1 |$ A
  18.                 font-weight:normal;1 J$ @) G$ f6 A" u( W+ E
  19.         }: @4 u' R! x! O; z
  20. </style>
    ; q% ~% g0 r- X" ]7 f* o. w
  21. </head>
    2 A' C6 h+ W! K$ K+ P; ~

  22.   D/ Q' q- ?# H6 P
  23. <body>) U$ ^7 A! {5 H
  24. <video src="test.mp4" width="400" id="video" autoplay="true" controls="true"></video>9 \$ l6 x+ n2 W! ^, f
  25. <canvas width="400" id="canvas" height="400" style="display:none"></canvas>
    ' D6 z* s' T2 k
  26. <canvas width="400" id="canvas2" height="400" ></canvas>& N  A  h5 T% y! V7 Y3 E
  27. <script>
    ! \" Z) ?# K1 h. ]! \& J: A5 W' e
  28. var video=document.getElementById('video');# r  \; X% v4 B
  29. var canvas=document.getElementById('canvas');
    4 j  ]. r  Q( l! H( l1 @. q, `! x
  30. var canvas2=document.getElementById('canvas2');/ I+ f8 v2 I; r4 R5 H
  31. var context=canvas.getContext('2d');
    ) ^$ g+ D0 o6 C6 J, \0 s) f
  32. var context2=canvas2.getContext('2d');
    % ^& ]# @2 A( a  {
  33. function draw(){/ N% W. D0 r8 }# a4 Q3 c
  34.         context.drawImage(video,0,0,400,400);* X. u9 t4 k7 V5 U* e
  35.         ws.send(canvas.toDataURL('image/jpeg',0.8));
    & i& H9 {4 p# o2 c+ P
  36.         setTimeout(draw,800);9 n: u# \$ b# A. f! ^
  37. }
    , }# ^6 ?- J0 [- N6 `5 K- K
  38. & K0 z3 h3 `5 G( r6 a. d2 s
  39. //客户端跟服务端通讯& v4 V; d) t4 e
  40. if (window.MozWebSocket)
    4 b; {2 Q8 R' H8 A$ e* C, k
  41. {# D2 V/ O' `6 I' i; U
  42.         ws = new MozWebSocket("ws://182.61.42.187:9501");8 j. S  ~# J1 L3 X' Y# Y" X$ ?
  43. } else
    8 b2 n8 D- X9 `  ]9 i/ z3 a
  44. {
    6 W5 [. h) g* A" `- q- ^
  45.         ws = new WebSocket("ws://182.61.42.187:9501");
    0 c3 i. {, J; x. n3 U1 k, I  l# d
  46. }; u. q; N' v% t, j, q6 E% x

  47. ; P: [! i  ~% t+ l4 ]
  48. ws.onopen=function(event){/ k, o: c# n5 R3 T, T) w
  49.         alert('连接成功');; ^1 s( v' {2 E1 N* Y0 @
  50.         ws.binaryType = 'arraybuffer';
    * b9 G8 L  u$ B; J0 j0 b
  51.         draw();
    : ~  a. t5 R- P9 `- O
  52. }$ y3 L4 M+ r# c
  53. ws.onmessage=function(event){
    " s! T. m) J$ W1 l1 S
  54.         //alert(event.data);" J+ h. d5 \0 T4 [" z5 `( O
  55.         //ws.send(event.data+"client");
    2 y4 N1 l3 c! y4 w+ V
  56.         qrCodeImg = new Image();% [! e. V7 X4 }/ t3 j) J0 x
  57.         qrCodeImg.src = event.data;
    # j2 k4 n# d+ a3 g! H
  58.         context2.drawImage(qrCodeImg, 0, 0, 400, 400);
    - j/ o& ?  u1 }+ f. Z' U; {  p
  59.         
    % w4 _. \) ~! B3 Y+ G$ J
  60. }
    1 x) h4 j! A' u/ G/ M
  61. ws.onclose=function(event){1 H9 {8 r( j: [7 n$ ]6 X
  62.         alert('close');
    1 \* X3 m% {3 k; R0 t
  63. }
    ( l$ J% v9 H+ t
  64. ws.onerror=function(event){) b: t" f5 T8 n3 z9 A7 \" f
  65.         alert('error');
    6 Q9 p/ w- i2 Q$ s$ }% x
  66. }
    . n0 K/ m! P7 `6 Q/ Q7 d+ [
  67. //video,标签模拟视频: r; ~3 n3 X3 E( g2 }) O

  68. ' ?, S  p" j$ v; V, n8 C
  69. </script>
    . D& x) d$ `& }, U
  70. </body>
    * `) z+ O$ M2 ~. z+ D. t* B
  71. </html>4 ^$ H! ?; `3 y  W$ }" l. u
  72. 4 o4 W# n/ P4 L# D
复制代码
客户端:
3 Z% D2 S; ~, I4 B. C+ q9 j! b8 i5 S
  1. <html>7 l# v9 z2 |8 k  K% {, j$ I
  2. <head>
    : J" h) A6 |5 R8 q2 B( y$ U
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8">, P& q  v/ W" V; [$ {% B
  4. <title>客户端直播页面</title>
    : C7 E& x/ g! V/ k' @# p/ G
  5. </head>: ~/ `9 V4 L; U: T3 a/ A: |% Y
  6. <body>
    ) O) Q* K8 O7 P  Z. }3 ~/ G. o
  7. <img id="receiver" style="width:720px;height:480px">
    $ @9 N7 Q# J% k4 w5 W
  8. , [8 \: x. n6 w6 n3 U) b( D
  9. <script type="text/javascript" charset="utf-8">
    ! S* H  p. L* f0 s/ l, e, Z
  10. var receiver_socket = new WebSocket("ws://182.61.42.187:9501");; [- Y8 L1 m* X7 O
  11. var image = document.getElementById('receiver');' \. N' [* _& @# X
  12. receiver_socket.onmessage = function(data) {
    , t! _7 V& T( ~# p
  13.         console.log(data.data);/ L4 p& A0 K3 Z) k: H. Z
  14.         image.src = data.data;
    ; c" J. J/ ~' R% w1 a: I( ~
  15. }
    / q2 ]: o6 m! {. E0 Z
  16. </script>
    ! \: e* `. }) z$ Q& G- `, g4 ~
  17. </body>. K  U! n- Y: C( p; a$ n9 Y
  18. </html>% B2 h+ O0 v) @5 v  N2 E

  19. 6 }. {9 S" {/ ]( e8 O7 F
复制代码

9 {0 D; C) f2 _/ H. e' p) p- I2 ~3 |1 P6 {" h. v2 q+ W
+ [% w; {) o  G9 I: C

3 S7 L  [; j3 M; E! J! }- v8 q) w

( W# N/ U& |$ j& q7 M9 Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 23:07 , Processed in 0.092055 second(s), 22 queries .

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