StreamingVideo » Historique » Version 3
Mehdi Abaakouk, 07/04/2012 11:55
1 | 1 | Laurent GUERBY | {{>toc}} |
---|---|---|---|
2 | 1 | Laurent GUERBY | |
3 | 1 | Laurent GUERBY | h1. StreamingVideo |
4 | 1 | Laurent GUERBY | |
5 | 1 | Laurent GUERBY | h2. Solution N7 |
6 | 1 | Laurent GUERBY | |
7 | 1 | Laurent GUERBY | <pre> |
8 | 1 | Laurent GUERBY | From: Antoine Lubineau |
9 | 1 | Laurent GUERBY | To: technique@lists.tetaneutral.net |
10 | 1 | Laurent GUERBY | Subject: [technique] Streaming vidéo net7 |
11 | 1 | Laurent GUERBY | Date: Sat, 07 Apr 2012 01:15:55 +0200 |
12 | 1 | Laurent GUERBY | |
13 | 1 | Laurent GUERBY | |
14 | 1 | Laurent GUERBY | Bonsoir, |
15 | 1 | Laurent GUERBY | |
16 | 1 | Laurent GUERBY | Ce mail est un peu dans la suite du mail sur sur la Novela [0]. Comme on |
17 | 1 | Laurent GUERBY | fait du streaming vidéo à net7 (club info de lâENSEEIHT [1]) depuis |
18 | 1 | Laurent GUERBY | assez longtemps, ça peut être pas mal dâéchanger là -dessus. |
19 | 1 | Laurent GUERBY | |
20 | 1 | Laurent GUERBY | â Contexteâ¯: plusieurs fois dans lâannée, il y a des shows organisés par |
21 | 1 | Laurent GUERBY | le club vidéo de lâécole et on les diffuse en direct sur Internet. La |
22 | 1 | Laurent GUERBY | configuration actuelle tourne depuis environ un an (câétait une |
23 | 1 | Laurent GUERBY | acquisition vidéo analogique avant), et on a eu 75 spectateurs |
24 | 1 | Laurent GUERBY | simultanés pendant la dernière édition. |
25 | 1 | Laurent GUERBY | |
26 | 1 | Laurent GUERBY | â Schéma de principeâ¯: |
27 | 1 | Laurent GUERBY | |
28 | 1 | Laurent GUERBY | vidéo ââââ |
29 | 1 | Laurent GUERBY | \__ machine __[réseau ]_ serveur __[Internet]__ client |
30 | 1 | Laurent GUERBY | / dâencodage [interne] Icecast web |
31 | 1 | Laurent GUERBY | audio ââââ |
32 | 1 | Laurent GUERBY | |
33 | 1 | Laurent GUERBY | â Machine dâencodageâ¯: une carte dâacquisition BlackMagic Design |
34 | 1 | Laurent GUERBY | Intensity Pro [2], parce que pas chère et dispose de drivers, dâun SDK |
35 | 1 | Laurent GUERBY | et dâutilitaires pour Linux. On utilise lâentrée HDMI pour la vidéo, et |
36 | 1 | Laurent GUERBY | une entrée audio analogique. |
37 | 1 | Laurent GUERBY | Le processeur est un Core i7-2600K (un peu sous-exploité), et la machine |
38 | 1 | Laurent GUERBY | tourne sous Arch Linux [3]. |
39 | 1 | Laurent GUERBY | |
40 | 1 | Laurent GUERBY | Le script qui tourne sur cette machine est sensiblement le suivantâ¯: |
41 | 1 | Laurent GUERBY | |
42 | 1 | Laurent GUERBY | bmdcapture -m${INPUT} -F nut -f pipe:1 | ffmpeg -i - -threads 6 \ |
43 | 1 | Laurent GUERBY | -f matroska -preset ultrafast -q 0 -vcodec libx264 -acodec pcm_s16le \ |
44 | 1 | Laurent GUERBY | -y $DUMPFILE & |
45 | 1 | Laurent GUERBY | |
46 | 1 | Laurent GUERBY | sleep 10 |
47 | 1 | Laurent GUERBY | |
48 | 1 | Laurent GUERBY | cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=800, \ |
49 | 1 | Laurent GUERBY | width=720,height=405,threads=2,acodec=vorb,ab=128, \ |
50 | 1 | Laurent GUERBY | channels=2, deinterlace}: \ |
51 | 1 | Laurent GUERBY | duplicate{dst=std{access=file,mux=ogg,dst=$OGVFILE}, \ |
52 | 1 | Laurent GUERBY | dst=std{access=shout,mux=ogg, \ |
53 | 1 | Laurent GUERBY | dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_hd.ogg}}" & |
54 | 1 | Laurent GUERBY | |
55 | 1 | Laurent GUERBY | cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=600, \ |
56 | 1 | Laurent GUERBY | width=320,height=180,threads=2,acodec=vorb,ab=128, \ |
57 | 1 | Laurent GUERBY | channels=2,deinterlace}: \ |
58 | 1 | Laurent GUERBY | std{access=shout,mux=ogg, \ |
59 | 1 | Laurent GUERBY | dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_sd.ogg}" |
60 | 1 | Laurent GUERBY | |
61 | 1 | Laurent GUERBY | Pour ceux qui ne sont pas familiers de ffmpeg et VLCâ¯: on fait |
62 | 1 | Laurent GUERBY | lâacquisition avec bmdcapture [4], quâon passe directement à ffmpeg, qui |
63 | 1 | Laurent GUERBY | lui enregistre un fichier peu compressé sur lequel on pourra |
64 | 1 | Laurent GUERBY | retravailler /a posteriori/. |
65 | 1 | Laurent GUERBY | On lance ensuite deux instances de VLCâ¯: chacune va lire le MKV produit |
66 | 1 | Laurent GUERBY | par ffmpeg. La première réencode (transcode) le flux en 720â¯Ãâ¯405, |
67 | 1 | Laurent GUERBY | lâenregistre (access=file) et lâenvoie au serveur de streaming |
68 | 1 | Laurent GUERBY | (access=shout), la seconde ne fait que réencoder en 320â¯Ãâ¯180 et |
69 | 1 | Laurent GUERBY | lâenvoyer au serveur de streaming. |
70 | 1 | Laurent GUERBY | |
71 | 1 | Laurent GUERBY | (Ã noter que depuis sa version 2, VLC a un module decklink qui permet |
72 | 1 | Laurent GUERBY | dâacquérir depuis cette carte. On pourrait donc potentiellement tout |
73 | 1 | Laurent GUERBY | faire avec VLC, mais on a encore des soucis de stabilité.) |
74 | 1 | Laurent GUERBY | |
75 | 1 | Laurent GUERBY | â Serveur de streamingâ¯: un serveur Icecast 2 configuré pour prendre les |
76 | 1 | Laurent GUERBY | deux sources en entrée. |
77 | 1 | Laurent GUERBY | |
78 | 1 | Laurent GUERBY | â Interface webâ¯: on utilise Video.js [5], avec un repli sur Cortado [6] |
79 | 1 | Laurent GUERBY | quand le navigateur nâest pas coopératif. |
80 | 1 | Laurent GUERBY | |
81 | 1 | Laurent GUERBY | Je pense que jâai fait le tour de lâinstallation. Si vous avez des |
82 | 1 | Laurent GUERBY | remarques, des questions, des suggestions⦠allez-yâ¯! ;) |
83 | 1 | Laurent GUERBY | |
84 | 1 | Laurent GUERBY | Antoine |
85 | 1 | Laurent GUERBY | </pre> |
86 | 1 | Laurent GUERBY | |
87 | 1 | Laurent GUERBY | [0] http://lists.tetalab.org/pipermail/tetaneutral/2012-March/000865.html |
88 | 1 | Laurent GUERBY | [1] http://net7.bde.enseeiht.fr/ |
89 | 1 | Laurent GUERBY | [2] http://www.blackmagic-design.com/products/intensity/models/ |
90 | 1 | Laurent GUERBY | [3] http://www.archlinux.org/ |
91 | 1 | Laurent GUERBY | [4] https://github.com/lu-zero/decklink-ffmpeg |
92 | 1 | Laurent GUERBY | [5] http://videojs.com/ |
93 | 1 | Laurent GUERBY | [6] http://www.flumotion.net/cortado/ |
94 | 2 | Laurent GUERBY | |
95 | 2 | Laurent GUERBY | h2. Questions N7 |
96 | 2 | Laurent GUERBY | |
97 | 2 | Laurent GUERBY | # Quelle est la latence entre une image et sa retransmission aux différentes étapes ? Est-ce qu'elle vient du "sleep 10" ? |
98 | 2 | Laurent GUERBY | # Autre ? |
99 | 3 | Mehdi Abaakouk | |
100 | 3 | Mehdi Abaakouk | h2. Version N7 modifié par sileht |
101 | 3 | Mehdi Abaakouk | |
102 | 3 | Mehdi Abaakouk | SOUT='#duplicate{ |
103 | 3 | Mehdi Abaakouk | dst="transcode{ |
104 | 3 | Mehdi Abaakouk | vcodec=h264,venc=x264{ultrafast},acodec=s16l,threads=6 |
105 | 3 | Mehdi Abaakouk | }:std{ |
106 | 3 | Mehdi Abaakouk | access=file,mux=mkv,dst='$MKVFILE' |
107 | 3 | Mehdi Abaakouk | }", |
108 | 3 | Mehdi Abaakouk | dst="transcode{ |
109 | 3 | Mehdi Abaakouk | fps=24,vcodec=theo,vb=800,width=720,height=405,threads=2,acodec=vorb,ab=128,channels=2,deinterlace |
110 | 3 | Mehdi Abaakouk | }:duplicate{ |
111 | 3 | Mehdi Abaakouk | dst=std{access=file,mux=ogg,dst='$OGVFILE'}, |
112 | 3 | Mehdi Abaakouk | dst=std{access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_hd.ogg} |
113 | 3 | Mehdi Abaakouk | }", |
114 | 3 | Mehdi Abaakouk | dst="transcode{ |
115 | 3 | Mehdi Abaakouk | fps=24,vcodec=theo,vb=600,width=320,height=180,threads=2,acodec=vorb,ab=128,channels=2,deinterlace |
116 | 3 | Mehdi Abaakouk | }:std{ |
117 | 3 | Mehdi Abaakouk | access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_sd.ogg |
118 | 3 | Mehdi Abaakouk | }" |
119 | 3 | Mehdi Abaakouk | }' |
120 | 3 | Mehdi Abaakouk | |
121 | 3 | Mehdi Abaakouk | # Remove space |
122 | 3 | Mehdi Abaakouk | SOUT=$(echo $SOUT | sed 's/ //g' ) |
123 | 3 | Mehdi Abaakouk | |
124 | 3 | Mehdi Abaakouk | bmdcapture -m${INPUT} -F nut -f pipe:1 | cvlc - --sout "$SOUT" "$@" |
125 | 3 | Mehdi Abaakouk | |
126 | 3 | Mehdi Abaakouk | |
127 | 3 | Mehdi Abaakouk | NB: |
128 | 3 | Mehdi Abaakouk | |
129 | 3 | Mehdi Abaakouk | Sous debian ou ubuntu: |
130 | 3 | Mehdi Abaakouk | Par défaut, vlc n'est pas autorisé à charger cette bibliothèque (y'a un problème de license dans certain cas, c'est pour ca que c'est pas intégrer par défaut) |
131 | 3 | Mehdi Abaakouk | pour que vlc puisse utilise libavcodec (ie:ffmpeg) correctement, il faut bien installer les dépots medibuntu ou debian multimedia |