diff -urp rtmpdump-2.3_orig/librtmp/rtmp.c rtmpdump-2.3/librtmp/rtmp.c --- rtmpdump-2.3_orig/librtmp/rtmp.c 2010-06-30 23:58:35.000000000 +0400 +++ rtmpdump-2.3/librtmp/rtmp.c 2011-02-12 14:31:25.000000000 +0300 @@ -261,6 +261,13 @@ RTMP_Init(RTMP *r) } void +RTMP_SetUserCallbacks(RTMP *r, RTMP_UserCallbacks *cb) +{ + r->m_user_callbacks.user_data = cb->user_data; + r->m_user_callbacks.metadata = cb->metadata; +} + +void RTMP_EnableWrite(RTMP *r) { r->Link.protocol |= RTMP_FEATURE_WRITE; @@ -2630,6 +2637,8 @@ HandleMetadata(RTMP *r, char *body, unsi return FALSE; } + if (r->m_user_callbacks.metadata) + r->m_user_callbacks.metadata(r->m_user_callbacks.user_data, &obj); AMF_Dump(&obj); AMFProp_GetString(AMF_GetProp(&obj, NULL, 0), &metastring); @@ -3475,6 +3484,8 @@ RTMP_Close(RTMP *r) r->Link.rc4keyOut = NULL; } #endif + + memset(&r->m_user_callbacks, 0, sizeof(RTMP_UserCallbacks)); } int diff -urp rtmpdump-2.3_orig/librtmp/rtmp.h rtmpdump-2.3/librtmp/rtmp.h --- rtmpdump-2.3_orig/librtmp/rtmp.h 2010-06-30 23:58:35.000000000 +0400 +++ rtmpdump-2.3/librtmp/rtmp.h 2011-02-12 14:24:18.000000000 +0300 @@ -208,6 +208,12 @@ extern "C" int num; } RTMP_METHOD; + typedef struct RTMP_UserCallbacks + { + void *user_data; + void (*metadata)(void *user_data, AMFObject *obj); + } RTMP_UserCallbacks; + typedef struct RTMP { int m_inChunkSize; @@ -252,6 +258,7 @@ extern "C" RTMPPacket m_write; RTMPSockBuf m_sb; RTMP_LNK Link; + RTMP_UserCallbacks m_user_callbacks; } RTMP; int RTMP_ParseURL(const char *url, int *protocol, AVal *host, @@ -307,6 +314,8 @@ extern "C" void RTMP_Free(RTMP *r); void RTMP_EnableWrite(RTMP *r); + void RTMP_SetUserCallbacks(RTMP *r, RTMP_UserCallbacks *cb); + int RTMP_LibVersion(void); void RTMP_UserInterrupt(void); /* user typed Ctrl-C */