refine dvr and rtmp dump, write the original data.

pull/133/head
winlin 10 years ago
parent a402ca7120
commit 5661fc2676

@ -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;
}

@ -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

@ -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.

@ -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;

@ -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"

@ -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));

Loading…
Cancel
Save