]> granicus.if.org Git - rtmpdump/commitdiff
Use metadata to set dataType, to help finish dataType search earlier
authorhyc <hyc@400ebc74-4327-4243-bc38-086b20814532>
Mon, 24 May 2010 13:02:37 +0000 (13:02 +0000)
committerhyc <hyc@400ebc74-4327-4243-bc38-086b20814532>
Mon, 24 May 2010 13:02:37 +0000 (13:02 +0000)
git-svn-id: svn://svn.mplayerhq.hu/rtmpdump/trunk@480 400ebc74-4327-4243-bc38-086b20814532

librtmp/rtmp.c

index 6eafb603b388bc6870a9b4ccbda3360ef74e84b3..6a562bee7b22494b86592601b7f8602b1f7ae1af 100644 (file)
@@ -2438,6 +2438,32 @@ RTMP_FindFirstMatchingProperty(AMFObject *obj, const AVal *name,
   return false;
 }
 
+/* Like above, but only check if name is a prefix of property */
+bool
+RTMP_FindPrefixProperty(AMFObject *obj, const AVal *name,
+                              AMFObjectProperty * p)
+{
+  int n;
+  for (n = 0; n < obj->o_num; n++)
+    {
+      AMFObjectProperty *prop = AMF_GetProp(obj, NULL, n);
+
+      if (prop->p_name.av_len > name->av_len &&
+         !memcmp(prop->p_name.av_val, name->av_val, name->av_len))
+       {
+         *p = *prop;
+         return true;
+       }
+
+      if (prop->p_type == AMF_OBJECT)
+       {
+         if (RTMP_FindPrefixProperty(&prop->p_vu.p_object, name, p))
+           return true;
+       }
+    }
+  return false;
+}
+
 static bool
 DumpMetaData(AMFObject *obj)
 {
@@ -2490,6 +2516,8 @@ DumpMetaData(AMFObject *obj)
 
 SAVC(onMetaData);
 SAVC(duration);
+SAVC(video);
+SAVC(audio);
 
 static bool
 HandleMetadata(RTMP *r, char *body, unsigned int len)
@@ -2522,6 +2550,11 @@ HandleMetadata(RTMP *r, char *body, unsigned int len)
          r->m_fDuration = prop.p_vu.p_number;
          /*RTMP_Log(RTMP_LOGDEBUG, "Set duration: %.2f", m_fDuration); */
        }
+      /* Search for audio or video tags */
+      if (RTMP_FindPrefixProperty(&obj, &av_video, &prop))
+        r->m_read.dataType |= 1;
+      if (RTMP_FindPrefixProperty(&obj, &av_audio, &prop))
+        r->m_read.dataType |= 4;
       ret = true;
     }
   AMF_Reset(&obj);