diff --git a/trunk/src/app/srs_app_dvr.cpp b/trunk/src/app/srs_app_dvr.cpp index 631513698..4d823666c 100644 --- a/trunk/src/app/srs_app_dvr.cpp +++ b/trunk/src/app/srs_app_dvr.cpp @@ -273,7 +273,7 @@ int SrsDvrPlan::on_meta_data(SrsOnMetaDataPacket* metadata) } SrsAutoFree(char, payload); - if ((ret = enc->write_metadata(payload, size)) != ERROR_SUCCESS) { + if ((ret = enc->write_metadata(18, payload, size)) != ERROR_SUCCESS) { return ret; } diff --git a/trunk/src/kernel/srs_kernel_flv.cpp b/trunk/src/kernel/srs_kernel_flv.cpp index 504cda803..c7aeb6ac2 100644 --- a/trunk/src/kernel/srs_kernel_flv.cpp +++ b/trunk/src/kernel/srs_kernel_flv.cpp @@ -110,7 +110,7 @@ int SrsFlvEncoder::write_header(char flv_header[9]) return ret; } -int SrsFlvEncoder::write_metadata(char* data, int size) +int SrsFlvEncoder::write_metadata(char type, char* data, int size) { int ret = ERROR_SUCCESS; @@ -118,7 +118,7 @@ int SrsFlvEncoder::write_metadata(char* data, int size) // 11 bytes tag header static char tag_header[] = { - (char)18, // TagType UB [5], 18 = script data + (char)type, // TagType UB [5], 18 = script data (char)0x00, (char)0x00, (char)0x00, // DataSize UI24 Length of the message. (char)0x00, (char)0x00, (char)0x00, // Timestamp UI24 Time in milliseconds at which the data in this tag applies. (char)0x00, // TimestampExtended UI8 diff --git a/trunk/src/kernel/srs_kernel_flv.hpp b/trunk/src/kernel/srs_kernel_flv.hpp index 49a1be685..52a30837f 100644 --- a/trunk/src/kernel/srs_kernel_flv.hpp +++ b/trunk/src/kernel/srs_kernel_flv.hpp @@ -66,12 +66,13 @@ public: virtual int write_header(char flv_header[9]); /** * write flv metadata. + * @param type, the type of data, or other message type. * @param data, the amf0 metadata which serialize from: * AMF0 string: onMetaData, * AMF0 object: the metadata object. * @remark assert data is not NULL. */ - virtual int write_metadata(char* data, int size); + virtual int write_metadata(char type, char* data, int size); /** * write audio/video packet. * @remark assert data is not NULL. diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index ccf1918f2..0a85bd170 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -843,8 +843,11 @@ int srs_rtmp_read_packet(srs_rtmp_t rtmp, char* type, u_int32_t* timestamp, char // detach bytes from packet. msg->payload = NULL; } else { - // ignore and continue - continue; + *type = msg->header.message_type; + *data = (char*)msg->payload; + *size = (int)msg->size; + // detach bytes from packet. + msg->payload = NULL; } // got expected message. @@ -1714,7 +1717,7 @@ int srs_flv_write_tag(srs_flv_t flv, char type, int32_t time, char* data, int si } else if (type == SRS_RTMP_TYPE_VIDEO) { return context->enc.write_video(time, data, size); } else { - return context->enc.write_metadata(data, size); + return context->enc.write_metadata(type, data, size); } return ret; @@ -2476,8 +2479,8 @@ int srs_human_print_rtmp_packet(char type, u_int32_t timestamp, char* data, int srs_freep(amf0_str); } } else { - srs_human_trace("Unknown packet type=%s, dts=%d, pts=%d, size=%d", - srs_human_flv_tag_type2string(type), timestamp, pts, size); + srs_human_trace("Unknown packet type=%#x, dts=%d, pts=%d, size=%d", + type, timestamp, pts, size); } return ret; diff --git a/trunk/src/libs/srs_librtmp.hpp b/trunk/src/libs/srs_librtmp.hpp index c2e365407..3a26519af 100644 --- a/trunk/src/libs/srs_librtmp.hpp +++ b/trunk/src/libs/srs_librtmp.hpp @@ -241,6 +241,7 @@ extern int srs_rtmp_bandwidth_check(srs_rtmp_t rtmp, * SRS_RTMP_TYPE_AUDIO, FlvTagAudio * SRS_RTMP_TYPE_VIDEO, FlvTagVideo * SRS_RTMP_TYPE_SCRIPT, FlvTagScript +* otherswise, invalid type. * @param timestamp, in ms, overflow in 50days * @param data, the packet data, according to type: * FlvTagAudio, @see "E.4.2.1 AUDIODATA" diff --git a/trunk/src/utest/srs_utest_kernel.cpp b/trunk/src/utest/srs_utest_kernel.cpp index 52124ff68..e5fa21f90 100644 --- a/trunk/src/utest/srs_utest_kernel.cpp +++ b/trunk/src/utest/srs_utest_kernel.cpp @@ -460,7 +460,7 @@ VOID TEST(KernelFlvTest, FlvEncoderWriteMetadata) }; char pts[] = { (char)0x00, (char)0x00, (char)0x00, (char)19 }; - ASSERT_TRUE(ERROR_SUCCESS == enc.write_metadata(md, 8)); + ASSERT_TRUE(ERROR_SUCCESS == enc.write_metadata(18, md, 8)); ASSERT_TRUE(11 + 8 + 4 == fs.offset); EXPECT_TRUE(srs_bytes_equals(tag_header, fs.data, 11));