StreamingVideo » Historique » Version 7
Laurent GUERBY, 11/02/2013 23:05
1 | 1 | Laurent GUERBY | {{>toc}} |
---|---|---|---|
2 | 1 | Laurent GUERBY | |
3 | 1 | Laurent GUERBY | h1. StreamingVideo |
4 | 1 | Laurent GUERBY | |
5 | 5 | Laurent GUERBY | h2. Liens |
6 | 5 | Laurent GUERBY | |
7 | 5 | Laurent GUERBY | http://blog.sesse.net/blog/tech/TG/2012-05-12-22-03_tcp_optimization_for_video_streaming |
8 | 5 | Laurent GUERBY | |
9 | 7 | Laurent GUERBY | h2. THSF2013 |
10 | 7 | Laurent GUERBY | |
11 | 7 | Laurent GUERBY | https://pad.tetalab.org/p/regie |
12 | 7 | Laurent GUERBY | |
13 | 1 | Laurent GUERBY | h2. Solution N7 |
14 | 1 | Laurent GUERBY | |
15 | 1 | Laurent GUERBY | <pre> |
16 | 1 | Laurent GUERBY | From: Antoine Lubineau |
17 | 1 | Laurent GUERBY | To: technique@lists.tetaneutral.net |
18 | 1 | Laurent GUERBY | Subject: [technique] Streaming vidéo net7 |
19 | 1 | Laurent GUERBY | Date: Sat, 07 Apr 2012 01:15:55 +0200 |
20 | 1 | Laurent GUERBY | |
21 | 1 | Laurent GUERBY | |
22 | 1 | Laurent GUERBY | Bonsoir, |
23 | 1 | Laurent GUERBY | |
24 | 1 | Laurent GUERBY | Ce mail est un peu dans la suite du mail sur sur la Novela [0]. Comme on |
25 | 1 | Laurent GUERBY | fait du streaming vidéo à net7 (club info de lâENSEEIHT [1]) depuis |
26 | 1 | Laurent GUERBY | assez longtemps, ça peut être pas mal dâéchanger là -dessus. |
27 | 1 | Laurent GUERBY | |
28 | 1 | Laurent GUERBY | â Contexteâ¯: plusieurs fois dans lâannée, il y a des shows organisés par |
29 | 1 | Laurent GUERBY | le club vidéo de lâécole et on les diffuse en direct sur Internet. La |
30 | 1 | Laurent GUERBY | configuration actuelle tourne depuis environ un an (câétait une |
31 | 1 | Laurent GUERBY | acquisition vidéo analogique avant), et on a eu 75 spectateurs |
32 | 1 | Laurent GUERBY | simultanés pendant la dernière édition. |
33 | 1 | Laurent GUERBY | |
34 | 1 | Laurent GUERBY | â Schéma de principeâ¯: |
35 | 1 | Laurent GUERBY | |
36 | 1 | Laurent GUERBY | vidéo ââââ |
37 | 1 | Laurent GUERBY | \__ machine __[réseau ]_ serveur __[Internet]__ client |
38 | 1 | Laurent GUERBY | / dâencodage [interne] Icecast web |
39 | 1 | Laurent GUERBY | audio ââââ |
40 | 1 | Laurent GUERBY | |
41 | 1 | Laurent GUERBY | â Machine dâencodageâ¯: une carte dâacquisition BlackMagic Design |
42 | 1 | Laurent GUERBY | Intensity Pro [2], parce que pas chère et dispose de drivers, dâun SDK |
43 | 1 | Laurent GUERBY | et dâutilitaires pour Linux. On utilise lâentrée HDMI pour la vidéo, et |
44 | 1 | Laurent GUERBY | une entrée audio analogique. |
45 | 1 | Laurent GUERBY | Le processeur est un Core i7-2600K (un peu sous-exploité), et la machine |
46 | 1 | Laurent GUERBY | tourne sous Arch Linux [3]. |
47 | 1 | Laurent GUERBY | |
48 | 1 | Laurent GUERBY | Le script qui tourne sur cette machine est sensiblement le suivantâ¯: |
49 | 1 | Laurent GUERBY | |
50 | 1 | Laurent GUERBY | bmdcapture -m${INPUT} -F nut -f pipe:1 | ffmpeg -i - -threads 6 \ |
51 | 1 | Laurent GUERBY | -f matroska -preset ultrafast -q 0 -vcodec libx264 -acodec pcm_s16le \ |
52 | 1 | Laurent GUERBY | -y $DUMPFILE & |
53 | 1 | Laurent GUERBY | |
54 | 1 | Laurent GUERBY | sleep 10 |
55 | 1 | Laurent GUERBY | |
56 | 1 | Laurent GUERBY | cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=800, \ |
57 | 1 | Laurent GUERBY | width=720,height=405,threads=2,acodec=vorb,ab=128, \ |
58 | 1 | Laurent GUERBY | channels=2, deinterlace}: \ |
59 | 1 | Laurent GUERBY | duplicate{dst=std{access=file,mux=ogg,dst=$OGVFILE}, \ |
60 | 1 | Laurent GUERBY | dst=std{access=shout,mux=ogg, \ |
61 | 1 | Laurent GUERBY | dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_hd.ogg}}" & |
62 | 1 | Laurent GUERBY | |
63 | 1 | Laurent GUERBY | cvlc $DUMPFILE --sout "#transcode{fps=24,vcodec=theo,vb=600, \ |
64 | 1 | Laurent GUERBY | width=320,height=180,threads=2,acodec=vorb,ab=128, \ |
65 | 1 | Laurent GUERBY | channels=2,deinterlace}: \ |
66 | 1 | Laurent GUERBY | std{access=shout,mux=ogg, \ |
67 | 1 | Laurent GUERBY | dst=$LOGIN:$PASSWD@$SERVER:$PORT/live_sd.ogg}" |
68 | 1 | Laurent GUERBY | |
69 | 1 | Laurent GUERBY | Pour ceux qui ne sont pas familiers de ffmpeg et VLCâ¯: on fait |
70 | 1 | Laurent GUERBY | lâacquisition avec bmdcapture [4], quâon passe directement à ffmpeg, qui |
71 | 1 | Laurent GUERBY | lui enregistre un fichier peu compressé sur lequel on pourra |
72 | 1 | Laurent GUERBY | retravailler /a posteriori/. |
73 | 1 | Laurent GUERBY | On lance ensuite deux instances de VLCâ¯: chacune va lire le MKV produit |
74 | 1 | Laurent GUERBY | par ffmpeg. La première réencode (transcode) le flux en 720â¯Ãâ¯405, |
75 | 1 | Laurent GUERBY | lâenregistre (access=file) et lâenvoie au serveur de streaming |
76 | 1 | Laurent GUERBY | (access=shout), la seconde ne fait que réencoder en 320â¯Ãâ¯180 et |
77 | 1 | Laurent GUERBY | lâenvoyer au serveur de streaming. |
78 | 1 | Laurent GUERBY | |
79 | 1 | Laurent GUERBY | (Ã noter que depuis sa version 2, VLC a un module decklink qui permet |
80 | 1 | Laurent GUERBY | dâacquérir depuis cette carte. On pourrait donc potentiellement tout |
81 | 1 | Laurent GUERBY | faire avec VLC, mais on a encore des soucis de stabilité.) |
82 | 1 | Laurent GUERBY | |
83 | 1 | Laurent GUERBY | â Serveur de streamingâ¯: un serveur Icecast 2 configuré pour prendre les |
84 | 1 | Laurent GUERBY | deux sources en entrée. |
85 | 1 | Laurent GUERBY | |
86 | 1 | Laurent GUERBY | â Interface webâ¯: on utilise Video.js [5], avec un repli sur Cortado [6] |
87 | 1 | Laurent GUERBY | quand le navigateur nâest pas coopératif. |
88 | 1 | Laurent GUERBY | |
89 | 1 | Laurent GUERBY | Je pense que jâai fait le tour de lâinstallation. Si vous avez des |
90 | 1 | Laurent GUERBY | remarques, des questions, des suggestions⦠allez-yâ¯! ;) |
91 | 1 | Laurent GUERBY | |
92 | 1 | Laurent GUERBY | Antoine |
93 | 1 | Laurent GUERBY | </pre> |
94 | 1 | Laurent GUERBY | |
95 | 1 | Laurent GUERBY | [0] http://lists.tetalab.org/pipermail/tetaneutral/2012-March/000865.html |
96 | 1 | Laurent GUERBY | [1] http://net7.bde.enseeiht.fr/ |
97 | 1 | Laurent GUERBY | [2] http://www.blackmagic-design.com/products/intensity/models/ |
98 | 1 | Laurent GUERBY | [3] http://www.archlinux.org/ |
99 | 1 | Laurent GUERBY | [4] https://github.com/lu-zero/decklink-ffmpeg |
100 | 1 | Laurent GUERBY | [5] http://videojs.com/ |
101 | 1 | Laurent GUERBY | [6] http://www.flumotion.net/cortado/ |
102 | 2 | Laurent GUERBY | |
103 | 2 | Laurent GUERBY | h2. Questions N7 |
104 | 2 | Laurent GUERBY | |
105 | 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" ? |
106 | 2 | Laurent GUERBY | # Autre ? |
107 | 3 | Mehdi Abaakouk | |
108 | 3 | Mehdi Abaakouk | h2. Version N7 modifié par sileht |
109 | 3 | Mehdi Abaakouk | |
110 | 4 | Mehdi Abaakouk | <pre> |
111 | 3 | Mehdi Abaakouk | SOUT='#duplicate{ |
112 | 3 | Mehdi Abaakouk | dst="transcode{ |
113 | 3 | Mehdi Abaakouk | vcodec=h264,venc=x264{ultrafast},acodec=s16l,threads=6 |
114 | 3 | Mehdi Abaakouk | }:std{ |
115 | 3 | Mehdi Abaakouk | access=file,mux=mkv,dst='$MKVFILE' |
116 | 3 | Mehdi Abaakouk | }", |
117 | 3 | Mehdi Abaakouk | dst="transcode{ |
118 | 3 | Mehdi Abaakouk | fps=24,vcodec=theo,vb=800,width=720,height=405,threads=2,acodec=vorb,ab=128,channels=2,deinterlace |
119 | 3 | Mehdi Abaakouk | }:duplicate{ |
120 | 3 | Mehdi Abaakouk | dst=std{access=file,mux=ogg,dst='$OGVFILE'}, |
121 | 3 | Mehdi Abaakouk | dst=std{access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_hd.ogg} |
122 | 3 | Mehdi Abaakouk | }", |
123 | 3 | Mehdi Abaakouk | dst="transcode{ |
124 | 3 | Mehdi Abaakouk | fps=24,vcodec=theo,vb=600,width=320,height=180,threads=2,acodec=vorb,ab=128,channels=2,deinterlace |
125 | 3 | Mehdi Abaakouk | }:std{ |
126 | 3 | Mehdi Abaakouk | access=shout,mux=ogg,dst='$LOGIN':'$PASSWD'@'$SERVER':'$PORT'/live_sd.ogg |
127 | 3 | Mehdi Abaakouk | }" |
128 | 3 | Mehdi Abaakouk | }' |
129 | 3 | Mehdi Abaakouk | |
130 | 3 | Mehdi Abaakouk | # Remove space |
131 | 3 | Mehdi Abaakouk | SOUT=$(echo $SOUT | sed 's/ //g' ) |
132 | 3 | Mehdi Abaakouk | |
133 | 1 | Laurent GUERBY | bmdcapture -m${INPUT} -F nut -f pipe:1 | cvlc - --sout "$SOUT" "$@" |
134 | 4 | Mehdi Abaakouk | </pre> |
135 | 3 | Mehdi Abaakouk | |
136 | 3 | Mehdi Abaakouk | NB: |
137 | 3 | Mehdi Abaakouk | |
138 | 3 | Mehdi Abaakouk | Sous debian ou ubuntu: |
139 | 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) |
140 | 3 | Mehdi Abaakouk | pour que vlc puisse utilise libavcodec (ie:ffmpeg) correctement, il faut bien installer les dépots medibuntu ou debian multimedia |
141 | 6 | Élie Bouttier | |
142 | 6 | Élie Bouttier | h2. Nouvelle version de lâN7, basé sur les modifications de sileht, et objectif futur |
143 | 6 | Élie Bouttier | |
144 | 6 | Élie Bouttier | h3. Nouvelle version |
145 | 6 | Élie Bouttier | |
146 | 6 | Élie Bouttier | à venir ⦠|
147 | 6 | Élie Bouttier | |
148 | 6 | Élie Bouttier | h3. Objectifs futurs |
149 | 6 | Élie Bouttier | |
150 | 6 | Élie Bouttier | Toujours utiliser video.js pour la lecture, mais changer le format de diffusion. Nous voudrions proposer au lieu de du theora + vorbis dans du ogg (le theora étant plutôt moche, surtout dès quâil y a du mouvement), deux formats au choix (video.js sâoccupant du choix suivant les possibilitées du navigateur) : |
151 | 6 | Élie Bouttier | * VP80 + vorbis (voir opus) dans du webm, pour les navigateurs html5; |
152 | 6 | Élie Bouttier | * h264 + mp3 dans du mp4, lu en flash pour les navigateurs non html5. |
153 | 6 | Élie Bouttier | Il faudra alors utiliser la dernière version de icecast, celle dans les dépots de squeeze ne supportant pas le webm. |
154 | 6 | Élie Bouttier | Lâutilisation de ces formats nous a été conseillé par JB. Kampf (Président de videolan) alors on espère avoir de bon résultat :) |