diff --git a/trunk/research/librtmp/srs_ingest_rtmp.c b/trunk/research/librtmp/srs_ingest_rtmp.c index d4c8606cd..c0db88f91 100644 --- a/trunk/research/librtmp/srs_ingest_rtmp.c +++ b/trunk/research/librtmp/srs_ingest_rtmp.c @@ -127,6 +127,12 @@ int proxy(srs_rtmp_t irtmp, srs_rtmp_t ortmp) return ret; } + if (!srs_utils_flv_tag_is_ok(type)) { + srs_human_trace("ignore invalid flv tag=%d, dts=%d, %d bytes", type, timestamp, size); + free(data); + continue; + } + if ((ret = srs_human_print_rtmp_packet(type, timestamp, data, size)) != 0) { srs_human_trace("print packet failed. ret=%d", ret); return ret; diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index b2c623718..dffd90149 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -1973,6 +1973,11 @@ int srs_utils_parse_timestamp( return ret; } + +srs_bool srs_utils_flv_tag_is_ok(char type) +{ + return type == SRS_RTMP_TYPE_AUDIO || type == SRS_RTMP_TYPE_VIDEO || type == SRS_RTMP_TYPE_SCRIPT; +} char srs_utils_flv_video_codec_id(char* data, int size) { @@ -2324,7 +2329,7 @@ int srs_human_print_rtmp_packet(char type, u_int32_t timestamp, char* data, int ); } else if (type == SRS_RTMP_TYPE_SCRIPT) { srs_human_verbose("Data packet type=%s, time=%d, size=%d", - srs_human_flv_tag_type2string(type), timestamp, size); + srs_human_flv_tag_type2string(type), timestamp, size); int nparsed = 0; while (nparsed < size) { int nb_parsed_this = 0; @@ -2332,7 +2337,7 @@ int srs_human_print_rtmp_packet(char type, u_int32_t timestamp, char* data, int if (amf0 == NULL) { break; } - + nparsed += nb_parsed_this; char* amf0_str = NULL; diff --git a/trunk/src/libs/srs_librtmp.hpp b/trunk/src/libs/srs_librtmp.hpp index 744575112..aee8b7a9f 100644 --- a/trunk/src/libs/srs_librtmp.hpp +++ b/trunk/src/libs/srs_librtmp.hpp @@ -655,6 +655,12 @@ extern int srs_utils_parse_timestamp( u_int32_t time, char type, char* data, int size, u_int32_t* ppts ); + +/** + * whether the flv tag specified by param type is ok. + * @return true when tag is video/audio/script-data; otherwise, false. + */ +extern srs_bool srs_utils_flv_tag_is_ok(char type); /** * get the CodecID of video tag.