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:
parent
a402ca7120
commit
5661fc2676
6 changed files with 15 additions and 10 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue