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

Covert FLV Vod decoder.

This commit is contained in:
winlin 2019-05-21 08:43:20 +08:00
parent 3bd7978b59
commit ea9c4f89af
3 changed files with 67 additions and 2 deletions

View file

@ -842,7 +842,7 @@ srs_error_t SrsFlvVodStreamDecoder::read_sequence_header_summary(int64_t* pstart
reader->skip(data_size + SRS_FLV_PREVIOUS_TAG_SIZE); reader->skip(data_size + SRS_FLV_PREVIOUS_TAG_SIZE);
continue; continue;
} }
// if video duplicated, no audio // if video duplicated, no audio
if (is_video && got_video) { if (is_video && got_video) {
break; break;
@ -868,7 +868,7 @@ srs_error_t SrsFlvVodStreamDecoder::read_sequence_header_summary(int64_t* pstart
if (is_audio) { if (is_audio) {
srs_assert(!got_audio); srs_assert(!got_audio);
got_audio = true; got_audio = true;
if (av_sequence_offset_start < 0) { if (av_sequence_offset_start < 0) {
av_sequence_offset_start = reader->tellg() - SRS_FLV_TAG_HEADER_SIZE; av_sequence_offset_start = reader->tellg() - SRS_FLV_TAG_HEADER_SIZE;
} }

View file

@ -143,6 +143,7 @@ MockSrsFileReader::MockSrsFileReader()
size = 0; size = 0;
offset = 0; offset = 0;
opened = false; opened = false;
seekable = true;
} }
MockSrsFileReader::MockSrsFileReader(const char* src, int nb_src) MockSrsFileReader::MockSrsFileReader(const char* src, int nb_src)
@ -157,6 +158,7 @@ MockSrsFileReader::MockSrsFileReader(const char* src, int nb_src)
offset = 0; offset = 0;
opened = false; opened = false;
seekable = true;
} }
MockSrsFileReader::~MockSrsFileReader() MockSrsFileReader::~MockSrsFileReader()
@ -194,6 +196,10 @@ void MockSrsFileReader::skip(int64_t _size)
int64_t MockSrsFileReader::seek2(int64_t _offset) int64_t MockSrsFileReader::seek2(int64_t _offset)
{ {
if (!seekable) {
return -1;
}
offset = (int)_offset; offset = (int)_offset;
return offset; return offset;
} }
@ -872,6 +878,63 @@ VOID TEST(KernelFLVTest, CoverReaderErrorCase)
} }
} }
VOID TEST(KernelFLVTest, CoverVodStreamErrorCase)
{
srs_error_t err;
if (true) {
MockSrsFileReader r;
HELPER_EXPECT_SUCCESS(r.open(""));
SrsFlvVodStreamDecoder d;
HELPER_EXPECT_SUCCESS(d.initialize(&r));
}
if (true) {
MockSrsFileReader r;
HELPER_EXPECT_SUCCESS(r.open(""));
SrsFlvVodStreamDecoder d;
HELPER_EXPECT_SUCCESS(d.initialize(&r));
char header[13];
HELPER_EXPECT_FAILED(d.read_header_ext(header));
}
if (true) {
MockSrsFileReader r;
HELPER_EXPECT_SUCCESS(r.open(""));
SrsFlvVodStreamDecoder d;
HELPER_EXPECT_SUCCESS(d.initialize(&r));
int64_t start;
int size;
HELPER_EXPECT_FAILED(d.read_sequence_header_summary(&start, &size));
}
if (true) {
MockSrsFileReader r;
HELPER_EXPECT_SUCCESS(r.open(""));
SrsFlvVodStreamDecoder d;
HELPER_EXPECT_SUCCESS(d.initialize(&r));
HELPER_EXPECT_FAILED(d.seek2(1));
}
if (true) {
MockSrsFileReader r;
HELPER_EXPECT_SUCCESS(r.open(""));
r.seekable = false;
SrsFlvVodStreamDecoder d;
HELPER_EXPECT_SUCCESS(d.initialize(&r));
HELPER_EXPECT_FAILED(d.seek2(0));
}
}
/** /**
* test the flv decoder, * test the flv decoder,
* exception: file stream not open. * exception: file stream not open.

View file

@ -82,6 +82,8 @@ public:
int size; int size;
int offset; int offset;
bool opened; bool opened;
// Could seek.
bool seekable;
public: public:
MockSrsFileReader(); MockSrsFileReader();
MockSrsFileReader(const char* data, int nb_data); MockSrsFileReader(const char* data, int nb_data);