Commit 3e73d142 authored by Vignesh Venkatasubramanian's avatar Vignesh Venkatasubramanian Committed by Michael Niedermayer

lavf: Add WebM DASH Manifest Muxer

This patch adds the ability to generate WebM DASH manifest XML using
ffmpeg. A sample command line would be as follows:

ffmpeg \
  -f webm_dash_manifest -i video1.webm \
  -f webm_dash_manifest -i video2.webm \
  -f webm_dash_manifest -i audio1.webm \
  -f webm_dash_manifest -i audio2.webm \
  -map 0 -map 1 -map 2 -map 3 \
  -c copy \
  -f webm_dash_manifest \
  -adaptation_sets “id=0,streams=0,1 id=1,streams=2,3” \
  manifest.xml

It works by exporting necessary fields as metadata tags in matroskadec
and use those values to write the appropriate XML fields as per the WebM
DASH Specification [1]. Some ideas are adopted from webm-tools project
[2].

[1]
https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification
[2]
https://chromium.googlesource.com/webm/webm-tools/+/master/webm_dash_manifest/Signed-off-by: 's avatarVignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 5a206569
...@@ -34,6 +34,7 @@ version <next>: ...@@ -34,6 +34,7 @@ version <next>:
- Image format auto-detection - Image format auto-detection
- LRC demuxer and muxer - LRC demuxer and muxer
- Samba protocol (via libsmbclient) - Samba protocol (via libsmbclient)
- WebM DASH Manifest muxer
version 2.2: version 2.2:
......
...@@ -151,6 +151,7 @@ ...@@ -151,6 +151,7 @@
• Image format auto-detection • Image format auto-detection
• LRC lyric file demuxer and muxer • LRC lyric file demuxer and muxer
• Samba protocol (via libsmbclient) • Samba protocol (via libsmbclient)
• WebM DASH Manifest muxer
┌────────────────────────────┐ ┌────────────────────────────┐
│ libavfilter │ │ libavfilter │
......
...@@ -1100,4 +1100,34 @@ Note: some codecs may need different options depending on the output format; ...@@ -1100,4 +1100,34 @@ Note: some codecs may need different options depending on the output format;
the auto-detection of this can not work with the tee muxer. The main example the auto-detection of this can not work with the tee muxer. The main example
is the @option{global_header} flag. is the @option{global_header} flag.
@section webm_dash_manifest
WebM DASH Manifest muxer.
This muxer implements the WebM DASH Manifest specification to generate the DASH manifest XML.
@subsection Options
This muxer supports the following options:
@table @option
@item adaptation_sets
This option has the following syntax: "id=x,streams=a,b,c id=y,streams=d,e" where x and y are the
unique identifiers of the adaptation sets and a,b,c,d and e are the indices of the corresponding
audio and video streams. Any number of adaptation sets can be added using this option.
@end table
@subsection Example
@example
ffmpeg -f webm_dash_manifest -i video1.webm \
-f webm_dash_manifest -i video2.webm \
-f webm_dash_manifest -i audio1.webm \
-f webm_dash_manifest -i audio2.webm \
-map 0 -map 1 -map 2 -map 3 \
-c copy \
-f webm_dash_manifest \
-adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \
manifest.xml
@end example
@c man end MUXERS @c man end MUXERS
...@@ -223,7 +223,8 @@ OBJS-$(CONFIG_MATROSKA_DEMUXER) += matroskadec.o matroska.o \ ...@@ -223,7 +223,8 @@ OBJS-$(CONFIG_MATROSKA_DEMUXER) += matroskadec.o matroska.o \
flac_picture.o replaygain.o flac_picture.o replaygain.o
OBJS-$(CONFIG_MATROSKA_MUXER) += matroskaenc.o matroska.o \ OBJS-$(CONFIG_MATROSKA_MUXER) += matroskaenc.o matroska.o \
isom.o avc.o hevc.o \ isom.o avc.o hevc.o \
flacenc_header.o avlanguage.o vorbiscomment.o wv.o flacenc_header.o avlanguage.o vorbiscomment.o wv.o \
webmdashenc.o
OBJS-$(CONFIG_MD5_MUXER) += md5enc.o OBJS-$(CONFIG_MD5_MUXER) += md5enc.o
OBJS-$(CONFIG_MGSTS_DEMUXER) += mgsts.o OBJS-$(CONFIG_MGSTS_DEMUXER) += mgsts.o
OBJS-$(CONFIG_MICRODVD_DEMUXER) += microdvddec.o subtitles.o OBJS-$(CONFIG_MICRODVD_DEMUXER) += microdvddec.o subtitles.o
...@@ -432,7 +433,13 @@ OBJS-$(CONFIG_WC3_DEMUXER) += wc3movie.o ...@@ -432,7 +433,13 @@ OBJS-$(CONFIG_WC3_DEMUXER) += wc3movie.o
OBJS-$(CONFIG_WEBM_MUXER) += matroskaenc.o matroska.o \ OBJS-$(CONFIG_WEBM_MUXER) += matroskaenc.o matroska.o \
isom.o avc.o hevc.o \ isom.o avc.o hevc.o \
flacenc_header.o avlanguage.o \ flacenc_header.o avlanguage.o \
wv.o vorbiscomment.o wv.o vorbiscomment.o \
webmdashenc.o
OBJS-$(CONFIG_WEBM_DASH_MANIFEST_DEMUXER)+= matroskadec.o matroska.o \
isom.o rmsipr.o flac_picture.o \
oggparsevorbis.o vorbiscomment.o \
flac_picture.o replaygain.o
OBJS-$(CONFIG_WEBM_DASH_MANIFEST_MUXER) += webmdashenc.o matroska.o
OBJS-$(CONFIG_WEBVTT_DEMUXER) += webvttdec.o subtitles.o OBJS-$(CONFIG_WEBVTT_DEMUXER) += webvttdec.o subtitles.o
OBJS-$(CONFIG_WEBVTT_MUXER) += webvttenc.o OBJS-$(CONFIG_WEBVTT_MUXER) += webvttenc.o
OBJS-$(CONFIG_WSAUD_DEMUXER) += westwood_aud.o OBJS-$(CONFIG_WSAUD_DEMUXER) += westwood_aud.o
......
...@@ -307,6 +307,7 @@ void av_register_all(void) ...@@ -307,6 +307,7 @@ void av_register_all(void)
REGISTER_MUXDEMUX(WAV, wav); REGISTER_MUXDEMUX(WAV, wav);
REGISTER_DEMUXER (WC3, wc3); REGISTER_DEMUXER (WC3, wc3);
REGISTER_MUXER (WEBM, webm); REGISTER_MUXER (WEBM, webm);
REGISTER_MUXDEMUX(WEBM_DASH_MANIFEST, webm_dash_manifest);
REGISTER_MUXDEMUX(WEBVTT, webvtt); REGISTER_MUXDEMUX(WEBVTT, webvtt);
REGISTER_DEMUXER (WSAUD, wsaud); REGISTER_DEMUXER (WSAUD, wsaud);
REGISTER_DEMUXER (WSVQA, wsvqa); REGISTER_DEMUXER (WSVQA, wsvqa);
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include "libavutil/version.h" #include "libavutil/version.h"
#define LIBAVFORMAT_VERSION_MAJOR 55 #define LIBAVFORMAT_VERSION_MAJOR 55
#define LIBAVFORMAT_VERSION_MINOR 47 #define LIBAVFORMAT_VERSION_MINOR 48
#define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment