mirror of https://git.ffmpeg.org/ffmpeg.git
Compare commits
9 Commits
cae0f2bc55
...
1f8e5b6d95
Author | SHA1 | Date |
---|---|---|
Derek Buitenhuis | 1f8e5b6d95 | |
Derek Buitenhuis | 5d568b16a0 | |
Derek Buitenhuis | 31de02cf31 | |
Derek Buitenhuis | 10374ab5ed | |
Derek Buitenhuis | a776d524e1 | |
Derek Buitenhuis | fa00624693 | |
Derek Buitenhuis | b79260550b | |
Derek Buitenhuis | bcae59b898 | |
James Almer | 5fc4a824db |
|
@ -442,9 +442,6 @@ value is -1.
|
|||
@item chunked_post
|
||||
If set to 1 use chunked Transfer-Encoding for posts, default is 1.
|
||||
|
||||
@item content_type
|
||||
Set a specific content type for the POST messages or for listen mode.
|
||||
|
||||
@item http_proxy
|
||||
set HTTP proxy to tunnel through e.g. http://example.com:1234
|
||||
|
||||
|
@ -452,42 +449,33 @@ set HTTP proxy to tunnel through e.g. http://example.com:1234
|
|||
Set custom HTTP headers, can override built in default headers. The
|
||||
value must be a string encoding the headers.
|
||||
|
||||
@item content_type
|
||||
Set a specific content type for the POST messages or for listen mode.
|
||||
|
||||
@item user_agent
|
||||
Override the User-Agent header. If not specified the protocol will use a
|
||||
string describing the libavformat build. ("Lavf/<version>")
|
||||
|
||||
@item referer
|
||||
Set the Referer header. Include 'Referer: URL' header in HTTP request.
|
||||
|
||||
@item multiple_requests
|
||||
Use persistent connections if set to 1, default is 0.
|
||||
|
||||
@item post_data
|
||||
Set custom HTTP post data.
|
||||
|
||||
@item referer
|
||||
Set the Referer header. Include 'Referer: URL' header in HTTP request.
|
||||
|
||||
@item user_agent
|
||||
Override the User-Agent header. If not specified the protocol will use a
|
||||
string describing the libavformat build. ("Lavf/<version>")
|
||||
|
||||
@item reconnect_at_eof
|
||||
If set then eof is treated like an error and causes reconnection, this is useful
|
||||
for live / endless streams.
|
||||
|
||||
@item reconnect_streamed
|
||||
If set then even streamed/non seekable streams will be reconnected on errors.
|
||||
|
||||
@item reconnect_on_network_error
|
||||
Reconnect automatically in case of TCP/TLS errors during connect.
|
||||
|
||||
@item reconnect_on_http_error
|
||||
A comma separated list of HTTP status codes to reconnect on. The list can
|
||||
include specific status codes (e.g. '503') or the strings '4xx' / '5xx'.
|
||||
|
||||
@item reconnect_delay_max
|
||||
Sets the maximum delay in seconds after which to give up reconnecting
|
||||
|
||||
@item mime_type
|
||||
Export the MIME type.
|
||||
|
||||
@item http_version
|
||||
Exports the HTTP response version number. Usually "1.0" or "1.1".
|
||||
|
||||
@item cookies
|
||||
Set the cookies to be sent in future requests. The format of each cookie is the
|
||||
same as the value of a Set-Cookie HTTP response field. Multiple cookies can be
|
||||
delimited by a newline character.
|
||||
|
||||
@item icy
|
||||
If set to 1 request ICY (SHOUTcast) metadata from the server. If the server
|
||||
supports this, the metadata has to be retrieved by the application by reading
|
||||
|
@ -504,10 +492,40 @@ contains the last non-empty metadata packet sent by the server. It should be
|
|||
polled in regular intervals by applications interested in mid-stream metadata
|
||||
updates.
|
||||
|
||||
@item cookies
|
||||
Set the cookies to be sent in future requests. The format of each cookie is the
|
||||
same as the value of a Set-Cookie HTTP response field. Multiple cookies can be
|
||||
delimited by a newline character.
|
||||
@item metadata
|
||||
Set an exported dictionary containing Icecast metadata from the bitstream, if present.
|
||||
Only useful with the C API.
|
||||
|
||||
@item auth_type
|
||||
|
||||
Set HTTP authentication type. No option for Digest, since this method requires
|
||||
getting nonce parameters from the server first and can't be used straight away like
|
||||
Basic.
|
||||
|
||||
@table @option
|
||||
@item none
|
||||
Choose the HTTP authentication type automatically. This is the default.
|
||||
@item basic
|
||||
|
||||
Choose the HTTP basic authentication.
|
||||
|
||||
Basic authentication sends a Base64-encoded string that contains a user name and password
|
||||
for the client. Base64 is not a form of encryption and should be considered the same as
|
||||
sending the user name and password in clear text (Base64 is a reversible encoding).
|
||||
If a resource needs to be protected, strongly consider using an authentication scheme
|
||||
other than basic authentication. HTTPS/TLS should be used with basic authentication.
|
||||
Without these additional security enhancements, basic authentication should not be used
|
||||
to protect sensitive or valuable information.
|
||||
@end table
|
||||
|
||||
@item send_expect_100
|
||||
Send an Expect: 100-continue header for POST. If set to 1 it will send, if set
|
||||
to 0 it won't, if set to -1 it will try to send if it is applicable. Default
|
||||
value is -1.
|
||||
|
||||
@item location
|
||||
An exported dictionary containing the content location. Only useful with the C
|
||||
API.
|
||||
|
||||
@item offset
|
||||
Set initial byte offset.
|
||||
|
@ -525,6 +543,32 @@ be given a Bad Request response.
|
|||
When unset the HTTP method is not checked for now. This will be replaced by
|
||||
autodetection in the future.
|
||||
|
||||
@item reconnect
|
||||
Reconnect automatically when disconnected before EOF is hit.
|
||||
|
||||
@item reconnect_at_eof
|
||||
If set then eof is treated like an error and causes reconnection, this is useful
|
||||
for live / endless streams.
|
||||
|
||||
@item reconnect_on_network_error
|
||||
Reconnect automatically in case of TCP/TLS errors during connect.
|
||||
|
||||
@item reconnect_on_http_error
|
||||
A comma separated list of HTTP status codes to reconnect on. The list can
|
||||
include specific status codes (e.g. '503') or the strings '4xx' / '5xx'.
|
||||
|
||||
@item reconnect_streamed
|
||||
If set then even streamed/non seekable streams will be reconnected on errors.
|
||||
|
||||
@item reconnect_delay_max
|
||||
Set the maximum delay in seconds after which to give up reconnecting.
|
||||
|
||||
@item reconnect_max_retries
|
||||
Set the maximum number of times to retry a connection. Default unset.
|
||||
|
||||
@item reconnect_delay_total_max
|
||||
Set the maximum total delay in seconds after which to give up reconnecting.
|
||||
|
||||
@item listen
|
||||
If set to 1 enables experimental HTTP server. This can be used to send data when
|
||||
used as an output option, or read data from a client with HTTP POST when used as
|
||||
|
@ -551,32 +595,16 @@ ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://@var{server}:@var{p
|
|||
wget --post-file=somefile.ogg http://@var{server}:@var{port}
|
||||
@end example
|
||||
|
||||
@item send_expect_100
|
||||
Send an Expect: 100-continue header for POST. If set to 1 it will send, if set
|
||||
to 0 it won't, if set to -1 it will try to send if it is applicable. Default
|
||||
value is -1.
|
||||
@item resource
|
||||
The resource requested by a client, when the experimental HTTP server is in use.
|
||||
|
||||
@item auth_type
|
||||
@item reply_code
|
||||
The HTTP code returned to the client, when the experimental HTTP server is in use.
|
||||
|
||||
Set HTTP authentication type. No option for Digest, since this method requires
|
||||
getting nonce parameters from the server first and can't be used straight away like
|
||||
Basic.
|
||||
|
||||
@table @option
|
||||
@item none
|
||||
Choose the HTTP authentication type automatically. This is the default.
|
||||
@item basic
|
||||
|
||||
Choose the HTTP basic authentication.
|
||||
|
||||
Basic authentication sends a Base64-encoded string that contains a user name and password
|
||||
for the client. Base64 is not a form of encryption and should be considered the same as
|
||||
sending the user name and password in clear text (Base64 is a reversible encoding).
|
||||
If a resource needs to be protected, strongly consider using an authentication scheme
|
||||
other than basic authentication. HTTPS/TLS should be used with basic authentication.
|
||||
Without these additional security enhancements, basic authentication should not be used
|
||||
to protect sensitive or valuable information.
|
||||
@end table
|
||||
@item short_seek_size
|
||||
Set the threshold, in bytes, for when a readahead should be prefered over a seek and
|
||||
new HTTP request. This is useful, for example, to make sure the same connection
|
||||
is used for reading large video packets with small audio packets in between.
|
||||
|
||||
@end table
|
||||
|
||||
|
|
|
@ -138,6 +138,8 @@ typedef struct HTTPContext {
|
|||
char *new_location;
|
||||
AVDictionary *redirect_cache;
|
||||
uint64_t filesize_from_content_range;
|
||||
int reconnect_max_retries;
|
||||
int reconnect_delay_total_max;
|
||||
} HTTPContext;
|
||||
|
||||
#define OFFSET(x) offsetof(HTTPContext, x)
|
||||
|
@ -176,6 +178,8 @@ static const AVOption options[] = {
|
|||
{ "reconnect_on_http_error", "list of http status codes to reconnect on", OFFSET(reconnect_on_http_error), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, D },
|
||||
{ "reconnect_streamed", "auto reconnect streamed / non seekable streams", OFFSET(reconnect_streamed), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, D },
|
||||
{ "reconnect_delay_max", "max reconnect delay in seconds after which to give up", OFFSET(reconnect_delay_max), AV_OPT_TYPE_INT, { .i64 = 120 }, 0, UINT_MAX/1000/1000, D },
|
||||
{ "reconnect_max_retries", "the max number of times to retry a connection", OFFSET(reconnect_max_retries), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, D },
|
||||
{ "reconnect_delay_total_max", "max total reconnect delay in seconds after which to give up", OFFSET(reconnect_delay_total_max), AV_OPT_TYPE_INT, { .i64 = 256 }, 0, UINT_MAX/1000/1000, D },
|
||||
{ "listen", "listen on HTTP", OFFSET(listen), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, D | E },
|
||||
{ "resource", "The resource requested by a client", OFFSET(resource), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, E },
|
||||
{ "reply_code", "The http status code to return to a client", OFFSET(reply_code), AV_OPT_TYPE_INT, { .i64 = 200}, INT_MIN, 599, E},
|
||||
|
@ -286,6 +290,7 @@ static int http_should_reconnect(HTTPContext *s, int err)
|
|||
case AVERROR_HTTP_UNAUTHORIZED:
|
||||
case AVERROR_HTTP_FORBIDDEN:
|
||||
case AVERROR_HTTP_NOT_FOUND:
|
||||
case AVERROR_HTTP_TOO_MANY_REQUESTS:
|
||||
case AVERROR_HTTP_OTHER_4XX:
|
||||
status_group = "4xx";
|
||||
break;
|
||||
|
@ -355,8 +360,9 @@ static int http_open_cnx(URLContext *h, AVDictionary **options)
|
|||
{
|
||||
HTTPAuthType cur_auth_type, cur_proxy_auth_type;
|
||||
HTTPContext *s = h->priv_data;
|
||||
int ret, attempts = 0, redirects = 0;
|
||||
int ret, conn_attempts = 1, auth_attempts = 0, redirects = 0;
|
||||
int reconnect_delay = 0;
|
||||
int reconnect_delay_total = 0;
|
||||
uint64_t off;
|
||||
char *cached;
|
||||
|
||||
|
@ -382,14 +388,18 @@ redo:
|
|||
ret = http_open_cnx_internal(h, options);
|
||||
if (ret < 0) {
|
||||
if (!http_should_reconnect(s, ret) ||
|
||||
reconnect_delay > s->reconnect_delay_max)
|
||||
reconnect_delay > s->reconnect_delay_max ||
|
||||
(s->reconnect_max_retries >= 0 && conn_attempts > s->reconnect_max_retries) ||
|
||||
reconnect_delay_total > s->reconnect_delay_total_max)
|
||||
goto fail;
|
||||
|
||||
av_log(h, AV_LOG_WARNING, "Will reconnect at %"PRIu64" in %d second(s).\n", off, reconnect_delay);
|
||||
ret = ff_network_sleep_interruptible(1000U * 1000 * reconnect_delay, &h->interrupt_callback);
|
||||
if (ret != AVERROR(ETIMEDOUT))
|
||||
goto fail;
|
||||
reconnect_delay_total += reconnect_delay;
|
||||
reconnect_delay = 1 + 2 * reconnect_delay;
|
||||
conn_attempts++;
|
||||
|
||||
/* restore the offset (http_connect resets it) */
|
||||
s->off = off;
|
||||
|
@ -398,10 +408,10 @@ redo:
|
|||
goto redo;
|
||||
}
|
||||
|
||||
attempts++;
|
||||
auth_attempts++;
|
||||
if (s->http_code == 401) {
|
||||
if ((cur_auth_type == HTTP_AUTH_NONE || s->auth_state.stale) &&
|
||||
s->auth_state.auth_type != HTTP_AUTH_NONE && attempts < 4) {
|
||||
s->auth_state.auth_type != HTTP_AUTH_NONE && auth_attempts < 4) {
|
||||
ffurl_closep(&s->hd);
|
||||
goto redo;
|
||||
} else
|
||||
|
@ -409,7 +419,7 @@ redo:
|
|||
}
|
||||
if (s->http_code == 407) {
|
||||
if ((cur_proxy_auth_type == HTTP_AUTH_NONE || s->proxy_auth_state.stale) &&
|
||||
s->proxy_auth_state.auth_type != HTTP_AUTH_NONE && attempts < 4) {
|
||||
s->proxy_auth_state.auth_type != HTTP_AUTH_NONE && auth_attempts < 4) {
|
||||
ffurl_closep(&s->hd);
|
||||
goto redo;
|
||||
} else
|
||||
|
@ -438,7 +448,7 @@ redo:
|
|||
/* Restart the authentication process with the new target, which
|
||||
* might use a different auth mechanism. */
|
||||
memset(&s->auth_state, 0, sizeof(s->auth_state));
|
||||
attempts = 0;
|
||||
auth_attempts = 0;
|
||||
goto redo;
|
||||
}
|
||||
return 0;
|
||||
|
@ -522,6 +532,7 @@ int ff_http_averror(int status_code, int default_averror)
|
|||
case 401: return AVERROR_HTTP_UNAUTHORIZED;
|
||||
case 403: return AVERROR_HTTP_FORBIDDEN;
|
||||
case 404: return AVERROR_HTTP_NOT_FOUND;
|
||||
case 429: return AVERROR_HTTP_TOO_MANY_REQUESTS;
|
||||
default: break;
|
||||
}
|
||||
if (status_code >= 400 && status_code <= 499)
|
||||
|
@ -558,6 +569,11 @@ static int http_write_reply(URLContext* h, int status_code)
|
|||
reply_code = 404;
|
||||
reply_text = "Not Found";
|
||||
break;
|
||||
case AVERROR_HTTP_TOO_MANY_REQUESTS:
|
||||
case 429:
|
||||
reply_code = 429;
|
||||
reply_text = "Too Many Requests";
|
||||
break;
|
||||
case 200:
|
||||
reply_code = 200;
|
||||
reply_text = "OK";
|
||||
|
@ -1080,7 +1096,7 @@ static void parse_cache_control(HTTPContext *s, const char *p)
|
|||
}
|
||||
}
|
||||
|
||||
static int process_line(URLContext *h, char *line, int line_count)
|
||||
static int process_line(URLContext *h, char *line, int line_count, int *parsed_http_code)
|
||||
{
|
||||
HTTPContext *s = h->priv_data;
|
||||
const char *auto_method = h->flags & AVIO_FLAG_READ ? "POST" : "GET";
|
||||
|
@ -1160,6 +1176,8 @@ static int process_line(URLContext *h, char *line, int line_count)
|
|||
|
||||
av_log(h, AV_LOG_TRACE, "http_code=%d\n", s->http_code);
|
||||
|
||||
*parsed_http_code = 1;
|
||||
|
||||
if ((ret = check_http_code(h, s->http_code, end)) < 0)
|
||||
return ret;
|
||||
}
|
||||
|
@ -1332,7 +1350,7 @@ static int http_read_header(URLContext *h)
|
|||
{
|
||||
HTTPContext *s = h->priv_data;
|
||||
char line[MAX_URL_SIZE];
|
||||
int err = 0;
|
||||
int err = 0, http_err = 0;
|
||||
|
||||
av_freep(&s->new_location);
|
||||
s->expires = 0;
|
||||
|
@ -1340,18 +1358,31 @@ static int http_read_header(URLContext *h)
|
|||
s->filesize_from_content_range = UINT64_MAX;
|
||||
|
||||
for (;;) {
|
||||
int parsed_http_code = 0;
|
||||
|
||||
if ((err = http_get_line(s, line, sizeof(line))) < 0)
|
||||
return err;
|
||||
|
||||
av_log(h, AV_LOG_TRACE, "header='%s'\n", line);
|
||||
|
||||
err = process_line(h, line, s->line_count);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = process_line(h, line, s->line_count, &parsed_http_code);
|
||||
if (err < 0) {
|
||||
if (parsed_http_code) {
|
||||
http_err = err;
|
||||
} else {
|
||||
/* Prefer to return HTTP code error if we've already seen one. */
|
||||
if (http_err)
|
||||
return http_err;
|
||||
else
|
||||
return err;
|
||||
}
|
||||
}
|
||||
if (err == 0)
|
||||
break;
|
||||
s->line_count++;
|
||||
}
|
||||
if (http_err)
|
||||
return http_err;
|
||||
|
||||
// filesize from Content-Range can always be used, even if using chunked Transfer-Encoding
|
||||
if (s->filesize_from_content_range != UINT64_MAX)
|
||||
|
@ -1673,6 +1704,8 @@ static int http_read_stream(URLContext *h, uint8_t *buf, int size)
|
|||
int err, read_ret;
|
||||
int64_t seek_ret;
|
||||
int reconnect_delay = 0;
|
||||
int reconnect_delay_total = 0;
|
||||
int conn_attempts = 1;
|
||||
|
||||
if (!s->hd)
|
||||
return AVERROR_EOF;
|
||||
|
@ -1701,14 +1734,17 @@ static int http_read_stream(URLContext *h, uint8_t *buf, int size)
|
|||
!(s->reconnect_at_eof && read_ret == AVERROR_EOF))
|
||||
break;
|
||||
|
||||
if (reconnect_delay > s->reconnect_delay_max)
|
||||
if (reconnect_delay > s->reconnect_delay_max || (s->reconnect_max_retries >= 0 && conn_attempts > s->reconnect_max_retries) ||
|
||||
reconnect_delay_total > s->reconnect_delay_total_max)
|
||||
return AVERROR(EIO);
|
||||
|
||||
av_log(h, AV_LOG_WARNING, "Will reconnect at %"PRIu64" in %d second(s), error=%s.\n", s->off, reconnect_delay, av_err2str(read_ret));
|
||||
err = ff_network_sleep_interruptible(1000U*1000*reconnect_delay, &h->interrupt_callback);
|
||||
if (err != AVERROR(ETIMEDOUT))
|
||||
return err;
|
||||
reconnect_delay_total += reconnect_delay;
|
||||
reconnect_delay = 1 + 2*reconnect_delay;
|
||||
conn_attempts++;
|
||||
seek_ret = http_seek_internal(h, target, SEEK_SET, 1);
|
||||
if (seek_ret >= 0 && seek_ret != target) {
|
||||
av_log(h, AV_LOG_ERROR, "Failed to reconnect at %"PRIu64".\n", target);
|
||||
|
@ -2049,7 +2085,7 @@ static int http_proxy_open(URLContext *h, const char *uri, int flags)
|
|||
char hostname[1024], hoststr[1024];
|
||||
char auth[1024], pathbuf[1024], *path;
|
||||
char lower_url[100];
|
||||
int port, ret = 0, attempts = 0;
|
||||
int port, ret = 0, auth_attempts = 0;
|
||||
HTTPAuthType cur_auth_type;
|
||||
char *authstr;
|
||||
|
||||
|
@ -2109,10 +2145,10 @@ redo:
|
|||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
attempts++;
|
||||
auth_attempts++;
|
||||
if (s->http_code == 407 &&
|
||||
(cur_auth_type == HTTP_AUTH_NONE || s->proxy_auth_state.stale) &&
|
||||
s->proxy_auth_state.auth_type != HTTP_AUTH_NONE && attempts < 2) {
|
||||
s->proxy_auth_state.auth_type != HTTP_AUTH_NONE && auth_attempts < 2) {
|
||||
ffurl_closep(&s->hd);
|
||||
goto redo;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "version_major.h"
|
||||
|
||||
#define LIBAVFORMAT_VERSION_MINOR 3
|
||||
#define LIBAVFORMAT_VERSION_MICRO 100
|
||||
#define LIBAVFORMAT_VERSION_MICRO 102
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||
LIBAVFORMAT_VERSION_MINOR, \
|
||||
|
|
|
@ -61,6 +61,7 @@ static const struct error_entry error_entries[] = {
|
|||
{ ERROR_TAG(HTTP_UNAUTHORIZED), "Server returned 401 Unauthorized (authorization failed)" },
|
||||
{ ERROR_TAG(HTTP_FORBIDDEN), "Server returned 403 Forbidden (access denied)" },
|
||||
{ ERROR_TAG(HTTP_NOT_FOUND), "Server returned 404 Not Found" },
|
||||
{ ERROR_TAG(HTTP_TOO_MANY_REQUESTS), "Server returned 429 Too Many Requests" },
|
||||
{ ERROR_TAG(HTTP_OTHER_4XX), "Server returned 4XX Client Error, but not one of 40{0,1,3,4}" },
|
||||
{ ERROR_TAG(HTTP_SERVER_ERROR), "Server returned 5XX Server Error reply" },
|
||||
#if !HAVE_STRERROR_R
|
||||
|
|
|
@ -79,6 +79,7 @@
|
|||
#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1')
|
||||
#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3')
|
||||
#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4')
|
||||
#define AVERROR_HTTP_TOO_MANY_REQUESTS FFERRTAG(0xF8,'4','2','9')
|
||||
#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X')
|
||||
#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X')
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@
|
|||
|
||||
#define LIBAVUTIL_VERSION_MAJOR 59
|
||||
#define LIBAVUTIL_VERSION_MINOR 16
|
||||
#define LIBAVUTIL_VERSION_MICRO 100
|
||||
#define LIBAVUTIL_VERSION_MICRO 101
|
||||
|
||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||
LIBAVUTIL_VERSION_MINOR, \
|
||||
|
|
|
@ -39,12 +39,12 @@ fate-iamf-ambisonic_1: CMD = transcode wav $(SRC) iamf "-auto_conversion_filters
|
|||
|
||||
FATE_IAMF_SAMPLES-$(call FRAMECRC, IAMF, OPUS) += fate-iamf-5_1-demux
|
||||
fate-iamf-5_1-demux: CMD = stream_demux iamf $(TARGET_SAMPLES)/iamf/test_000059.iamf "" \
|
||||
"-c:a copy -map 0" \
|
||||
"-c:a copy -frames:a 0 -map 0" \
|
||||
"-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_stream=index,id:stream_group_stream_disposition"
|
||||
|
||||
FATE_IAMF_SAMPLES-$(call REMUX, IAMF, OPUS_DECODER) += fate-iamf-5_1-copy
|
||||
fate-iamf-5_1-copy: CMD = stream_remux iamf $(TARGET_SAMPLES)/iamf/test_000059.iamf "" iamf \
|
||||
"-map 0 -stream_group map=0=0:st=0:st=1:st=2:st=3 -stream_group map=0=1:stg=0 -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3" "" "-c:a copy -map 0" \
|
||||
"-map 0 -stream_group map=0=0:st=0:st=1:st=2:st=3 -stream_group map=0=1:stg=0 -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3" "" "-c:a copy -frames:a 0 -map 0" \
|
||||
"-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_stream=index,id:stream_group_stream_disposition"
|
||||
|
||||
FATE_IAMF += $(FATE_IAMF-yes)
|
||||
|
|
|
@ -22,110 +22,6 @@
|
|||
#codec_id 3: opus
|
||||
#sample_rate 3: 48000
|
||||
#channel_layout_name 3: mono
|
||||
0, 0, 0, 960, 371, 0x552eba36, S=3, 10, 96, 136
|
||||
1, 0, 0, 960, 381, 0x6779b329, S=3, 10, 96, 136
|
||||
2, 0, 0, 960, 66, 0x4ce02142, S=3, 10, 96, 136
|
||||
3, 0, 0, 960, 67, 0x935223f9, S=3, 10, 96, 136
|
||||
0, 960, 960, 960, 313, 0xa5e19a4f, S=2, 96, 136
|
||||
1, 960, 960, 960, 339, 0xf83daf6a, S=2, 96, 136
|
||||
2, 960, 960, 960, 62, 0x80c91ca8, S=2, 96, 136
|
||||
3, 960, 960, 960, 64, 0xaae41dd7, S=2, 96, 136
|
||||
0, 1920, 1920, 960, 210, 0x5fc26f7a, S=2, 96, 136
|
||||
1, 1920, 1920, 960, 207, 0xc8c768e8, S=2, 96, 136
|
||||
2, 1920, 1920, 960, 75, 0x85012598, S=2, 96, 136
|
||||
3, 1920, 1920, 960, 94, 0x5dc52d3b, S=2, 96, 136
|
||||
0, 2880, 2880, 960, 211, 0x8f006c62, S=2, 96, 136
|
||||
1, 2880, 2880, 960, 215, 0x30c8674d, S=2, 96, 136
|
||||
2, 2880, 2880, 960, 88, 0x46772b87, S=2, 96, 136
|
||||
3, 2880, 2880, 960, 105, 0x831c3191, S=2, 96, 136
|
||||
0, 3840, 3840, 960, 340, 0x3c92a527, S=2, 96, 136
|
||||
1, 3840, 3840, 960, 303, 0x65e09e91, S=2, 96, 136
|
||||
2, 3840, 3840, 960, 121, 0xc45d3ec1, S=2, 96, 136
|
||||
3, 3840, 3840, 960, 126, 0xff3a44d7, S=2, 96, 136
|
||||
0, 4800, 4800, 960, 206, 0x3087662a, S=2, 96, 136
|
||||
1, 4800, 4800, 960, 206, 0xd2b469de, S=2, 96, 136
|
||||
2, 4800, 4800, 960, 124, 0xd9423baf, S=2, 96, 136
|
||||
3, 4800, 4800, 960, 121, 0x24073ab0, S=2, 96, 136
|
||||
0, 5760, 5760, 960, 212, 0x85686b01, S=2, 96, 136
|
||||
1, 5760, 5760, 960, 230, 0x7ce56f22, S=2, 96, 136
|
||||
2, 5760, 5760, 960, 128, 0xca6840ad, S=2, 96, 136
|
||||
3, 5760, 5760, 960, 138, 0xa1f24207, S=2, 96, 136
|
||||
0, 6720, 6720, 960, 220, 0xd40572ca, S=2, 96, 136
|
||||
1, 6720, 6720, 960, 223, 0x760c74ce, S=2, 96, 136
|
||||
2, 6720, 6720, 960, 125, 0xd0674094, S=2, 96, 136
|
||||
3, 6720, 6720, 960, 130, 0x58f64293, S=2, 96, 136
|
||||
0, 7680, 7680, 960, 249, 0x9b6c77bb, S=2, 96, 136
|
||||
1, 7680, 7680, 960, 247, 0x660475b6, S=2, 96, 136
|
||||
2, 7680, 7680, 960, 125, 0x43de3911, S=2, 96, 136
|
||||
3, 7680, 7680, 960, 122, 0x0d4137b3, S=2, 96, 136
|
||||
0, 8640, 8640, 960, 262, 0x0d718316, S=2, 96, 136
|
||||
1, 8640, 8640, 960, 260, 0xce698563, S=2, 96, 136
|
||||
2, 8640, 8640, 960, 121, 0x7f1b4025, S=2, 96, 136
|
||||
3, 8640, 8640, 960, 121, 0xdae34205, S=2, 96, 136
|
||||
0, 9600, 9600, 960, 266, 0x6ffb86f0, S=2, 96, 136
|
||||
1, 9600, 9600, 960, 266, 0xa16f87bb, S=2, 96, 136
|
||||
2, 9600, 9600, 960, 119, 0x57703c74, S=2, 96, 136
|
||||
3, 9600, 9600, 960, 114, 0x06853bf5, S=2, 96, 136
|
||||
0, 10560, 10560, 960, 269, 0x43078081, S=2, 96, 136
|
||||
1, 10560, 10560, 960, 255, 0xff767870, S=2, 96, 136
|
||||
2, 10560, 10560, 960, 117, 0x86a43b70, S=2, 96, 136
|
||||
3, 10560, 10560, 960, 114, 0x4be5388e, S=2, 96, 136
|
||||
0, 11520, 11520, 960, 244, 0xd56f7885, S=2, 96, 136
|
||||
1, 11520, 11520, 960, 241, 0xbd1777f2, S=2, 96, 136
|
||||
2, 11520, 11520, 960, 110, 0xce96366a, S=2, 96, 136
|
||||
3, 11520, 11520, 960, 109, 0x120234bd, S=2, 96, 136
|
||||
0, 12480, 12480, 960, 241, 0xb8847e12, S=2, 96, 136
|
||||
1, 12480, 12480, 960, 241, 0x1bd27430, S=2, 96, 136
|
||||
2, 12480, 12480, 960, 127, 0x38ce3ff0, S=2, 96, 136
|
||||
3, 12480, 12480, 960, 127, 0x9f763c9b, S=2, 96, 136
|
||||
0, 13440, 13440, 960, 241, 0x9ee4787e, S=2, 96, 136
|
||||
1, 13440, 13440, 960, 241, 0x85ad821d, S=2, 96, 136
|
||||
2, 13440, 13440, 960, 141, 0xdc414884, S=2, 96, 136
|
||||
3, 13440, 13440, 960, 134, 0x95c9405e, S=2, 96, 136
|
||||
0, 14400, 14400, 960, 241, 0x060c78e3, S=2, 96, 136
|
||||
1, 14400, 14400, 960, 241, 0x03bb7e7e, S=2, 96, 136
|
||||
2, 14400, 14400, 960, 133, 0xfe184321, S=2, 96, 136
|
||||
3, 14400, 14400, 960, 125, 0x70523d7d, S=2, 96, 136
|
||||
0, 15360, 15360, 960, 241, 0xf7c57f6b, S=2, 96, 136
|
||||
1, 15360, 15360, 960, 241, 0x58ed7656, S=2, 96, 136
|
||||
2, 15360, 15360, 960, 119, 0x33b83af3, S=2, 96, 136
|
||||
3, 15360, 15360, 960, 121, 0x3f353eb3, S=2, 96, 136
|
||||
0, 16320, 16320, 960, 241, 0xc0077948, S=2, 96, 136
|
||||
1, 16320, 16320, 960, 241, 0x886a7f2a, S=2, 96, 136
|
||||
2, 16320, 16320, 960, 118, 0x122d3d16, S=2, 96, 136
|
||||
3, 16320, 16320, 960, 123, 0x673d3bbd, S=2, 96, 136
|
||||
0, 17280, 17280, 960, 241, 0x51777d39, S=2, 96, 136
|
||||
1, 17280, 17280, 960, 241, 0x25aa7240, S=2, 96, 136
|
||||
2, 17280, 17280, 960, 116, 0xe4ff3d75, S=2, 96, 136
|
||||
3, 17280, 17280, 960, 114, 0x95c638df, S=2, 96, 136
|
||||
0, 18240, 18240, 960, 241, 0x8a038527, S=2, 96, 136
|
||||
1, 18240, 18240, 960, 241, 0x151877bf, S=2, 96, 136
|
||||
2, 18240, 18240, 960, 116, 0xcb0238e6, S=2, 96, 136
|
||||
3, 18240, 18240, 960, 122, 0xc1fb4201, S=2, 96, 136
|
||||
0, 19200, 19200, 960, 241, 0xff1a839d, S=2, 96, 136
|
||||
1, 19200, 19200, 960, 241, 0x243c7927, S=2, 96, 136
|
||||
2, 19200, 19200, 960, 117, 0x4b723619, S=2, 96, 136
|
||||
3, 19200, 19200, 960, 113, 0xccf439e2, S=2, 96, 136
|
||||
0, 20160, 20160, 960, 241, 0x9aab7903, S=2, 96, 136
|
||||
1, 20160, 20160, 960, 241, 0x718b795d, S=2, 96, 136
|
||||
2, 20160, 20160, 960, 123, 0xd2fb3c10, S=2, 96, 136
|
||||
3, 20160, 20160, 960, 130, 0x28d03f70, S=2, 96, 136
|
||||
0, 21120, 21120, 960, 241, 0xc4246f83, S=2, 96, 136
|
||||
1, 21120, 21120, 960, 241, 0xec9577fe, S=2, 96, 136
|
||||
2, 21120, 21120, 960, 128, 0x269b4147, S=2, 96, 136
|
||||
3, 21120, 21120, 960, 135, 0xeb5d473a, S=2, 96, 136
|
||||
0, 22080, 22080, 960, 241, 0x4b69803f, S=2, 96, 136
|
||||
1, 22080, 22080, 960, 241, 0xd9d37f47, S=2, 96, 136
|
||||
2, 22080, 22080, 960, 122, 0x521c3fd0, S=2, 96, 136
|
||||
3, 22080, 22080, 960, 123, 0x9f0c3b46, S=2, 96, 136
|
||||
0, 23040, 23040, 960, 241, 0x2dbc77e4, S=2, 96, 136
|
||||
1, 23040, 23040, 960, 241, 0x8a4e784f, S=2, 96, 136
|
||||
2, 23040, 23040, 960, 179, 0xa53e5481, S=2, 96, 136
|
||||
3, 23040, 23040, 960, 175, 0x18d157ee, S=2, 96, 136
|
||||
0, 24000, 24000, 960, 241, 0x4f5b722d, S=3, 10, 96, 136
|
||||
1, 24000, 24000, 960, 241, 0xc7e67e1e, S=3, 10, 96, 136
|
||||
2, 24000, 24000, 960, 189, 0x736c5f4c, S=3, 10, 96, 136
|
||||
3, 24000, 24000, 960, 189, 0x63256352, S=3, 10, 96, 136
|
||||
[STREAM_GROUP]
|
||||
index=0
|
||||
id=0x12c
|
||||
|
|
|
@ -22,110 +22,6 @@
|
|||
#codec_id 3: opus
|
||||
#sample_rate 3: 48000
|
||||
#channel_layout_name 3: mono
|
||||
0, 0, 0, 960, 371, 0x552eba36, S=3, 10, 96, 136
|
||||
1, 0, 0, 960, 381, 0x6779b329, S=3, 10, 96, 136
|
||||
2, 0, 0, 960, 66, 0x4ce02142, S=3, 10, 96, 136
|
||||
3, 0, 0, 960, 67, 0x935223f9, S=3, 10, 96, 136
|
||||
0, 960, 960, 960, 313, 0xa5e19a4f, S=2, 96, 136
|
||||
1, 960, 960, 960, 339, 0xf83daf6a, S=2, 96, 136
|
||||
2, 960, 960, 960, 62, 0x80c91ca8, S=2, 96, 136
|
||||
3, 960, 960, 960, 64, 0xaae41dd7, S=2, 96, 136
|
||||
0, 1920, 1920, 960, 210, 0x5fc26f7a, S=2, 96, 136
|
||||
1, 1920, 1920, 960, 207, 0xc8c768e8, S=2, 96, 136
|
||||
2, 1920, 1920, 960, 75, 0x85012598, S=2, 96, 136
|
||||
3, 1920, 1920, 960, 94, 0x5dc52d3b, S=2, 96, 136
|
||||
0, 2880, 2880, 960, 211, 0x8f006c62, S=2, 96, 136
|
||||
1, 2880, 2880, 960, 215, 0x30c8674d, S=2, 96, 136
|
||||
2, 2880, 2880, 960, 88, 0x46772b87, S=2, 96, 136
|
||||
3, 2880, 2880, 960, 105, 0x831c3191, S=2, 96, 136
|
||||
0, 3840, 3840, 960, 340, 0x3c92a527, S=2, 96, 136
|
||||
1, 3840, 3840, 960, 303, 0x65e09e91, S=2, 96, 136
|
||||
2, 3840, 3840, 960, 121, 0xc45d3ec1, S=2, 96, 136
|
||||
3, 3840, 3840, 960, 126, 0xff3a44d7, S=2, 96, 136
|
||||
0, 4800, 4800, 960, 206, 0x3087662a, S=2, 96, 136
|
||||
1, 4800, 4800, 960, 206, 0xd2b469de, S=2, 96, 136
|
||||
2, 4800, 4800, 960, 124, 0xd9423baf, S=2, 96, 136
|
||||
3, 4800, 4800, 960, 121, 0x24073ab0, S=2, 96, 136
|
||||
0, 5760, 5760, 960, 212, 0x85686b01, S=2, 96, 136
|
||||
1, 5760, 5760, 960, 230, 0x7ce56f22, S=2, 96, 136
|
||||
2, 5760, 5760, 960, 128, 0xca6840ad, S=2, 96, 136
|
||||
3, 5760, 5760, 960, 138, 0xa1f24207, S=2, 96, 136
|
||||
0, 6720, 6720, 960, 220, 0xd40572ca, S=2, 96, 136
|
||||
1, 6720, 6720, 960, 223, 0x760c74ce, S=2, 96, 136
|
||||
2, 6720, 6720, 960, 125, 0xd0674094, S=2, 96, 136
|
||||
3, 6720, 6720, 960, 130, 0x58f64293, S=2, 96, 136
|
||||
0, 7680, 7680, 960, 249, 0x9b6c77bb, S=2, 96, 136
|
||||
1, 7680, 7680, 960, 247, 0x660475b6, S=2, 96, 136
|
||||
2, 7680, 7680, 960, 125, 0x43de3911, S=2, 96, 136
|
||||
3, 7680, 7680, 960, 122, 0x0d4137b3, S=2, 96, 136
|
||||
0, 8640, 8640, 960, 262, 0x0d718316, S=2, 96, 136
|
||||
1, 8640, 8640, 960, 260, 0xce698563, S=2, 96, 136
|
||||
2, 8640, 8640, 960, 121, 0x7f1b4025, S=2, 96, 136
|
||||
3, 8640, 8640, 960, 121, 0xdae34205, S=2, 96, 136
|
||||
0, 9600, 9600, 960, 266, 0x6ffb86f0, S=2, 96, 136
|
||||
1, 9600, 9600, 960, 266, 0xa16f87bb, S=2, 96, 136
|
||||
2, 9600, 9600, 960, 119, 0x57703c74, S=2, 96, 136
|
||||
3, 9600, 9600, 960, 114, 0x06853bf5, S=2, 96, 136
|
||||
0, 10560, 10560, 960, 269, 0x43078081, S=2, 96, 136
|
||||
1, 10560, 10560, 960, 255, 0xff767870, S=2, 96, 136
|
||||
2, 10560, 10560, 960, 117, 0x86a43b70, S=2, 96, 136
|
||||
3, 10560, 10560, 960, 114, 0x4be5388e, S=2, 96, 136
|
||||
0, 11520, 11520, 960, 244, 0xd56f7885, S=2, 96, 136
|
||||
1, 11520, 11520, 960, 241, 0xbd1777f2, S=2, 96, 136
|
||||
2, 11520, 11520, 960, 110, 0xce96366a, S=2, 96, 136
|
||||
3, 11520, 11520, 960, 109, 0x120234bd, S=2, 96, 136
|
||||
0, 12480, 12480, 960, 241, 0xb8847e12, S=2, 96, 136
|
||||
1, 12480, 12480, 960, 241, 0x1bd27430, S=2, 96, 136
|
||||
2, 12480, 12480, 960, 127, 0x38ce3ff0, S=2, 96, 136
|
||||
3, 12480, 12480, 960, 127, 0x9f763c9b, S=2, 96, 136
|
||||
0, 13440, 13440, 960, 241, 0x9ee4787e, S=2, 96, 136
|
||||
1, 13440, 13440, 960, 241, 0x85ad821d, S=2, 96, 136
|
||||
2, 13440, 13440, 960, 141, 0xdc414884, S=2, 96, 136
|
||||
3, 13440, 13440, 960, 134, 0x95c9405e, S=2, 96, 136
|
||||
0, 14400, 14400, 960, 241, 0x060c78e3, S=2, 96, 136
|
||||
1, 14400, 14400, 960, 241, 0x03bb7e7e, S=2, 96, 136
|
||||
2, 14400, 14400, 960, 133, 0xfe184321, S=2, 96, 136
|
||||
3, 14400, 14400, 960, 125, 0x70523d7d, S=2, 96, 136
|
||||
0, 15360, 15360, 960, 241, 0xf7c57f6b, S=2, 96, 136
|
||||
1, 15360, 15360, 960, 241, 0x58ed7656, S=2, 96, 136
|
||||
2, 15360, 15360, 960, 119, 0x33b83af3, S=2, 96, 136
|
||||
3, 15360, 15360, 960, 121, 0x3f353eb3, S=2, 96, 136
|
||||
0, 16320, 16320, 960, 241, 0xc0077948, S=2, 96, 136
|
||||
1, 16320, 16320, 960, 241, 0x886a7f2a, S=2, 96, 136
|
||||
2, 16320, 16320, 960, 118, 0x122d3d16, S=2, 96, 136
|
||||
3, 16320, 16320, 960, 123, 0x673d3bbd, S=2, 96, 136
|
||||
0, 17280, 17280, 960, 241, 0x51777d39, S=2, 96, 136
|
||||
1, 17280, 17280, 960, 241, 0x25aa7240, S=2, 96, 136
|
||||
2, 17280, 17280, 960, 116, 0xe4ff3d75, S=2, 96, 136
|
||||
3, 17280, 17280, 960, 114, 0x95c638df, S=2, 96, 136
|
||||
0, 18240, 18240, 960, 241, 0x8a038527, S=2, 96, 136
|
||||
1, 18240, 18240, 960, 241, 0x151877bf, S=2, 96, 136
|
||||
2, 18240, 18240, 960, 116, 0xcb0238e6, S=2, 96, 136
|
||||
3, 18240, 18240, 960, 122, 0xc1fb4201, S=2, 96, 136
|
||||
0, 19200, 19200, 960, 241, 0xff1a839d, S=2, 96, 136
|
||||
1, 19200, 19200, 960, 241, 0x243c7927, S=2, 96, 136
|
||||
2, 19200, 19200, 960, 117, 0x4b723619, S=2, 96, 136
|
||||
3, 19200, 19200, 960, 113, 0xccf439e2, S=2, 96, 136
|
||||
0, 20160, 20160, 960, 241, 0x9aab7903, S=2, 96, 136
|
||||
1, 20160, 20160, 960, 241, 0x718b795d, S=2, 96, 136
|
||||
2, 20160, 20160, 960, 123, 0xd2fb3c10, S=2, 96, 136
|
||||
3, 20160, 20160, 960, 130, 0x28d03f70, S=2, 96, 136
|
||||
0, 21120, 21120, 960, 241, 0xc4246f83, S=2, 96, 136
|
||||
1, 21120, 21120, 960, 241, 0xec9577fe, S=2, 96, 136
|
||||
2, 21120, 21120, 960, 128, 0x269b4147, S=2, 96, 136
|
||||
3, 21120, 21120, 960, 135, 0xeb5d473a, S=2, 96, 136
|
||||
0, 22080, 22080, 960, 241, 0x4b69803f, S=2, 96, 136
|
||||
1, 22080, 22080, 960, 241, 0xd9d37f47, S=2, 96, 136
|
||||
2, 22080, 22080, 960, 122, 0x521c3fd0, S=2, 96, 136
|
||||
3, 22080, 22080, 960, 123, 0x9f0c3b46, S=2, 96, 136
|
||||
0, 23040, 23040, 960, 241, 0x2dbc77e4, S=2, 96, 136
|
||||
1, 23040, 23040, 960, 241, 0x8a4e784f, S=2, 96, 136
|
||||
2, 23040, 23040, 960, 179, 0xa53e5481, S=2, 96, 136
|
||||
3, 23040, 23040, 960, 175, 0x18d157ee, S=2, 96, 136
|
||||
0, 24000, 24000, 960, 241, 0x4f5b722d, S=3, 10, 96, 136
|
||||
1, 24000, 24000, 960, 241, 0xc7e67e1e, S=3, 10, 96, 136
|
||||
2, 24000, 24000, 960, 189, 0x736c5f4c, S=3, 10, 96, 136
|
||||
3, 24000, 24000, 960, 189, 0x63256352, S=3, 10, 96, 136
|
||||
[STREAM_GROUP]
|
||||
index=0
|
||||
id=0x12c
|
||||
|
|
Loading…
Reference in New Issue