Tema 3: Audio y vídeo Distribución de audio y vídeo 2013-2014 Depto. Ciencia de la Computación e IA
Puntos a tratar Podcasts Descarga progresiva Retransmisión en directo 2
Podcast Podcast = ipod + broadcast Audio Vídeo Documentos El contenido se sincroniza con el dispositivo Por cable o Wi-Fi No necesita acceso a través de la red del móvil Se pueden utilizar offline Contenido multimedia episódico Podemos suscribirnos y recibir nuevos episodios 3
Formatos del podcast Podemos publicar contenidos en diferentes formatos Audio.m4a (audio/x- m4a).mp3 (audio/mpeg) Vídeo.mov (video/quicktime).mp4 (video/mp4).m4v (video/x- m4v) Libros y documentos.pdf (application/pdf).epub (document/x- epub) 4
RSS feed Los contenidos del podcast se publican en un documento XML El podcast se define como un canal (channel) El canal contiene varios episodios (items) <?xml version="1.0" encoding="utf-8"?> <rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> <channel> <!-- Informacion del canal --> <item> <!-- Informacion del item --> </item> <item> <!-- Informacion del item --> </item>... </channel> </rss> 5
Información del canal <title>servicios Multimedia para Dispositivos Móviles</title> <link>http://jtech.ua.es/podcast/index.html</link> <language>en-us</language> <copyright> & 2012 Miguel Ángel Lozano</copyright> <itunes:subtitle>podcast sobre dispositivos móviles</itunes:subtitle> <itunes:author>miguel Ángel Lozano</itunes:author> <itunes:summary>resumen</itunes:summary> <description>descripción</description> <itunes:owner> <itunes:name>miguel Ángel Lozano</itunes:name> <itunes:email>malozano@ua.es</itunes:email> </itunes:owner> <itunes:image href="http://jtech.ua.es/podcast/ios.jpg" /> <itunes:category text="technology"> <itunes:category text="gadgets"/> </itunes:category> <itunes:category text="tv & Film"/> 6
Información de los episodios Si queremos soportar múltiples formatos, debemos crear otro feed Añadimos nuevos episodios añadiendo un nuevo item a la lista <item> <title>episodio 1</title> <itunes:author>miguel Ángel Lozano</itunes:author> <itunes:subtitle>características de los dispositivos</itunes:subtitle> <itunes:summary> Redes de telefonía móvil. Tipos de dispositivos. Plataformas de desarrollo </itunes:summary> <itunes:image href="http://www.jtech.ua.es/images/logo- especialista- moviles_mini.png" /> <enclosure url="http://localhost/~malozano/episodio1.mp3" length="169608456" type="audio/mpeg" /> <guid>http://localhost/~malozano/episodio1.mp3</guid> <pubdate>mon, 5 Mar 2012 19:00:00 GMT</pubDate> <itunes:duration>1:28:20</itunes:duration> <itunes:keywords>dispositivos, moviles, redes, desarrollo</itunes:keywords> </item> 7
Información en itunes 8
Subscripción al podcast Podemos suscribirnos desde itunes Avanzado > Suscribirse a un podcast... En Android podemos utilizar Google Listen 9
Envío de podcast Podemos solicitar que Apple lo publique en la App Store Necesitamos una cuenta de itunes Entramos en itunes Store, y en la sección Podcasts 10
Descarga progresiva de vídeo Utilizamos protocolo HTTP/HTTPS para descargar el vídeo Podemos utilizar cualquier servidor web, sin infraestructura adicional El vídeo se almacena temporalmente en el dispositivo local Podemos reproducir el vídeo durante la descarga En Android sólo podemos acceder al vídeo mediante HTTP A partir de Android 3.0 también se permite HTTPS Es el sistema que encontramos en muchos repositorios de vídeos Por ejemplo YouTube Es el sistema utilizado habitualmente por HTML5 11
Preparación para descarga progresiva El cliente debe poder obtener la información del vídeo Debe proporcionarse antes que el contenido Mover estos datos al principio del fichero Metadatos en la cabecera del vídeo El vídeo (mov, mp4) está dividido en átomos ftyp Formato de la película moov Contiene metadatos wide Permite ampliar moov mdat Contiene datos de la película moov debe ir siempre antes que mdat, pero después de ftyp 12
Fast start Consiste en mover el átomo moov al comienzo del fichero Algunas herramientas lo añaden al final Podemos moverlo sin recodificar el vídeo QTIndexSwapper (http://renaun.com/blog/code/qtindexswapper/) ffmpeg -movflags faststart 13
Limitaciones de la descarga progresiva Restricciones de Apple para publicar en la App Store No nos permiten descargar Vídeos de más de 10 minutos Vídeos de más de 5Mb En los casos anteriores debemos utilizar streaming El sistema aceptado por Apple es HTTP Live Streaming Para emisiones en directo también necesitamos streaming 14
Protocolos para streaming de vídeo El protocolo recomendado actualmente es HTTP Live Streaming Soportado por Dispositivos ios Dispositivos Android a partir de 3.0 (sólo ficheros MPEG-2 TS) En versiones anteriores podemos utilizar RTSP (RTP, SDP) 15
Streaming RTSP con VLC 16
HTTP Live Streaming (HLS) Protocolo de streaming basado en HTTP desarrollado por Apple Segmenta el contenido en pequeños ficheros Los segmentos se descargan por HTTP Permite modificar el bitrate durante la reproducción Funciona sobre protocolo HTTP No tiene problema para atravesar firewalls Se puede utilizar para Emisiones en directo Video bajo demanda (VOD) 17
Servidor HLS Se puede utilizar un servidor web ordinario Necesitamos además un codificador y segmentador de flujos 18
Ficheros del stream El acceso a un vídeo se hace mediante el playlist (.M3U8) Contiene referencias a los segmentos que lo componen Cada segmento es un fichero.ts Se actualiza cada vez que se añade un nuevo segmento Los segmentos pueden sobrescribirse en emisiones en directo Ficheros de segmentos.ts MPEG-2 Transport Stream Vídeo H.264 Audio AAC Se generan mediante el stream segmenter 19
Fichero de índice Ejemplo de fichero de índice (playlist.m3u8) Contiene 3 segmentos de 10 segundos de duración Más información sobre HLS #EXTM3U #EXT- X- TARGETDURATION:10 #EXT- X- MEDIA- SEQUENCE:1 #EXTINF:10, http://media.example.com/segment0.ts #EXTINF:10, http://media.example.com/segment1.ts #EXTINF:10, http://media.example.com/segment2.ts #EXT- X- ENDLIST https://developer.apple.com/library/ios/documentation/networkinginternet/ conceptual/streamingmediaguide/introduction/introduction.html#//apple_ref/ doc/uid/tp40008332-ch1-sw1 20
VOD HLS con VLC Podemos generar contenido VOD en formato HLS vlc - I dummy /<ruta_origen>/video.m4v vlc://quit - - sout='#transcode{width=320,height=240,fps=25,vcodec=h264,vb=256, venc=x264{aud,profile=baseline,level=30,keyint=30,ref=1},acodec= mp3,ab=96}:std{access=livehttp{seglen=10,delsegs=false,numsegs=0,index=/<ruta_destino>/mystream.m3u8,index- url=mystream- ########.ts},mux=ts{use- key- frames},dst=/<ruta_destino>/ mystream- ########.ts}' Proporcionamos Video origen a segmentar Fichero de índices a generar mystream.m3u8 Formato y ruta de los segmentos mystream- 00000001.ts 21
Streaming HLS con VLC También podemos generar vídeo streaming en tiempo real HLS vlc - I dummy udp://@:1234 - - sout='#standard{access=livehttp{seglen=10,delsegs=false,numsegs=0,index=./mystream.m3u8,index- url=mystream- ########.ts}, mux=ts{use- key- frames},dst=./mystream- ########.ts}' Deberemos proporcionar un flujo de origen Se irán generando segmentos a partir del flujo de origen Los segmentos irán rotando en el índice (se eliminan los antiguos) 22
HLS con ffmpeg Podemos definir secuencias alternativas de diferente perfil Bajo ffmpeg - i entrada.mp4 - c:a aac - ac 1 - b:a 32k - ar 22050 - c:v h264 - profile:v baseline - level 3.0 - b:v 200K - r 12 - g 36 - f hls - hls_time 10 - hls_list_size 999 - s 320x180 low.m3u8 Medio ffmpeg - i entrada.mp4 - c:a aac - ac 2 - b:a 64k - ar 44100 - c:v h264 - profile:v baseline - level 3.1 - b:v 600K - r 24 - g 72 - f hls - hls_time 10 - hls_list_size 999 - s 640x360 medium.m3u8 Alto ffmpeg - i entrada.mp4 - c:a aac - ac 2 - b:a 96k - ar 44100 - c:v h264 - profile:v main - level 3.1 - b:v 1500K - r 24 - g 72 - f hls - hls_time 10 - hls_list_size 999 - s 1280x720 high.m3u8 23
Secuencias alternativas Podemos combinarlas en un único índice La secuencia es seleccionada según la capacidad del cliente Especificaremos el ancho de banda necesario para cada una #EXTM3U Conviene dejar un margen con el bitrate del vídeo #EXT- X- STREAM- INF:PROGRAM- ID=1,BANDWIDTH=200000 low.m3u8 #EXT- X- STREAM- INF:PROGRAM- ID=1,BANDWIDTH=600000 medium.m3u8 #EXT- X- STREAM- INF:PROGRAM- ID=1,BANDWIDTH=1500000 high.m3u8 24
Repositorios de vídeos Existen servicios que nos permiten alojar vídeos en un repositorio Por ejemplo, Zencoder http://zencoder.com Los vídeos de almacenan en múltiples formatos Se codifican automáticamente al subirlos a la nube Se da soporte a todos los tipos de dispositivos Podemos acceder a ellos vía HTTP Live Streaming 25
Preguntas...? 26