mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
CI: Cover kernel ts
This commit is contained in:
parent
3f59c7885e
commit
8eccfeceb9
4 changed files with 114 additions and 22 deletions
|
@ -298,7 +298,7 @@ srs_error_t SrsTsContext::decode(SrsBuffer* stream, ISrsTsHandler* handler)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_error_t SrsTsContext::encode(SrsFileWriter* writer, SrsTsMessage* msg, SrsVideoCodecId vc, SrsAudioCodecId ac)
|
srs_error_t SrsTsContext::encode(ISrsStreamWriter* writer, SrsTsMessage* msg, SrsVideoCodecId vc, SrsAudioCodecId ac)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
|
@ -380,7 +380,7 @@ void SrsTsContext::set_sync_byte(int8_t sb)
|
||||||
sync_byte = sb;
|
sync_byte = sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_error_t SrsTsContext::encode_pat_pmt(SrsFileWriter* writer, int16_t vpid, SrsTsStream vs, int16_t apid, SrsTsStream as)
|
srs_error_t SrsTsContext::encode_pat_pmt(ISrsStreamWriter* writer, int16_t vpid, SrsTsStream vs, int16_t apid, SrsTsStream as)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
|
@ -441,7 +441,7 @@ srs_error_t SrsTsContext::encode_pat_pmt(SrsFileWriter* writer, int16_t vpid, Sr
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_error_t SrsTsContext::encode_pes(SrsFileWriter* writer, SrsTsMessage* msg, int16_t pid, SrsTsStream sid, bool pure_audio)
|
srs_error_t SrsTsContext::encode_pes(ISrsStreamWriter* writer, SrsTsMessage* msg, int16_t pid, SrsTsStream sid, bool pure_audio)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
|
@ -2543,7 +2543,7 @@ srs_error_t SrsTsPayloadPMT::psi_encode(SrsBuffer* stream)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsTsContextWriter::SrsTsContextWriter(SrsFileWriter* w, SrsTsContext* c, SrsAudioCodecId ac, SrsVideoCodecId vc)
|
SrsTsContextWriter::SrsTsContextWriter(ISrsStreamWriter* w, SrsTsContext* c, SrsAudioCodecId ac, SrsVideoCodecId vc)
|
||||||
{
|
{
|
||||||
writer = w;
|
writer = w;
|
||||||
context = c;
|
context = c;
|
||||||
|
@ -2568,7 +2568,10 @@ srs_error_t SrsTsContextWriter::open(string p)
|
||||||
// reset the context for a new ts start.
|
// reset the context for a new ts start.
|
||||||
context->reset();
|
context->reset();
|
||||||
|
|
||||||
if ((err = writer->open(path)) != srs_success) {
|
SrsFileWriter* fw = dynamic_cast<SrsFileWriter*>(writer);
|
||||||
|
srs_assert(fw);
|
||||||
|
|
||||||
|
if ((err = fw->open(path)) != srs_success) {
|
||||||
return srs_error_wrap(err, "ts: open writer");
|
return srs_error_wrap(err, "ts: open writer");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2607,7 +2610,10 @@ srs_error_t SrsTsContextWriter::write_video(SrsTsMessage* video)
|
||||||
|
|
||||||
void SrsTsContextWriter::close()
|
void SrsTsContextWriter::close()
|
||||||
{
|
{
|
||||||
writer->close();
|
SrsFileWriter* fw = dynamic_cast<SrsFileWriter*>(writer);
|
||||||
|
srs_assert(fw);
|
||||||
|
|
||||||
|
fw->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsVideoCodecId SrsTsContextWriter::video_codec()
|
SrsVideoCodecId SrsTsContextWriter::video_codec()
|
||||||
|
@ -3011,7 +3017,7 @@ SrsTsTransmuxer::~SrsTsTransmuxer()
|
||||||
srs_freep(context);
|
srs_freep(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_error_t SrsTsTransmuxer::initialize(SrsFileWriter* fw)
|
srs_error_t SrsTsTransmuxer::initialize(ISrsStreamWriter* fw)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
|
@ -3021,10 +3027,6 @@ srs_error_t SrsTsTransmuxer::initialize(SrsFileWriter* fw)
|
||||||
|
|
||||||
srs_assert(fw);
|
srs_assert(fw);
|
||||||
|
|
||||||
if (!fw->is_open()) {
|
|
||||||
return srs_error_new(ERROR_KERNEL_FLV_STREAM_CLOSED, "ts: stream is not open");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer = fw;
|
writer = fw;
|
||||||
|
|
||||||
srs_freep(tscw);
|
srs_freep(tscw);
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
class SrsBuffer;
|
class SrsBuffer;
|
||||||
class SrsTsMessageCache;
|
class SrsTsMessageCache;
|
||||||
class SrsTsContextWriter;
|
class SrsTsContextWriter;
|
||||||
class SrsFileWriter;
|
class ISrsStreamWriter;
|
||||||
class SrsFileReader;
|
class SrsFileReader;
|
||||||
class SrsFormat;
|
class SrsFormat;
|
||||||
class SrsSimpleStream;
|
class SrsSimpleStream;
|
||||||
|
@ -403,7 +403,7 @@ public:
|
||||||
* @param vc the video codec, write the PAT/PMT table when changed.
|
* @param vc the video codec, write the PAT/PMT table when changed.
|
||||||
* @param ac the audio codec, write the PAT/PMT table when changed.
|
* @param ac the audio codec, write the PAT/PMT table when changed.
|
||||||
*/
|
*/
|
||||||
virtual srs_error_t encode(SrsFileWriter* writer, SrsTsMessage* msg, SrsVideoCodecId vc, SrsAudioCodecId ac);
|
virtual srs_error_t encode(ISrsStreamWriter* writer, SrsTsMessage* msg, SrsVideoCodecId vc, SrsAudioCodecId ac);
|
||||||
// drm methods
|
// drm methods
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -412,8 +412,8 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void set_sync_byte(int8_t sb);
|
virtual void set_sync_byte(int8_t sb);
|
||||||
private:
|
private:
|
||||||
virtual srs_error_t encode_pat_pmt(SrsFileWriter* writer, int16_t vpid, SrsTsStream vs, int16_t apid, SrsTsStream as);
|
virtual srs_error_t encode_pat_pmt(ISrsStreamWriter* writer, int16_t vpid, SrsTsStream vs, int16_t apid, SrsTsStream as);
|
||||||
virtual srs_error_t encode_pes(SrsFileWriter* writer, SrsTsMessage* msg, int16_t pid, SrsTsStream sid, bool pure_audio);
|
virtual srs_error_t encode_pes(ISrsStreamWriter* writer, SrsTsMessage* msg, int16_t pid, SrsTsStream sid, bool pure_audio);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1543,10 +1543,10 @@ private:
|
||||||
SrsAudioCodecId acodec;
|
SrsAudioCodecId acodec;
|
||||||
private:
|
private:
|
||||||
SrsTsContext* context;
|
SrsTsContext* context;
|
||||||
SrsFileWriter* writer;
|
ISrsStreamWriter* writer;
|
||||||
std::string path;
|
std::string path;
|
||||||
public:
|
public:
|
||||||
SrsTsContextWriter(SrsFileWriter* w, SrsTsContext* c, SrsAudioCodecId ac, SrsVideoCodecId vc);
|
SrsTsContextWriter(ISrsStreamWriter* w, SrsTsContext* c, SrsAudioCodecId ac, SrsVideoCodecId vc);
|
||||||
virtual ~SrsTsContextWriter();
|
virtual ~SrsTsContextWriter();
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -1628,7 +1628,7 @@ private:
|
||||||
class SrsTsTransmuxer
|
class SrsTsTransmuxer
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SrsFileWriter* writer;
|
ISrsStreamWriter* writer;
|
||||||
private:
|
private:
|
||||||
SrsFormat* format;
|
SrsFormat* format;
|
||||||
SrsTsMessageCache* tsmc;
|
SrsTsMessageCache* tsmc;
|
||||||
|
@ -1642,7 +1642,7 @@ public:
|
||||||
* initialize the underlayer file stream.
|
* initialize the underlayer file stream.
|
||||||
* @param fw the writer to use for ts encoder, user must free it.
|
* @param fw the writer to use for ts encoder, user must free it.
|
||||||
*/
|
*/
|
||||||
virtual srs_error_t initialize(SrsFileWriter* fw);
|
virtual srs_error_t initialize(ISrsStreamWriter* fw);
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* write audio/video packet.
|
* write audio/video packet.
|
||||||
|
|
|
@ -243,14 +243,19 @@ srs_error_t MockSrsCodec::decode(SrsBuffer* /*buf*/)
|
||||||
|
|
||||||
MockTsHandler::MockTsHandler()
|
MockTsHandler::MockTsHandler()
|
||||||
{
|
{
|
||||||
|
msg = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
MockTsHandler::~MockTsHandler()
|
MockTsHandler::~MockTsHandler()
|
||||||
{
|
{
|
||||||
|
srs_freep(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_error_t MockTsHandler::on_ts_message(SrsTsMessage* /*msg*/)
|
srs_error_t MockTsHandler::on_ts_message(SrsTsMessage* m)
|
||||||
{
|
{
|
||||||
|
srs_freep(msg);
|
||||||
|
msg = m->detach();
|
||||||
|
|
||||||
return srs_success;
|
return srs_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3201,7 +3206,7 @@ VOID TEST(KernelUtilityTest, CoverTimeUtilityAll)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID TEST(KernelTSTest, CoverBasicUtility)
|
VOID TEST(KernelTSTest, CoverContextUtility)
|
||||||
{
|
{
|
||||||
if (true) {
|
if (true) {
|
||||||
EXPECT_STREQ("Reserved", srs_ts_stream2string(SrsTsStreamReserved).c_str());
|
EXPECT_STREQ("Reserved", srs_ts_stream2string(SrsTsStreamReserved).c_str());
|
||||||
|
@ -3238,6 +3243,9 @@ VOID TEST(KernelTSTest, CoverBasicUtility)
|
||||||
SrsTsMessage* cp = m.detach();
|
SrsTsMessage* cp = m.detach();
|
||||||
EXPECT_TRUE(cp != NULL);
|
EXPECT_TRUE(cp != NULL);
|
||||||
srs_freep(cp);
|
srs_freep(cp);
|
||||||
|
|
||||||
|
ctx.reset();
|
||||||
|
EXPECT_FALSE(ctx.ready);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (true) {
|
if (true) {
|
||||||
|
@ -3294,6 +3302,44 @@ VOID TEST(KernelTSTest, CoverBasicUtility)
|
||||||
EXPECT_TRUE(m.completed(0));
|
EXPECT_TRUE(m.completed(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (true) {
|
||||||
|
SrsTsMessage m;
|
||||||
|
|
||||||
|
EXPECT_TRUE(m.completed(1));
|
||||||
|
EXPECT_TRUE(!m.completed(0));
|
||||||
|
|
||||||
|
m.PES_packet_length = 8;
|
||||||
|
SrsBuffer b((char*)"\x00\x01\x02\x03", 4);
|
||||||
|
|
||||||
|
int nb_bytes = 0;
|
||||||
|
EXPECT_TRUE(srs_success == m.dump(&b, &nb_bytes));
|
||||||
|
EXPECT_EQ(4, nb_bytes);
|
||||||
|
|
||||||
|
b.skip(-4);
|
||||||
|
EXPECT_TRUE(srs_success == m.dump(&b, &nb_bytes));
|
||||||
|
EXPECT_EQ(4, nb_bytes);
|
||||||
|
|
||||||
|
EXPECT_TRUE(m.completed(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (true) {
|
||||||
|
MockTsHandler* h = new MockTsHandler();
|
||||||
|
srs_freep(h);
|
||||||
|
|
||||||
|
SrsTsContext ctx;
|
||||||
|
EXPECT_TRUE(!ctx.is_pure_audio());
|
||||||
|
|
||||||
|
ctx.set(100, SrsTsPidApplyPAT);
|
||||||
|
ctx.set(101, SrsTsPidApplyPMT);
|
||||||
|
ctx.set(102, SrsTsPidApplyVideo);
|
||||||
|
ctx.set(102, SrsTsPidApplyVideo);
|
||||||
|
|
||||||
|
ctx.on_pmt_parsed();
|
||||||
|
EXPECT_TRUE(!ctx.is_pure_audio());
|
||||||
|
|
||||||
|
EXPECT_EQ(100, ctx.get(100)->pid);
|
||||||
|
}
|
||||||
|
|
||||||
if (true) {
|
if (true) {
|
||||||
MockTsHandler* h = new MockTsHandler();
|
MockTsHandler* h = new MockTsHandler();
|
||||||
srs_freep(h);
|
srs_freep(h);
|
||||||
|
@ -3309,6 +3355,48 @@ VOID TEST(KernelTSTest, CoverBasicUtility)
|
||||||
EXPECT_TRUE(ctx.is_pure_audio());
|
EXPECT_TRUE(ctx.is_pure_audio());
|
||||||
|
|
||||||
EXPECT_EQ(100, ctx.get(100)->pid);
|
EXPECT_EQ(100, ctx.get(100)->pid);
|
||||||
|
EXPECT_TRUE(NULL == ctx.get(200));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (true) {
|
||||||
|
SrsTsContext ctx;
|
||||||
|
EXPECT_EQ(0x47, ctx.sync_byte);
|
||||||
|
|
||||||
|
ctx.set_sync_byte(0x01);
|
||||||
|
EXPECT_EQ(0x01, ctx.sync_byte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID TEST(KernelTSTest, CoverContextCodec)
|
||||||
|
{
|
||||||
|
SrsTsContext ctx;
|
||||||
|
MockTsHandler h;
|
||||||
|
|
||||||
|
if (true) {
|
||||||
|
SrsBuffer b;
|
||||||
|
EXPECT_TRUE(srs_success == ctx.decode(&b, &h));
|
||||||
|
EXPECT_TRUE(NULL == h.msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (true) {
|
||||||
|
SrsBuffer b((char*)"\x00", 1);
|
||||||
|
|
||||||
|
srs_error_t err = ctx.decode(&b, &h);
|
||||||
|
EXPECT_TRUE(srs_success != err);
|
||||||
|
srs_freep(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (true) {
|
||||||
|
MockSrsFileWriter f;
|
||||||
|
SrsTsMessage m;
|
||||||
|
|
||||||
|
srs_error_t err = ctx.encode(&f, &m, SrsVideoCodecIdDisabled, SrsAudioCodecIdDisabled);
|
||||||
|
EXPECT_TRUE(srs_success != err);
|
||||||
|
srs_freep(err);
|
||||||
|
|
||||||
|
err = ctx.encode(&f, &m, SrsVideoCodecIdHEVC, SrsAudioCodecIdOpus);
|
||||||
|
EXPECT_TRUE(srs_success != err);
|
||||||
|
srs_freep(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -110,11 +110,13 @@ public:
|
||||||
|
|
||||||
class MockTsHandler : public ISrsTsHandler
|
class MockTsHandler : public ISrsTsHandler
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
SrsTsMessage* msg;
|
||||||
public:
|
public:
|
||||||
MockTsHandler();
|
MockTsHandler();
|
||||||
virtual ~MockTsHandler();
|
virtual ~MockTsHandler();
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t on_ts_message(SrsTsMessage* msg);
|
virtual srs_error_t on_ts_message(SrsTsMessage* m);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue