1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

refine dvr and rtmp dump, write the original data.

This commit is contained in:
winlin 2015-01-07 15:01:58 +08:00
parent a402ca7120
commit 5661fc2676
6 changed files with 15 additions and 10 deletions

View file

@ -273,7 +273,7 @@ int SrsDvrPlan::on_meta_data(SrsOnMetaDataPacket* metadata)
} }
SrsAutoFree(char, payload); SrsAutoFree(char, payload);
if ((ret = enc->write_metadata(payload, size)) != ERROR_SUCCESS) { if ((ret = enc->write_metadata(18, payload, size)) != ERROR_SUCCESS) {
return ret; return ret;
} }

View file

@ -110,7 +110,7 @@ int SrsFlvEncoder::write_header(char flv_header[9])
return ret; return ret;
} }
int SrsFlvEncoder::write_metadata(char* data, int size) int SrsFlvEncoder::write_metadata(char type, char* data, int size)
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
@ -118,7 +118,7 @@ int SrsFlvEncoder::write_metadata(char* data, int size)
// 11 bytes tag header // 11 bytes tag header
static char 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, // 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, (char)0x00, (char)0x00, // Timestamp UI24 Time in milliseconds at which the data in this tag applies.
(char)0x00, // TimestampExtended UI8 (char)0x00, // TimestampExtended UI8

View file

@ -66,12 +66,13 @@ public:
virtual int write_header(char flv_header[9]); virtual int write_header(char flv_header[9]);
/** /**
* write flv metadata. * write flv metadata.
* @param type, the type of data, or other message type.
* @param data, the amf0 metadata which serialize from: * @param data, the amf0 metadata which serialize from:
* AMF0 string: onMetaData, * AMF0 string: onMetaData,
* AMF0 object: the metadata object. * AMF0 object: the metadata object.
* @remark assert data is not NULL. * @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. * write audio/video packet.
* @remark assert data is not NULL. * @remark assert data is not NULL.

View file

@ -843,8 +843,11 @@ int srs_rtmp_read_packet(srs_rtmp_t rtmp, char* type, u_int32_t* timestamp, char
// detach bytes from packet. // detach bytes from packet.
msg->payload = NULL; msg->payload = NULL;
} else { } else {
// ignore and continue *type = msg->header.message_type;
continue; *data = (char*)msg->payload;
*size = (int)msg->size;
// detach bytes from packet.
msg->payload = NULL;
} }
// got expected message. // 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) { } else if (type == SRS_RTMP_TYPE_VIDEO) {
return context->enc.write_video(time, data, size); return context->enc.write_video(time, data, size);
} else { } else {
return context->enc.write_metadata(data, size); return context->enc.write_metadata(type, data, size);
} }
return ret; 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); srs_freep(amf0_str);
} }
} else { } else {
srs_human_trace("Unknown packet type=%s, dts=%d, pts=%d, size=%d", srs_human_trace("Unknown packet type=%#x, dts=%d, pts=%d, size=%d",
srs_human_flv_tag_type2string(type), timestamp, pts, size); type, timestamp, pts, size);
} }
return ret; return ret;

View file

@ -241,6 +241,7 @@ extern int srs_rtmp_bandwidth_check(srs_rtmp_t rtmp,
* SRS_RTMP_TYPE_AUDIO, FlvTagAudio * SRS_RTMP_TYPE_AUDIO, FlvTagAudio
* SRS_RTMP_TYPE_VIDEO, FlvTagVideo * SRS_RTMP_TYPE_VIDEO, FlvTagVideo
* SRS_RTMP_TYPE_SCRIPT, FlvTagScript * SRS_RTMP_TYPE_SCRIPT, FlvTagScript
* otherswise, invalid type.
* @param timestamp, in ms, overflow in 50days * @param timestamp, in ms, overflow in 50days
* @param data, the packet data, according to type: * @param data, the packet data, according to type:
* FlvTagAudio, @see "E.4.2.1 AUDIODATA" * FlvTagAudio, @see "E.4.2.1 AUDIODATA"

View file

@ -460,7 +460,7 @@ VOID TEST(KernelFlvTest, FlvEncoderWriteMetadata)
}; };
char pts[] = { (char)0x00, (char)0x00, (char)0x00, (char)19 }; 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); ASSERT_TRUE(11 + 8 + 4 == fs.offset);
EXPECT_TRUE(srs_bytes_equals(tag_header, fs.data, 11)); EXPECT_TRUE(srs_bytes_equals(tag_header, fs.data, 11));