Commit 89f6e8a2 authored by Martin Storsjö's avatar Martin Storsjö

flvdec: Interpret a toplevel 'object' type metadata item as normal metadata, too

Previously, we've only passed the key string on to the recursive
amf_parse_object for the mixedarray type, not for 'object'. By
passing the key string on, the recursive amf_parse_object can
store the amf objects as metadata.

This kind of data was seen in data from XSplit Broadcaster, received
over RTMP via Wowza. This patch allows reading this metadata.
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent d7edd359
...@@ -240,22 +240,18 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst ...@@ -240,22 +240,18 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst
if(amf_get_string(ioc, str_val, sizeof(str_val)) < 0) if(amf_get_string(ioc, str_val, sizeof(str_val)) < 0)
return -1; return -1;
break; break;
case AMF_DATA_TYPE_OBJECT: { case AMF_DATA_TYPE_OBJECT:
unsigned int keylen;
if ((vstream || astream) && key && !strcmp(KEYFRAMES_TAG, key) && depth == 1) if ((vstream || astream) && key && !strcmp(KEYFRAMES_TAG, key) && depth == 1)
if (parse_keyframes_index(s, ioc, vstream ? vstream : astream, if (parse_keyframes_index(s, ioc, vstream ? vstream : astream,
max_pos) < 0) max_pos) < 0)
return -1; return -1;
while(avio_tell(ioc) < max_pos - 2 && (keylen = avio_rb16(ioc))) { while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) {
avio_skip(ioc, keylen); //skip key string if (amf_parse_object(s, astream, vstream, str_val, max_pos, depth + 1) < 0)
if(amf_parse_object(s, NULL, NULL, NULL, max_pos, depth + 1) < 0)
return -1; //if we couldn't skip, bomb out. return -1; //if we couldn't skip, bomb out.
} }
if(avio_r8(ioc) != AMF_END_OF_OBJECT) if(avio_r8(ioc) != AMF_END_OF_OBJECT)
return -1; return -1;
}
break; break;
case AMF_DATA_TYPE_NULL: case AMF_DATA_TYPE_NULL:
case AMF_DATA_TYPE_UNDEFINED: case AMF_DATA_TYPE_UNDEFINED:
......
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