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

supprt inject flv

This commit is contained in:
winlin 2014-05-28 19:01:47 +08:00
parent 4970664e37
commit 22968c85df
10 changed files with 313 additions and 184 deletions

View file

@ -491,6 +491,34 @@ int srs_flv_read_tag_data(srs_flv_t flv, char* data, int32_t size)
return ret;
}
int srs_flv_write_header(srs_flv_t flv, char header[9])
{
int ret = ERROR_SUCCESS;
FlvContext* context = (FlvContext*)flv;
if ((ret = context->enc.write_header(header)) != ERROR_SUCCESS) {
return ret;
}
return ret;
}
int srs_flv_write_tag(srs_flv_t flv, char type, int32_t time, char* data, int size)
{
int ret = ERROR_SUCCESS;
FlvContext* context = (FlvContext*)flv;
if (type == SRS_RTMP_TYPE_AUDIO) {
return context->enc.write_audio(time, data, size);
} else if (type == SRS_RTMP_TYPE_VIDEO) {
return context->enc.write_video(time, data, size);
} else {
return context->enc.write_metadata(data, size);
}
return ret;
}
int64_t srs_flv_tellg(srs_flv_t flv)
{
FlvContext* context = (FlvContext*)flv;
@ -508,6 +536,16 @@ flv_bool srs_flv_is_eof(int error_code)
return error_code == ERROR_SYSTEM_FILE_EOF;
}
flv_bool srs_flv_is_sequence_header(char* data, int32_t size)
{
return SrsCodec::video_is_sequence_header((int8_t*)data, (int)size);
}
flv_bool srs_flv_is_keyframe(char* data, int32_t size)
{
return SrsCodec::video_is_keyframe((int8_t*)data, (int)size);
}
srs_amf0_t srs_amf0_parse(char* data, int size, int* nparsed)
{
int ret = ERROR_SUCCESS;
@ -536,6 +574,21 @@ srs_amf0_t srs_amf0_parse(char* data, int size, int* nparsed)
return amf0;
}
srs_amf0_t srs_amf0_create_number(amf0_number value)
{
return SrsAmf0Any::number(value);
}
srs_amf0_t srs_amf0_create_ecma_array()
{
return SrsAmf0Any::ecma_array();
}
srs_amf0_t srs_amf0_create_strict_array()
{
return SrsAmf0Any::strict_array();
}
void srs_amf0_free(srs_amf0_t amf0)
{
SrsAmf0Any* any = (SrsAmf0Any*)amf0;
@ -547,6 +600,30 @@ void srs_amf0_free_bytes(char* data)
srs_freep(data);
}
int srs_amf0_size(srs_amf0_t amf0)
{
SrsAmf0Any* any = (SrsAmf0Any*)amf0;
return any->total_size();
}
int srs_amf0_serialize(srs_amf0_t amf0, char* data, int size)
{
int ret = ERROR_SUCCESS;
SrsAmf0Any* any = (SrsAmf0Any*)amf0;
SrsStream stream;
if ((ret = stream.initialize(data, size)) != ERROR_SUCCESS) {
return ret;
}
if ((ret = any->write(&stream)) != ERROR_SUCCESS) {
return ret;
}
return ret;
}
amf0_bool srs_amf0_is_string(srs_amf0_t amf0)
{
SrsAmf0Any* any = (SrsAmf0Any*)amf0;
@ -625,6 +702,19 @@ srs_amf0_t srs_amf0_object_property_value_at(srs_amf0_t amf0, int index)
return (srs_amf0_t)obj->value_at(index);
}
srs_amf0_t srs_amf0_object_property(srs_amf0_t amf0, const char* name)
{
SrsAmf0Object* obj = (SrsAmf0Object*)amf0;
return (srs_amf0_t)obj->get_property(name);
}
void srs_amf0_object_property_set(srs_amf0_t amf0, const char* name, srs_amf0_t value)
{
SrsAmf0Object* obj = (SrsAmf0Object*)amf0;
SrsAmf0Any* any = (SrsAmf0Any*)value;
obj->set(name, any);
}
int srs_amf0_ecma_array_property_count(srs_amf0_t amf0)
{
SrsAmf0EcmaArray * obj = (SrsAmf0EcmaArray*)amf0;
@ -643,16 +733,36 @@ srs_amf0_t srs_amf0_ecma_array_property_value_at(srs_amf0_t amf0, int index)
return (srs_amf0_t)obj->value_at(index);
}
srs_amf0_t srs_amf0_ecma_array_property(srs_amf0_t amf0, const char* name)
{
SrsAmf0EcmaArray* obj = (SrsAmf0EcmaArray*)amf0;
return (srs_amf0_t)obj->get_property(name);
}
void srs_amf0_ecma_array_property_set(srs_amf0_t amf0, const char* name, srs_amf0_t value)
{
SrsAmf0EcmaArray* obj = (SrsAmf0EcmaArray*)amf0;
SrsAmf0Any* any = (SrsAmf0Any*)value;
obj->set(name, any);
}
int srs_amf0_strict_array_property_count(srs_amf0_t amf0)
{
SrsAmf0EcmaArray * obj = (SrsAmf0EcmaArray*)amf0;
SrsAmf0StrictArray * obj = (SrsAmf0StrictArray*)amf0;
return obj->count();
}
srs_amf0_t srs_amf0_strict_array_property_at(srs_amf0_t amf0, int index)
{
SrsAmf0EcmaArray* obj = (SrsAmf0EcmaArray*)amf0;
return (srs_amf0_t)obj->value_at(index);
SrsAmf0StrictArray* obj = (SrsAmf0StrictArray*)amf0;
return (srs_amf0_t)obj->at(index);
}
void srs_amf0_strict_array_append(srs_amf0_t amf0, srs_amf0_t value)
{
SrsAmf0StrictArray* obj = (SrsAmf0StrictArray*)amf0;
SrsAmf0Any* any = (SrsAmf0Any*)value;
obj->append(any);
}
void __srs_fill_level_spaces(stringstream& ss, int level)
@ -735,10 +845,14 @@ char* srs_amf0_human_print(srs_amf0_t amf0, char** pdata, int* psize)
memcpy(data, str.data(), str.length());
data[str.length()] = 0;
*pdata = data;
*psize = str.length();
if (pdata) {
*pdata = data;
}
if (psize) {
*psize = str.length();
}
return *pdata;
return data;
}
#ifdef __cplusplus