From 69e2d94e50880c0dfb332cf9365f242bb276e16e Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 5 Jan 2020 22:30:57 +0800 Subject: [PATCH 01/18] Fix some warnings for compiler --- trunk/src/utest/srs_utest_avc.cpp | 2 +- trunk/src/utest/srs_utest_config.cpp | 2 +- trunk/src/utest/srs_utest_kernel.cpp | 6 +++--- trunk/src/utest/srs_utest_mp4.cpp | 6 +++--- trunk/src/utest/srs_utest_protocol.cpp | 2 +- trunk/src/utest/srs_utest_rtmp.cpp | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/trunk/src/utest/srs_utest_avc.cpp b/trunk/src/utest/srs_utest_avc.cpp index 4b33b2ccf..7f7898cb6 100644 --- a/trunk/src/utest/srs_utest_avc.cpp +++ b/trunk/src/utest/srs_utest_avc.cpp @@ -131,7 +131,7 @@ VOID TEST(SrsAVCTest, H264SequenceHeader) if (true) { SrsRawH264Stream h; string sh; HELPER_ASSERT_SUCCESS(h.mux_sequence_header("Hello", "world", 0, 0, sh)); - EXPECT_EQ(11+5+5, sh.length()); + EXPECT_EQ(11+5+5, (int)sh.length()); EXPECT_STREQ("Hello", sh.substr(8, 5).c_str()); EXPECT_STREQ("world", sh.substr(16).c_str()); } diff --git a/trunk/src/utest/srs_utest_config.cpp b/trunk/src/utest/srs_utest_config.cpp index 32ee0950c..e1d44ac8e 100644 --- a/trunk/src/utest/srs_utest_config.cpp +++ b/trunk/src/utest/srs_utest_config.cpp @@ -2675,7 +2675,7 @@ VOID TEST(ConfigMainTest, CheckGlobalConfig) if (true) { MockSrsConfig conf; HELPER_ASSERT_SUCCESS(conf.parse("listen 1935;")); - EXPECT_EQ(1, conf.get_listens().size()); + EXPECT_EQ(1, (int)conf.get_listens().size()); } if (true) { diff --git a/trunk/src/utest/srs_utest_kernel.cpp b/trunk/src/utest/srs_utest_kernel.cpp index 181bc58b1..c80e8fc58 100644 --- a/trunk/src/utest/srs_utest_kernel.cpp +++ b/trunk/src/utest/srs_utest_kernel.cpp @@ -4788,13 +4788,13 @@ VOID TEST(KernelMP4Test, CoverMP4All) if (true) { SrsMp4ElstEntry e; EXPECT_EQ(0, e.media_time); - EXPECT_EQ(0, e.segment_duration); + EXPECT_EQ(0, (int)e.segment_duration); } if (true) { SrsMp4CttsEntry e; - EXPECT_EQ(0, e.sample_count); - EXPECT_EQ(0, e.sample_offset); + EXPECT_EQ(0, (int)e.sample_count); + EXPECT_EQ(0, (int)e.sample_offset); } } diff --git a/trunk/src/utest/srs_utest_mp4.cpp b/trunk/src/utest/srs_utest_mp4.cpp index d94b053b9..76e6fc4b3 100644 --- a/trunk/src/utest/srs_utest_mp4.cpp +++ b/trunk/src/utest/srs_utest_mp4.cpp @@ -492,7 +492,7 @@ VOID TEST(KernelMp4Test, FullBoxDump) SrsMp4FullBox box; HELPER_ASSERT_SUCCESS(box.decode(&b)); EXPECT_EQ(1, box.version); - EXPECT_EQ(2, box.flags); + EXPECT_EQ(2, (int)box.flags); } if (true) { @@ -596,7 +596,7 @@ VOID TEST(KernelMp4Test, TFHDBox) if (true) { SrsMp4TrackFragmentHeaderBox box; box.track_id = 100; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), (int)box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -682,7 +682,7 @@ VOID TEST(KernelMp4Test, TFDTBox) b.skip(-1 * b.pos()); SrsMp4TrackFragmentDecodeTimeBox box; HELPER_EXPECT_SUCCESS(box.decode(&b)); - EXPECT_EQ(100, box.base_media_decode_time); + EXPECT_EQ(100, (int)box.base_media_decode_time); } } diff --git a/trunk/src/utest/srs_utest_protocol.cpp b/trunk/src/utest/srs_utest_protocol.cpp index 028cd4510..0a1a612b7 100644 --- a/trunk/src/utest/srs_utest_protocol.cpp +++ b/trunk/src/utest/srs_utest_protocol.cpp @@ -5805,7 +5805,7 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) // size = 70, nparsed = 70, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\n")); EXPECT_EQ(70, parser.parsed); - EXPECT_EQ(0, parser.parser->nread); + EXPECT_EQ(0, (int)parser.parser->nread); EXPECT_TRUE(!parser.body); EXPECT_TRUE(parser.headers_complete); EXPECT_TRUE(!parser.message_complete); diff --git a/trunk/src/utest/srs_utest_rtmp.cpp b/trunk/src/utest/srs_utest_rtmp.cpp index 11a2df3ab..544d85126 100644 --- a/trunk/src/utest/srs_utest_rtmp.cpp +++ b/trunk/src/utest/srs_utest_rtmp.cpp @@ -1314,7 +1314,7 @@ VOID TEST(ProtocolRTMPTest, HandshakeC0C1) SrsHandshakeBytes hs; HELPER_EXPECT_SUCCESS(hs.read_c0c1(&io)); - EXPECT_EQ(0x01020304, hs.proxy_real_ip); + EXPECT_EQ((uint32_t)0x01020304, (uint32_t)hs.proxy_real_ip); } // It's extended c0c1 prefixed with ip, which should be ok. From 06c1d4d7f9b4f24faaa0ffa572e3f0eed55ae5bb Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 5 Jan 2020 22:37:25 +0800 Subject: [PATCH 02/18] Fix some warnings for compiler --- trunk/src/utest/srs_utest_avc.cpp | 3 +- trunk/src/utest/srs_utest_config.cpp | 2 +- trunk/src/utest/srs_utest_mp4.cpp | 94 +++++++++++++------------- trunk/src/utest/srs_utest_protocol.cpp | 54 +++++++-------- trunk/src/utest/srs_utest_rtmp.cpp | 2 +- 5 files changed, 78 insertions(+), 77 deletions(-) diff --git a/trunk/src/utest/srs_utest_avc.cpp b/trunk/src/utest/srs_utest_avc.cpp index 7f7898cb6..15b34f590 100644 --- a/trunk/src/utest/srs_utest_avc.cpp +++ b/trunk/src/utest/srs_utest_avc.cpp @@ -247,7 +247,8 @@ VOID TEST(SrsAVCTest, H264IPBFrame) SrsRawH264Stream h; string frame; HELPER_ASSERT_SUCCESS(h.mux_ipb_frame((char*)"Hello", 5, frame)); EXPECT_EQ(4+5, frame.length()); - EXPECT_EQ(0, frame.at(0)); EXPECT_EQ(0, frame.at(1)); EXPECT_EQ(0, frame.at(2)); EXPECT_EQ(5, frame.at(3)); + EXPECT_EQ(0, (uint8_t)frame.at(0)); EXPECT_EQ(0, (uint8_t)frame.at(1)); + EXPECT_EQ(0, (uint8_t)frame.at(2)); EXPECT_EQ(5, (uint8_t)frame.at(3)); EXPECT_STREQ("Hello", frame.substr(4).c_str()); } } diff --git a/trunk/src/utest/srs_utest_config.cpp b/trunk/src/utest/srs_utest_config.cpp index e1d44ac8e..2b8d90e75 100644 --- a/trunk/src/utest/srs_utest_config.cpp +++ b/trunk/src/utest/srs_utest_config.cpp @@ -2681,7 +2681,7 @@ VOID TEST(ConfigMainTest, CheckGlobalConfig) if (true) { MockSrsConfig conf; HELPER_ASSERT_SUCCESS(conf.parse("listen 1935 1936;")); - EXPECT_EQ(2, conf.get_listens().size()); + EXPECT_EQ(2, (int)conf.get_listens().size()); } if (true) { diff --git a/trunk/src/utest/srs_utest_mp4.cpp b/trunk/src/utest/srs_utest_mp4.cpp index 76e6fc4b3..c5e4d8d43 100644 --- a/trunk/src/utest/srs_utest_mp4.cpp +++ b/trunk/src/utest/srs_utest_mp4.cpp @@ -564,7 +564,7 @@ VOID TEST(KernelMp4Test, MFHDBox) SrsMp4MovieFragmentHeaderBox box; HELPER_ASSERT_SUCCESS(box.decode(&b)); - EXPECT_EQ(3, box.sequence_number); + EXPECT_EQ(3, (int)box.sequence_number); } if (true) { @@ -596,7 +596,7 @@ VOID TEST(KernelMp4Test, TFHDBox) if (true) { SrsMp4TrackFragmentHeaderBox box; box.track_id = 100; - EXPECT_EQ((int)sizeof(buf), (int)box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -631,7 +631,7 @@ VOID TEST(KernelMp4Test, TFHDBox) box.default_sample_duration = 12; box.default_sample_size = 13; box.default_sample_flags = 14; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -646,12 +646,12 @@ VOID TEST(KernelMp4Test, TFHDBox) b.skip(-1 * b.pos()); SrsMp4TrackFragmentHeaderBox box; HELPER_EXPECT_SUCCESS(box.decode(&b)); - EXPECT_EQ(100, box.track_id); - EXPECT_EQ(box.base_data_offset, 10); - EXPECT_EQ(box.sample_description_index, 11); - EXPECT_EQ(box.default_sample_duration, 12); - EXPECT_EQ(box.default_sample_size, 13); - EXPECT_EQ(box.default_sample_flags, 14); + EXPECT_EQ((int)box.track_id, 100); + EXPECT_EQ((int)box.base_data_offset, 10); + EXPECT_EQ((int)box.sample_description_index, 11); + EXPECT_EQ((int)box.default_sample_duration, 12); + EXPECT_EQ((int)box.default_sample_size, 13); + EXPECT_EQ((int)box.default_sample_flags, 14); } } } @@ -667,7 +667,7 @@ VOID TEST(KernelMp4Test, TFDTBox) if (true) { SrsMp4TrackFragmentDecodeTimeBox box; box.base_media_decode_time = 100; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -694,7 +694,7 @@ VOID TEST(KernelMp4Test, TFDTBox) SrsMp4TrackFragmentDecodeTimeBox box; box.version = 1; box.base_media_decode_time = 100; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -709,7 +709,7 @@ VOID TEST(KernelMp4Test, TFDTBox) b.skip(-1 * b.pos()); SrsMp4TrackFragmentDecodeTimeBox box; HELPER_EXPECT_SUCCESS(box.decode(&b)); - EXPECT_EQ(100, box.base_media_decode_time); + EXPECT_EQ(100, (int)box.base_media_decode_time); } } } @@ -724,7 +724,7 @@ VOID TEST(KernelMp4Test, TRUNBox) if (true) { SrsMp4TrackFragmentRunBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -754,7 +754,7 @@ VOID TEST(KernelMp4Test, TRUNBox) entry->sample_duration = 1000; box.entries.push_back(entry); - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -788,7 +788,7 @@ VOID TEST(KernelMp4Test, FreeBox) if (true) { SrsMp4FreeSpaceBox box(SrsMp4BoxTypeFREE); box.data.resize(4); - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -818,7 +818,7 @@ VOID TEST(KernelMp4Test, MOOVBox) if (true) { SrsMp4MovieBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -891,7 +891,7 @@ VOID TEST(KernelMp4Test, TREXBox) SrsMp4TrackExtendsBox box; box.track_ID = 1; box.default_sample_description_index = 2; box.default_sample_size = 3; box.default_sample_duration = 4; box.default_sample_flags = 5; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -933,7 +933,7 @@ VOID TEST(KernelMp4Test, TKHDBox) if (true) { SrsMp4TrackHeaderBox box; box.track_ID = 1; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -960,7 +960,7 @@ VOID TEST(KernelMp4Test, TKHDBox) SrsMp4TrackHeaderBox box; box.version = 1; box.track_ID = 1; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -990,7 +990,7 @@ VOID TEST(KernelMp4Test, ELSTBox) if (true) { SrsMp4EditListBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1018,7 +1018,7 @@ VOID TEST(KernelMp4Test, ELSTBox) SrsMp4ElstEntry entry; box.entries.push_back(entry); } - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1054,7 +1054,7 @@ VOID TEST(KernelMp4Test, MDHDBox) if (true) { SrsMp4MediaHeaderBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1081,7 +1081,7 @@ VOID TEST(KernelMp4Test, MDHDBox) box.set_language0('C'); box.set_language1('N'); box.set_language2('E'); - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1136,7 +1136,7 @@ VOID TEST(KernelMp4Test, HDLRBox) if (true) { SrsMp4HandlerReferenceBox box; box.handler_type = SrsMp4HandlerTypeSOUN; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1162,7 +1162,7 @@ VOID TEST(KernelMp4Test, HDLRBox) if (true) { SrsMp4HandlerReferenceBox box; box.handler_type = SrsMp4HandlerTypeVIDE; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1189,7 +1189,7 @@ VOID TEST(KernelMp4Test, HDLRBox) SrsMp4HandlerReferenceBox box; box.handler_type = SrsMp4HandlerTypeVIDE; box.name = "srs"; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1247,7 +1247,7 @@ VOID TEST(KernelMp4Test, URLBox) if (true) { SrsMp4DataEntryUrlBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1271,7 +1271,7 @@ VOID TEST(KernelMp4Test, URLBox) if (true) { SrsMp4DataEntryUrnBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1304,7 +1304,7 @@ VOID TEST(KernelMp4Test, URLBox) SrsMp4DataReferenceBox box; SrsMp4DataEntryUrnBox* urn = new SrsMp4DataEntryUrnBox(); box.append(urn); - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1341,7 +1341,7 @@ VOID TEST(KernelMp4Test, SampleDescBox) if (true) { SrsMp4VisualSampleEntry box; box.data_reference_index = 1; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1365,7 +1365,7 @@ VOID TEST(KernelMp4Test, SampleDescBox) if (true) { SrsMp4AvccBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1390,7 +1390,7 @@ VOID TEST(KernelMp4Test, SampleDescBox) if (true) { SrsMp4AudioSampleEntry box; box.data_reference_index = 1; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1420,7 +1420,7 @@ VOID TEST(KernelMp4Test, SpecificInfoBox) if (true) { SrsMp4DecoderSpecificInfo box; box.asc.resize(2); - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1444,7 +1444,7 @@ VOID TEST(KernelMp4Test, SpecificInfoBox) if (true) { SrsMp4DecoderConfigDescriptor box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1468,7 +1468,7 @@ VOID TEST(KernelMp4Test, SpecificInfoBox) if (true) { SrsMp4ES_Descriptor box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1498,7 +1498,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4SampleDescriptionBox box; box.entries.push_back(new SrsMp4SampleEntry()); - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1523,7 +1523,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4DecodingTime2SampleBox box; box.entries.push_back(SrsMp4SttsEntry()); - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1548,7 +1548,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4CompositionTime2SampleBox box; box.entries.push_back(SrsMp4CttsEntry()); - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1572,7 +1572,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4SyncSampleBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1596,7 +1596,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4Sample2ChunkBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1620,7 +1620,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4ChunkOffsetBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1644,7 +1644,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4ChunkLargeOffsetBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1668,7 +1668,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4SampleSizeBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1693,7 +1693,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4UserDataBox box; box.data.resize(2); - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1717,7 +1717,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4SegmentIndexBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1741,7 +1741,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4MovieHeaderBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; @@ -1772,7 +1772,7 @@ VOID TEST(KernelMp4Test, STSDBox) if (true) { SrsMp4CompositionTime2SampleBox box; - EXPECT_EQ(sizeof(buf), box.nb_bytes()); + EXPECT_EQ((int)sizeof(buf), box.nb_bytes()); HELPER_EXPECT_SUCCESS(box.encode(&b)); stringstream ss; diff --git a/trunk/src/utest/srs_utest_protocol.cpp b/trunk/src/utest/srs_utest_protocol.cpp index 0a1a612b7..0e952cf68 100644 --- a/trunk/src/utest/srs_utest_protocol.cpp +++ b/trunk/src/utest/srs_utest_protocol.cpp @@ -5804,7 +5804,7 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 70, nparsed = 70, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\n")); - EXPECT_EQ(70, parser.parsed); + EXPECT_EQ(70, (int)parser.parsed); EXPECT_EQ(0, (int)parser.parser->nread); EXPECT_TRUE(!parser.body); EXPECT_TRUE(parser.headers_complete); @@ -5815,7 +5815,7 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 75, nparsed = 75, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\nHello")); - EXPECT_EQ(75, parser.parsed); + EXPECT_EQ(75, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); EXPECT_TRUE(parser.body && 5 == parser.body->length); EXPECT_TRUE(parser.headers_complete); @@ -5826,7 +5826,7 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 150, nparsed = 150, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\nHelloGET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\nWorld")); - EXPECT_EQ(150, parser.parsed); + EXPECT_EQ(150, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); } @@ -5834,13 +5834,13 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 70, nparsed = 70, nread = 0, content_length = 5, Header("Content-Length", 5) HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\n")); - EXPECT_EQ(70, parser.parsed); + EXPECT_EQ(70, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); EXPECT_EQ(5, parser.parser->content_length); // size = 79, nparsed = 5, nread = 1, content_length = -1, Header("Content-Length", 5) HELPER_EXPECT_FAILED(parser.parse("elloGET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\nHello")); - EXPECT_EQ(5, parser.parsed); + EXPECT_EQ(5, (int)parser.parsed); EXPECT_EQ(1, parser.parser->nread); EXPECT_EQ(-1, (int64_t)parser.parser->content_length); } @@ -5849,13 +5849,13 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 70, nparsed = 70, nread = 0, content_length = 5, Header("Content-Length", 5) HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\n")); - EXPECT_EQ(70, parser.parsed); + EXPECT_EQ(70, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); EXPECT_EQ(5, parser.parser->content_length); // size = 80, nparsed = 70, nread = 0, content_length = 0, Header("Content-Length", 5) HELPER_EXPECT_SUCCESS(parser.parse("HelloGET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\nWorld")); - EXPECT_EQ(80, parser.parsed); + EXPECT_EQ(80, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); EXPECT_EQ(0, parser.parser->content_length); } @@ -5864,7 +5864,7 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 73, nparsed = 73, nread = 0, content_length = 2, Header("Content-Length", 5) HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\nHel")); - EXPECT_EQ(73, parser.parsed); + EXPECT_EQ(73, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); EXPECT_EQ(2, parser.parser->content_length); } @@ -5873,7 +5873,7 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 82, nparsed = 75, nread = 1, content_length = -1, Header("Content-Length", 5) HELPER_EXPECT_FAILED(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\nHello World!")); - EXPECT_EQ(75, parser.parsed); + EXPECT_EQ(75, (int)parser.parsed); EXPECT_EQ(1, parser.parser->nread); EXPECT_EQ(-1, (int64_t)parser.parser->content_length); } @@ -5882,12 +5882,12 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 34, nparsed = 34, nread = 34 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHo")); - EXPECT_EQ(34, parser.parsed); + EXPECT_EQ(34, (int)parser.parsed); EXPECT_EQ(34, parser.parser->nread); // size = 41, nparsed = 41, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("st: ossrs.net\r\nContent-Length: 5\r\n\r\nHello")); - EXPECT_EQ(41, parser.parsed); + EXPECT_EQ(41, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); } @@ -5895,12 +5895,12 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 41, nparsed = 41, nread = 41 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: oss")); - EXPECT_EQ(41, parser.parsed); + EXPECT_EQ(41, (int)parser.parsed); EXPECT_EQ(41, parser.parser->nread); // size = 34, nparsed = 34, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("rs.net\r\nContent-Length: 5\r\n\r\nHello")); - EXPECT_EQ(34, parser.parsed); + EXPECT_EQ(34, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); } @@ -5908,12 +5908,12 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 48, nparsed = 48, nread = 48 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r")); - EXPECT_EQ(48, parser.parsed); + EXPECT_EQ(48, (int)parser.parsed); EXPECT_EQ(48, parser.parser->nread); // size = 27, nparsed = 27, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("\nContent-Length: 5\r\n\r\nHello")); - EXPECT_EQ(27, parser.parsed); + EXPECT_EQ(27, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); } @@ -5921,12 +5921,12 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 68, nparsed = 68, nread = 68 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n")); - EXPECT_EQ(68, parser.parsed); + EXPECT_EQ(68, (int)parser.parsed); EXPECT_EQ(68, parser.parser->nread); // size = 7, nparsed = 7, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("\r\nHello")); - EXPECT_EQ(7, parser.parsed); + EXPECT_EQ(7, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); } @@ -5934,12 +5934,12 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 69, nparsed = 69, nread = 69 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r")); - EXPECT_EQ(69, parser.parsed); + EXPECT_EQ(69, (int)parser.parsed); EXPECT_EQ(69, parser.parser->nread); // size = 6, nparsed = 6, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("\nHello")); - EXPECT_EQ(6, parser.parsed); + EXPECT_EQ(6, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); } @@ -5947,7 +5947,7 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 75, nparsed = 75, nread = 0 HELPER_EXPECT_SUCCESS(parser.parse("GET /gslb/v1/versions HTTP/1.1\r\nHost: ossrs.net\r\nContent-Length: 5\r\n\r\nHello")); - EXPECT_EQ(75, parser.parsed); + EXPECT_EQ(75, (int)parser.parsed); EXPECT_EQ(0, parser.parser->nread); } @@ -5955,12 +5955,12 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // nparsed = 2, size = 2, nread = 2 HELPER_EXPECT_SUCCESS(parser.parse("GE")); - EXPECT_EQ(2, parser.parsed); + EXPECT_EQ(2, (int)parser.parsed); EXPECT_EQ(2, parser.parser->nread); // size = 0, nparsed = 1, nread=2 HELPER_EXPECT_FAILED(parser.parse("")); - EXPECT_EQ(1, parser.parsed); + EXPECT_EQ(1, (int)parser.parsed); EXPECT_EQ(2, parser.parser->nread); } @@ -5968,12 +5968,12 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 2, nparsed = 2, nread = 2 HELPER_EXPECT_SUCCESS(parser.parse("GE")); - EXPECT_EQ(2, parser.parsed); + EXPECT_EQ(2, (int)parser.parsed); EXPECT_EQ(2, parser.parser->nread); // size = 1, nparsed = 0, nread = 3 HELPER_EXPECT_FAILED(parser.parse("X")); - EXPECT_EQ(0, parser.parsed); + EXPECT_EQ(0, (int)parser.parsed); EXPECT_EQ(3, parser.parser->nread); } @@ -5981,12 +5981,12 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 2, nparsed = 2, nread = 2 HELPER_EXPECT_SUCCESS(parser.parse("GE")); - EXPECT_EQ(2, parser.parsed); + EXPECT_EQ(2, (int)parser.parsed); EXPECT_EQ(2, parser.parser->nread); // size = 1, nparsed = 1, nread = 3 HELPER_EXPECT_SUCCESS(parser.parse("T")); - EXPECT_EQ(1, parser.parsed); + EXPECT_EQ(1, (int)parser.parsed); EXPECT_EQ(3, parser.parser->nread); } @@ -5994,7 +5994,7 @@ VOID TEST(ProtocolHTTPTest, HTTPParser) MockParser parser; // size = 3, nparsed = 3, nread = 3 HELPER_EXPECT_SUCCESS(parser.parse("GET")); - EXPECT_EQ(3, parser.parsed); + EXPECT_EQ(3, (int)parser.parsed); EXPECT_EQ(3, parser.parser->nread); } } diff --git a/trunk/src/utest/srs_utest_rtmp.cpp b/trunk/src/utest/srs_utest_rtmp.cpp index 544d85126..47ec84aa6 100644 --- a/trunk/src/utest/srs_utest_rtmp.cpp +++ b/trunk/src/utest/srs_utest_rtmp.cpp @@ -1330,7 +1330,7 @@ VOID TEST(ProtocolRTMPTest, HandshakeC0C1) SrsRtmpServer r(&io); HELPER_EXPECT_SUCCESS(r.hs_bytes->read_c0c1(&io)); - EXPECT_EQ(0x01020304, r.proxy_real_ip()); + EXPECT_EQ((uint32_t)0x01020304, (uint32_t)r.proxy_real_ip()); } // It seems a normal c0c1, but it's extended, so it fail. From 2cc021b2d7b2cd1102a2daba1fc1e2fe5bdd77a7 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 8 Jan 2020 14:00:27 +0800 Subject: [PATCH 03/18] Improve test coverage for http client service. --- trunk/src/service/srs_service_http_client.cpp | 11 +- trunk/src/service/srs_service_http_client.hpp | 1 + trunk/src/utest/srs_utest_service.cpp | 139 ++++++++++++++++++ 3 files changed, 146 insertions(+), 5 deletions(-) diff --git a/trunk/src/service/srs_service_http_client.cpp b/trunk/src/service/srs_service_http_client.cpp index 21fe27307..527aa4f43 100644 --- a/trunk/src/service/srs_service_http_client.cpp +++ b/trunk/src/service/srs_service_http_client.cpp @@ -41,7 +41,7 @@ SrsHttpClient::SrsHttpClient() clk = new SrsWallClock(); kbps = new SrsKbps(clk); parser = NULL; - timeout = SRS_UTIME_NO_TIMEOUT; + recv_timeout = timeout = SRS_UTIME_NO_TIMEOUT; port = 0; } @@ -68,7 +68,7 @@ srs_error_t SrsHttpClient::initialize(string h, int p, srs_utime_t tm) // Always disconnect the transport. host = h; port = p; - timeout = tm; + recv_timeout = timeout = tm; disconnect(); // ep used for host in header. @@ -187,7 +187,7 @@ srs_error_t SrsHttpClient::get(string path, string req, ISrsHttpMessage** ppmsg) void SrsHttpClient::set_recv_timeout(srs_utime_t tm) { - transport->set_recv_timeout(tm); + recv_timeout = tm; } void SrsHttpClient::kbps_sample(const char* label, int64_t age) @@ -222,11 +222,12 @@ srs_error_t SrsHttpClient::connect() transport = new SrsTcpClient(host, port, timeout); if ((err = transport->connect()) != srs_success) { disconnect(); - return srs_error_wrap(err, "http: tcp connect %s:%d to=%dms", host.c_str(), port, srsu2msi(timeout)); + return srs_error_wrap(err, "http: tcp connect %s:%d to=%dms, rto=%dms", + host.c_str(), port, srsu2msi(timeout), srsu2msi(recv_timeout)); } // Set the recv/send timeout in srs_utime_t. - transport->set_recv_timeout(timeout); + transport->set_recv_timeout(recv_timeout); transport->set_send_timeout(timeout); kbps->set_io(transport, transport); diff --git a/trunk/src/service/srs_service_http_client.hpp b/trunk/src/service/srs_service_http_client.hpp index d11b1fb8e..12193809e 100644 --- a/trunk/src/service/srs_service_http_client.hpp +++ b/trunk/src/service/srs_service_http_client.hpp @@ -63,6 +63,7 @@ private: private: // The timeout in srs_utime_t. srs_utime_t timeout; + srs_utime_t recv_timeout; // The host name or ip. std::string host; int port; diff --git a/trunk/src/utest/srs_utest_service.cpp b/trunk/src/utest/srs_utest_service.cpp index e75f7285d..7cb9dcc28 100644 --- a/trunk/src/utest/srs_utest_service.cpp +++ b/trunk/src/utest/srs_utest_service.cpp @@ -36,6 +36,7 @@ using namespace std; #include #include #include +#include #include #include @@ -1079,3 +1080,141 @@ VOID TEST(TCPServerTest, CoverUtility) } } +class MockOnCycleThread4 : public ISrsCoroutineHandler +{ +public: + SrsSTCoroutine trd; + srs_netfd_t fd; + MockOnCycleThread4() : trd("mock", this, 0) { + }; + virtual ~MockOnCycleThread4() { + trd.stop(); + srs_close_stfd(fd); + } + virtual srs_error_t start(string ip, int port) { + srs_error_t err = srs_success; + if ((err = srs_tcp_listen(ip, port, &fd)) != srs_success) { + return err; + } + + return trd.start(); + } + virtual srs_error_t do_cycle(srs_netfd_t cfd) { + srs_error_t err = srs_success; + + SrsStSocket skt; + if ((err = skt.initialize(cfd)) != srs_success) { + return err; + } + + skt.set_recv_timeout(1 * SRS_UTIME_SECONDS); + skt.set_send_timeout(1 * SRS_UTIME_SECONDS); + + while (true) { + if ((err = trd.pull()) != srs_success) { + return err; + } + + char buf[1024]; + if ((err = skt.read(buf, 1024, NULL)) != srs_success) { + return err; + } + + string res = mock_http_response(200, "OK"); + if ((err = skt.write((char*)res.data(), (int)res.length(), NULL)) != srs_success) { + return err; + } + } + + return err; + } + virtual srs_error_t cycle() { + srs_error_t err = srs_success; + + srs_netfd_t cfd = srs_accept(fd, NULL, NULL, SRS_UTIME_NO_TIMEOUT); + if (cfd == NULL) { + return err; + } + + err = do_cycle(cfd); + srs_close_stfd(cfd); + srs_freep(err); + + return err; + } +}; + +VOID TEST(TCPServerTest, HTTPClientUtility) +{ + srs_error_t err; + + // Typical HTTP POST. + if (true) { + MockOnCycleThread4 trd; + HELPER_ASSERT_SUCCESS(trd.start("127.0.0.1", 8080)); + + SrsHttpClient client; + HELPER_ASSERT_SUCCESS(client.initialize("127.0.0.1", 8080, 1*SRS_UTIME_SECONDS)); + + ISrsHttpMessage* res = NULL; + SrsAutoFree(ISrsHttpMessage, res); + HELPER_ASSERT_SUCCESS(client.post("/api/v1", "", &res)); + + ISrsHttpResponseReader* br = res->body_reader(); + ASSERT_FALSE(br->eof()); + + ssize_t nn = 0; char buf[1024]; + HELPER_ARRAY_INIT(buf, sizeof(buf), 0); + HELPER_ASSERT_SUCCESS(br->read(buf, sizeof(buf), &nn)); + ASSERT_EQ(2, nn); + EXPECT_STREQ("OK", buf); + } + + // Typical HTTP GET. + if (true) { + MockOnCycleThread4 trd; + HELPER_ASSERT_SUCCESS(trd.start("127.0.0.1", 8080)); + + SrsHttpClient client; + HELPER_ASSERT_SUCCESS(client.initialize("127.0.0.1", 8080, 1*SRS_UTIME_SECONDS)); + + ISrsHttpMessage* res = NULL; + SrsAutoFree(ISrsHttpMessage, res); + HELPER_ASSERT_SUCCESS(client.get("/api/v1", "", &res)); + + ISrsHttpResponseReader* br = res->body_reader(); + ASSERT_FALSE(br->eof()); + + ssize_t nn = 0; char buf[1024]; + HELPER_ARRAY_INIT(buf, sizeof(buf), 0); + HELPER_ASSERT_SUCCESS(br->read(buf, sizeof(buf), &nn)); + ASSERT_EQ(2, nn); + EXPECT_STREQ("OK", buf); + } + + // Set receive timeout and Kbps ample. + if (true) { + MockOnCycleThread4 trd; + HELPER_ASSERT_SUCCESS(trd.start("127.0.0.1", 8080)); + + SrsHttpClient client; + HELPER_ASSERT_SUCCESS(client.initialize("127.0.0.1", 8080, 1*SRS_UTIME_SECONDS)); + client.set_recv_timeout(1 * SRS_UTIME_SECONDS); + + ISrsHttpMessage* res = NULL; + SrsAutoFree(ISrsHttpMessage, res); + HELPER_ASSERT_SUCCESS(client.get("/api/v1", "", &res)); + + ISrsHttpResponseReader* br = res->body_reader(); + ASSERT_FALSE(br->eof()); + + ssize_t nn = 0; char buf[1024]; + HELPER_ARRAY_INIT(buf, sizeof(buf), 0); + HELPER_ASSERT_SUCCESS(br->read(buf, sizeof(buf), &nn)); + ASSERT_EQ(2, nn); + EXPECT_STREQ("OK", buf); + + client.kbps_sample("SRS", 0); + } +} + From cc11f369409fa8b1d3a218d1f3812f67f5f564e2 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 8 Jan 2020 14:24:41 +0800 Subject: [PATCH 04/18] Improve test coverage for log service. --- trunk/src/service/srs_service_log.cpp | 2 + trunk/src/service/srs_service_rtmp_conn.cpp | 4 +- trunk/src/service/srs_service_rtmp_conn.hpp | 4 +- trunk/src/utest/srs_utest_service.cpp | 63 +++++++++++++++++++++ 4 files changed, 69 insertions(+), 4 deletions(-) diff --git a/trunk/src/service/srs_service_log.cpp b/trunk/src/service/srs_service_log.cpp index dd45a3a89..af5cec2ff 100644 --- a/trunk/src/service/srs_service_log.cpp +++ b/trunk/src/service/srs_service_log.cpp @@ -82,6 +82,7 @@ void SrsThreadContext::clear_cid() } } +// LCOV_EXCL_START SrsConsoleLog::SrsConsoleLog(SrsLogLevel l, bool u) { level = l; @@ -208,6 +209,7 @@ void SrsConsoleLog::error(const char* tag, int context_id, const char* fmt, ...) fprintf(stderr, "%s\n", buffer); } +// LCOV_EXCL_STOP bool srs_log_header(char* buffer, int size, bool utc, bool dangerous, const char* tag, int cid, const char* level, int* psize) { diff --git a/trunk/src/service/srs_service_rtmp_conn.cpp b/trunk/src/service/srs_service_rtmp_conn.cpp index 57ec4c05f..01343eb51 100644 --- a/trunk/src/service/srs_service_rtmp_conn.cpp +++ b/trunk/src/service/srs_service_rtmp_conn.cpp @@ -33,12 +33,12 @@ using namespace std; #include #include -SrsBasicRtmpClient::SrsBasicRtmpClient(string u, srs_utime_t ctm, srs_utime_t stm) +SrsBasicRtmpClient::SrsBasicRtmpClient(string r, srs_utime_t ctm, srs_utime_t stm) { clk = new SrsWallClock(); kbps = new SrsKbps(clk); - url = u; + url = r; connect_timeout = ctm; stream_timeout = stm; diff --git a/trunk/src/service/srs_service_rtmp_conn.hpp b/trunk/src/service/srs_service_rtmp_conn.hpp index 6aed7e74d..2ade55f9f 100644 --- a/trunk/src/service/srs_service_rtmp_conn.hpp +++ b/trunk/src/service/srs_service_rtmp_conn.hpp @@ -60,10 +60,10 @@ private: int stream_id; public: // Constructor. - // @param u The RTMP url, for example, rtmp://ip:port/app/stream?domain=vhost + // @param r The RTMP url, for example, rtmp://ip:port/app/stream?domain=vhost // @param ctm The timeout in srs_utime_t to connect to server. // @param stm The timeout in srs_utime_t to delivery A/V stream. - SrsBasicRtmpClient(std::string u, srs_utime_t ctm, srs_utime_t stm); + SrsBasicRtmpClient(std::string r, srs_utime_t ctm, srs_utime_t stm); virtual ~SrsBasicRtmpClient(); public: // Connect, handshake and connect app to RTMP server. diff --git a/trunk/src/utest/srs_utest_service.cpp b/trunk/src/utest/srs_utest_service.cpp index 7cb9dcc28..ea15b6270 100644 --- a/trunk/src/utest/srs_utest_service.cpp +++ b/trunk/src/utest/srs_utest_service.cpp @@ -37,6 +37,7 @@ using namespace std; #include #include #include +#include #include #include @@ -1200,6 +1201,7 @@ VOID TEST(TCPServerTest, HTTPClientUtility) SrsHttpClient client; HELPER_ASSERT_SUCCESS(client.initialize("127.0.0.1", 8080, 1*SRS_UTIME_SECONDS)); client.set_recv_timeout(1 * SRS_UTIME_SECONDS); + client.set_header("agent", "srs"); ISrsHttpMessage* res = NULL; SrsAutoFree(ISrsHttpMessage, res); @@ -1218,3 +1220,64 @@ VOID TEST(TCPServerTest, HTTPClientUtility) } } +class MockConnectionManager : public IConnectionManager +{ +public: + MockConnectionManager() { + } + virtual ~MockConnectionManager() { + } +public: + virtual void remove(ISrsConnection* /*c*/) { + } +}; + +VOID TEST(TCPServerTest, ContextUtility) +{ + if (true) { + SrsThreadContext ctx; + + EXPECT_EQ(0, ctx.set_id(100)); + EXPECT_EQ(100, ctx.set_id(1000)); + EXPECT_EQ(1000, ctx.get_id()); + + ctx.clear_cid(); + EXPECT_EQ(0, ctx.set_id(100)); + } + + if (true) { + int size = 0; char buf[1024]; HELPER_ARRAY_INIT(buf, 1024, 0); + ASSERT_TRUE(srs_log_header(buf, 1024, true, true, "SRS", 100, "Trace", &size)); + EXPECT_EQ(53, size); + } + + if (true) { + int size = 0; char buf[1024]; HELPER_ARRAY_INIT(buf, 1024, 0); + ASSERT_TRUE(srs_log_header(buf, 1024, false, true, "SRS", 100, "Trace", &size)); + EXPECT_EQ(53, size); + } + + if (true) { + errno = 0; + int size = 0; char buf[1024]; HELPER_ARRAY_INIT(buf, 1024, 0); + ASSERT_TRUE(srs_log_header(buf, 1024, false, true, NULL, 100, "Trace", &size)); + EXPECT_EQ(48, size); + } + + if (true) { + int size = 0; char buf[1024]; HELPER_ARRAY_INIT(buf, 1024, 0); + ASSERT_TRUE(srs_log_header(buf, 1024, false, false, NULL, 100, "Trace", &size)); + EXPECT_EQ(45, size); + } + + if (true) { + MockConnectionManager cm; + cm.remove(NULL); + } + + if (true) { + srs_utime_t to = 1*SRS_UTIME_SECONDS; + SrsBasicRtmpClient rc("rtmp://127.0.0.1/live/livestream", to, to); + } +} + From 80bac7d982cee382dc6fda039a44a94ae8705a0b Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 8 Jan 2020 14:26:38 +0800 Subject: [PATCH 05/18] Improve test coverage for rtmp client service. --- trunk/src/utest/srs_utest_service.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/trunk/src/utest/srs_utest_service.cpp b/trunk/src/utest/srs_utest_service.cpp index ea15b6270..94da6ceb2 100644 --- a/trunk/src/utest/srs_utest_service.cpp +++ b/trunk/src/utest/srs_utest_service.cpp @@ -1278,6 +1278,7 @@ VOID TEST(TCPServerTest, ContextUtility) if (true) { srs_utime_t to = 1*SRS_UTIME_SECONDS; SrsBasicRtmpClient rc("rtmp://127.0.0.1/live/livestream", to, to); + rc.close(); } } From 36bfbb902b6adb9c74ce45265070384800721ba8 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 8 Jan 2020 14:32:24 +0800 Subject: [PATCH 06/18] Refien utest for log heaer generating. --- trunk/src/utest/srs_utest_service.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/trunk/src/utest/srs_utest_service.cpp b/trunk/src/utest/srs_utest_service.cpp index 94da6ceb2..7532e42a9 100644 --- a/trunk/src/utest/srs_utest_service.cpp +++ b/trunk/src/utest/srs_utest_service.cpp @@ -1245,29 +1245,31 @@ VOID TEST(TCPServerTest, ContextUtility) EXPECT_EQ(0, ctx.set_id(100)); } + int base_size = 0; if (true) { int size = 0; char buf[1024]; HELPER_ARRAY_INIT(buf, 1024, 0); ASSERT_TRUE(srs_log_header(buf, 1024, true, true, "SRS", 100, "Trace", &size)); - EXPECT_EQ(53, size); + base_size = size; + EXPECT_TRUE(base_size > 0); } if (true) { int size = 0; char buf[1024]; HELPER_ARRAY_INIT(buf, 1024, 0); ASSERT_TRUE(srs_log_header(buf, 1024, false, true, "SRS", 100, "Trace", &size)); - EXPECT_EQ(53, size); + EXPECT_EQ(base_size, size); } if (true) { errno = 0; int size = 0; char buf[1024]; HELPER_ARRAY_INIT(buf, 1024, 0); ASSERT_TRUE(srs_log_header(buf, 1024, false, true, NULL, 100, "Trace", &size)); - EXPECT_EQ(48, size); + EXPECT_EQ(base_size - 5, size); } if (true) { int size = 0; char buf[1024]; HELPER_ARRAY_INIT(buf, 1024, 0); ASSERT_TRUE(srs_log_header(buf, 1024, false, false, NULL, 100, "Trace", &size)); - EXPECT_EQ(45, size); + EXPECT_EQ(base_size - 8, size); } if (true) { From 459488bcf8619601061954507fc2d70d24a9db42 Mon Sep 17 00:00:00 2001 From: "Michael.Ma" Date: Wed, 8 Jan 2020 17:54:06 +0800 Subject: [PATCH 07/18] fix logrotate empty file hole issue (#1561) * fix logrotate empty file hole issue refer to https://github.com/ossrs/srs/issues/1554 --- trunk/src/app/srs_app_log.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trunk/src/app/srs_app_log.cpp b/trunk/src/app/srs_app_log.cpp index 67f26930b..1c0a5dfd1 100644 --- a/trunk/src/app/srs_app_log.cpp +++ b/trunk/src/app/srs_app_log.cpp @@ -414,7 +414,7 @@ void SrsFastLog::open_log_file() if(fd == -1 && errno == ENOENT) { fd = open(filename.c_str(), - O_RDWR | O_CREAT | O_TRUNC, + O_RDWR | O_CREAT | O_TRUNC | O_APPEND/*logrotate copytruncate need this flag*/, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH ); } From 731e87876e811bd49f88642d8b73ff62008273bc Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 8 Jan 2020 17:57:04 +0800 Subject: [PATCH 08/18] Fix #1554, support logrotate copytruncate. 2.0.271 --- README.md | 2 ++ trunk/src/app/srs_app_log.cpp | 9 +-------- trunk/src/core/srs_core.hpp | 2 +- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ca203c440..5e02d9afb 100755 --- a/README.md +++ b/README.md @@ -338,6 +338,7 @@ Remark: ## History +* v2.0, 2020-01-08, Merge [#1554][bug #1554], support logrotate copytruncate. 2.0.271 * v2.0, 2020-01-05, Merge [#1551][bug #1551], fix memory leak in RTSP stack. 2.0.270 * v2.0, 2019-12-26, For [#1488][bug #1488], pass client ip to http callback. 2.0.269 * v2.0, 2019-12-23, Fix [srs-librtmp #22](https://github.com/ossrs/srs-librtmp/issues/22), parse vhost splited by single seperator. 2.0.268 @@ -1361,6 +1362,7 @@ Winlin [bug #1304]: https://github.com/ossrs/srs/pull/1304 [bug #1488]: https://github.com/ossrs/srs/issues/1488 [bug #1551]: https://github.com/ossrs/srs/pull/1551 +[bug #1554]: https://github.com/ossrs/srs/pull/1554 [bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx [exo #828]: https://github.com/google/ExoPlayer/pull/828 diff --git a/trunk/src/app/srs_app_log.cpp b/trunk/src/app/srs_app_log.cpp index 1c0a5dfd1..19ed6d253 100644 --- a/trunk/src/app/srs_app_log.cpp +++ b/trunk/src/app/srs_app_log.cpp @@ -410,13 +410,6 @@ void SrsFastLog::open_log_file() return; } - fd = ::open(filename.c_str(), O_RDWR | O_APPEND); - - if(fd == -1 && errno == ENOENT) { - fd = open(filename.c_str(), - O_RDWR | O_CREAT | O_TRUNC | O_APPEND/*logrotate copytruncate need this flag*/, - S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH - ); - } + fd = ::open(filename.c_str(), O_RDWR | O_CREAT | O_APPEND); } diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 11ff88418..0108a4829 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 270 +#define VERSION_REVISION 271 // generated by configure, only macros. #include From 59bc00e038264643d8dbf3b21518099173f430b9 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 8 Jan 2020 18:07:50 +0800 Subject: [PATCH 09/18] Add Michael.Ma --- AUTHORS.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index ae8a9f800..aa1670a7f 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -50,4 +50,5 @@ CONTRIBUTORS ordered by first contribution. * HungMingWu * Himer * xialixin -* alphonsetai \ No newline at end of file +* alphonsetai +* Michael.Ma \ No newline at end of file From dd46a4f70016b929730065bc2bfdecbb7b31298b Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 9 Jan 2020 10:03:17 +0800 Subject: [PATCH 10/18] Fix #1554, support logrotate copytruncate. 2.0.272 --- README.md | 2 +- trunk/src/app/srs_app_log.cpp | 5 ++++- trunk/src/core/srs_core.hpp | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5e02d9afb..5c8526662 100755 --- a/README.md +++ b/README.md @@ -338,7 +338,7 @@ Remark: ## History -* v2.0, 2020-01-08, Merge [#1554][bug #1554], support logrotate copytruncate. 2.0.271 +* v2.0, 2020-01-08, Merge [#1554][bug #1554], support logrotate copytruncate. 2.0.272 * v2.0, 2020-01-05, Merge [#1551][bug #1551], fix memory leak in RTSP stack. 2.0.270 * v2.0, 2019-12-26, For [#1488][bug #1488], pass client ip to http callback. 2.0.269 * v2.0, 2019-12-23, Fix [srs-librtmp #22](https://github.com/ossrs/srs-librtmp/issues/22), parse vhost splited by single seperator. 2.0.268 diff --git a/trunk/src/app/srs_app_log.cpp b/trunk/src/app/srs_app_log.cpp index 19ed6d253..eb8b89f55 100644 --- a/trunk/src/app/srs_app_log.cpp +++ b/trunk/src/app/srs_app_log.cpp @@ -410,6 +410,9 @@ void SrsFastLog::open_log_file() return; } - fd = ::open(filename.c_str(), O_RDWR | O_CREAT | O_APPEND); + fd = ::open(filename.c_str(), + O_RDWR | O_CREAT | O_APPEND, + S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH + ); } diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 0108a4829..84f48766f 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 271 +#define VERSION_REVISION 272 // generated by configure, only macros. #include From 98df29c6fbc2514653e105399f31291fe78cc774 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 10 Jan 2020 11:36:38 +0800 Subject: [PATCH 11/18] For #1042, improve test coverage for service. 3.0.97 --- README.md | 1 + trunk/src/core/srs_core.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5d23e8dcb..808bdbb9f 100755 --- a/README.md +++ b/README.md @@ -146,6 +146,7 @@ For previous versions, please read: ## V3 changes +* v3.0, 2020-01-09, For [#1042][bug #1042], improve test coverage for service. 3.0.97 * v3.0, 2020-01-08, Merge [#1554][bug #1554], support logrotate copytruncate. 3.0.96 * v3.0, 2020-01-05, Always use string instance to avoid crash risk. 3.0.95 * v3.0, 2020-01-05, For [#460][bug #460], fix ipv6 hostport parsing bug. 3.0.94 diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 94278aaeb..5a80e8f8e 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -27,7 +27,7 @@ // The version config. #define VERSION_MAJOR 3 #define VERSION_MINOR 0 -#define VERSION_REVISION 96 +#define VERSION_REVISION 97 // The macros generated by configure script. #include From 1f493cc037d5e782582f939c7cf27df53f6db6a0 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 10 Jan 2020 18:20:37 +0800 Subject: [PATCH 12/18] Release 3.0 alpha8, 3.0.97 --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 808bdbb9f..d66e35146 100755 --- a/README.md +++ b/README.md @@ -146,6 +146,7 @@ For previous versions, please read: ## V3 changes +* v3.0, 2020-01-10, [3.0 alpha8(3.0.97)][r3.0a8] released. 121555 lines. * v3.0, 2020-01-09, For [#1042][bug #1042], improve test coverage for service. 3.0.97 * v3.0, 2020-01-08, Merge [#1554][bug #1554], support logrotate copytruncate. 3.0.96 * v3.0, 2020-01-05, Always use string instance to avoid crash risk. 3.0.95 @@ -711,6 +712,7 @@ For previous versions, please read: ## Releases +* 2020-01-10, [Release v3.0-a8][r3.0a8], 3.0 alpha8, 3.0.97, 121555 lines. * 2019-12-29, [Release v3.0-a7][r3.0a7], 3.0 alpha7, 3.0.90, 116356 lines. * 2019-12-26, [Release v3.0-a6][r3.0a6], 3.0 alpha6, 3.0.85, 116056 lines. * 2019-12-19, [Release v3.0-a5][r3.0a5], 3.0 alpha5, 3.0.75, 115362 lines. @@ -1594,6 +1596,7 @@ Winlin [exo #828]: https://github.com/google/ExoPlayer/pull/828 +[r3.0a8]: https://github.com/ossrs/srs/releases/tag/v3.0-a8 [r3.0a7]: https://github.com/ossrs/srs/releases/tag/v3.0-a7 [r3.0a6]: https://github.com/ossrs/srs/releases/tag/v3.0-a6 [r3.0a5]: https://github.com/ossrs/srs/releases/tag/v3.0-a5 @@ -1658,6 +1661,4 @@ Winlin [branch2]: https://github.com/ossrs/srs/tree/2.0release [release2]: https://github.com/ossrs/srs/wiki/v1_CN_Product#release20 [release3]: https://github.com/ossrs/srs/wiki/v1_CN_Product#release30 -[centos0]: http://winlinvip.github.io/srs.release/releases/files/SRS-CentOS6-x86_64-3.0.56.zip -[centos1]: http://ossrs.net/srs.release/releases/files/SRS-CentOS6-x86_64-3.0.56.zip From 816aa91a7fc4909c82e66f33758e23406113d8e0 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 13 Jan 2020 14:48:49 +0800 Subject: [PATCH 13/18] Fix utest bug, init fd --- trunk/src/utest/srs_utest_service.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/trunk/src/utest/srs_utest_service.cpp b/trunk/src/utest/srs_utest_service.cpp index 7532e42a9..87a1c49d1 100644 --- a/trunk/src/utest/srs_utest_service.cpp +++ b/trunk/src/utest/srs_utest_service.cpp @@ -835,6 +835,7 @@ public: SrsSTCoroutine trd; srs_netfd_t fd; MockOnCycleThread3() : trd("mock", this, 0) { + fd = NULL; }; virtual ~MockOnCycleThread3() { trd.stop(); @@ -1087,6 +1088,7 @@ public: SrsSTCoroutine trd; srs_netfd_t fd; MockOnCycleThread4() : trd("mock", this, 0) { + fd = NULL; }; virtual ~MockOnCycleThread4() { trd.stop(); From 857c783efcf42bb11a9cb9e90f395f6b1dca5796 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 15 Jan 2020 19:51:33 +0800 Subject: [PATCH 14/18] For #1509, release coroutine when source is idle. 3.0.98 --- README.md | 2 ++ trunk/src/app/srs_app_dvr.cpp | 25 ++++++++++++++++++++++++- trunk/src/app/srs_app_dvr.hpp | 4 ++-- trunk/src/app/srs_app_hls.cpp | 24 +++++++++++++++++++++--- trunk/src/app/srs_app_hls.hpp | 3 +++ trunk/src/core/srs_core.hpp | 2 +- 6 files changed, 53 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d66e35146..31b8e31f2 100755 --- a/README.md +++ b/README.md @@ -146,6 +146,7 @@ For previous versions, please read: ## V3 changes +* v3.0, 2020-01-15, For [#1509][bug #1509], release coroutine when source is idle. 3.0.98 * v3.0, 2020-01-10, [3.0 alpha8(3.0.97)][r3.0a8] released. 121555 lines. * v3.0, 2020-01-09, For [#1042][bug #1042], improve test coverage for service. 3.0.97 * v3.0, 2020-01-08, Merge [#1554][bug #1554], support logrotate copytruncate. 3.0.96 @@ -1592,6 +1593,7 @@ Winlin [bug #1544]: https://github.com/ossrs/srs/issues/1544 [bug #1255]: https://github.com/ossrs/srs/issues/1255 [bug #1543]: https://github.com/ossrs/srs/issues/1543 +[bug #1509]: https://github.com/ossrs/srs/issues/1509 [bug #xxxxxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxxxxx [exo #828]: https://github.com/google/ExoPlayer/pull/828 diff --git a/trunk/src/app/srs_app_dvr.cpp b/trunk/src/app/srs_app_dvr.cpp index d29d22a23..507956aed 100644 --- a/trunk/src/app/srs_app_dvr.cpp +++ b/trunk/src/app/srs_app_dvr.cpp @@ -609,13 +609,25 @@ srs_error_t SrsDvrPlan::initialize(SrsOriginHub* h, SrsDvrSegmenter* s, SrsReque return srs_error_wrap(err, "segmenter"); } + return err; +} + +srs_error_t SrsDvrPlan::on_publish() +{ + srs_error_t err = srs_success; + if ((err = async->start()) != srs_success) { return srs_error_wrap(err, "async"); } - + return err; } +void SrsDvrPlan::on_unpublish() +{ + async->stop(); +} + srs_error_t SrsDvrPlan::on_meta_data(SrsSharedPtrMessage* shared_metadata) { srs_error_t err = srs_success; @@ -699,6 +711,10 @@ SrsDvrSessionPlan::~SrsDvrSessionPlan() srs_error_t SrsDvrSessionPlan::on_publish() { srs_error_t err = srs_success; + + if ((err = SrsDvrPlan::on_publish()) != srs_success) { + return err; + } // support multiple publish. if (dvr_enabled) { @@ -724,6 +740,8 @@ srs_error_t SrsDvrSessionPlan::on_publish() void SrsDvrSessionPlan::on_unpublish() { + SrsDvrPlan::on_unpublish(); + // support multiple publish. if (!dvr_enabled) { return; @@ -766,6 +784,10 @@ srs_error_t SrsDvrSegmentPlan::initialize(SrsOriginHub* h, SrsDvrSegmenter* s, S srs_error_t SrsDvrSegmentPlan::on_publish() { srs_error_t err = srs_success; + + if ((err = SrsDvrPlan::on_publish()) != srs_success) { + return err; + } // support multiple publish. if (dvr_enabled) { @@ -791,6 +813,7 @@ srs_error_t SrsDvrSegmentPlan::on_publish() void SrsDvrSegmentPlan::on_unpublish() { + SrsDvrPlan::on_unpublish(); } srs_error_t SrsDvrSegmentPlan::on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format) diff --git a/trunk/src/app/srs_app_dvr.hpp b/trunk/src/app/srs_app_dvr.hpp index 62ea1cb1e..716d45e0e 100644 --- a/trunk/src/app/srs_app_dvr.hpp +++ b/trunk/src/app/srs_app_dvr.hpp @@ -185,8 +185,8 @@ public: virtual ~SrsDvrPlan(); public: virtual srs_error_t initialize(SrsOriginHub* h, SrsDvrSegmenter* s, SrsRequest* r); - virtual srs_error_t on_publish() = 0; - virtual void on_unpublish() = 0; + virtual srs_error_t on_publish(); + virtual void on_unpublish(); virtual srs_error_t on_meta_data(SrsSharedPtrMessage* shared_metadata); virtual srs_error_t on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format); virtual srs_error_t on_video(SrsSharedPtrMessage* shared_video, SrsFormat* format); diff --git a/trunk/src/app/srs_app_hls.cpp b/trunk/src/app/srs_app_hls.cpp index 0f18f74a5..72ec535ca 100644 --- a/trunk/src/app/srs_app_hls.cpp +++ b/trunk/src/app/srs_app_hls.cpp @@ -268,16 +268,27 @@ int SrsHlsMuxer::deviation() } srs_error_t SrsHlsMuxer::initialize() +{ + return srs_success; +} + +srs_error_t SrsHlsMuxer::on_publish(SrsRequest* req) { srs_error_t err = srs_success; - + if ((err = async->start()) != srs_success) { return srs_error_wrap(err, "async start"); } - + return err; } +srs_error_t SrsHlsMuxer::on_unpublish() +{ + async->stop(); + return srs_success; +} + srs_error_t SrsHlsMuxer::update_config(SrsRequest* r, string entry_prefix, string path, string m3u8_file, string ts_file, srs_utime_t fragment, srs_utime_t window, bool ts_floor, double aof_ratio, bool cleanup, bool wait_keyframe, bool keys, @@ -899,8 +910,11 @@ srs_error_t SrsHlsController::on_publish(SrsRequest* req) // TODO: FIXME: support load exists m3u8, to continue publish stream. // for the HLS donot requires the EXT-X-MEDIA-SEQUENCE be monotonically increase. + + if ((err = muxer->on_publish(req)) != srs_success) { + return srs_error_wrap(err, "muxer publish"); + } - // open muxer if ((err = muxer->update_config(req, entry_prefix, path, m3u8_file, ts_file, hls_fragment, hls_window, ts_floor, hls_aof_ratio, cleanup, wait_keyframe,hls_keys,hls_fragments_per_key, hls_key_file, hls_key_file_path, hls_key_url)) != srs_success ) { @@ -924,6 +938,10 @@ srs_error_t SrsHlsController::on_publish(SrsRequest* req) srs_error_t SrsHlsController::on_unpublish() { srs_error_t err = srs_success; + + if ((err = muxer->on_unpublish()) != srs_success) { + return srs_error_wrap(err, "muxer unpublish"); + } if ((err = muxer->flush_audio(tsmc)) != srs_success) { return srs_error_wrap(err, "hls: flush audio"); diff --git a/trunk/src/app/srs_app_hls.hpp b/trunk/src/app/srs_app_hls.hpp index 194c183fb..1dd72eba5 100644 --- a/trunk/src/app/srs_app_hls.hpp +++ b/trunk/src/app/srs_app_hls.hpp @@ -185,6 +185,9 @@ public: public: // Initialize the hls muxer. virtual srs_error_t initialize(); + // When publish or unpublish stream. + virtual srs_error_t on_publish(SrsRequest* req); + virtual srs_error_t on_unpublish(); // When publish, update the config for muxer. virtual srs_error_t update_config(SrsRequest* r, std::string entry_prefix, std::string path, std::string m3u8_file, std::string ts_file, diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 5a80e8f8e..b6aa58342 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -27,7 +27,7 @@ // The version config. #define VERSION_MAJOR 3 #define VERSION_MINOR 0 -#define VERSION_REVISION 97 +#define VERSION_REVISION 98 // The macros generated by configure script. #include From 7240fe304092a91c97bc36fb3f0c1d34f41f506c Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 15 Jan 2020 21:26:02 +0800 Subject: [PATCH 15/18] For #1509, decrease the fast vector init size from 64KB to 64B. 3.0.99 --- README.md | 1 + trunk/auto/options.sh | 20 ++++---------------- trunk/auto/summary.sh | 5 +---- trunk/src/app/srs_app_config.cpp | 8 ++++---- trunk/src/app/srs_app_http_stream.cpp | 8 ++++---- trunk/src/app/srs_app_source.cpp | 4 ++-- trunk/src/core/srs_core.hpp | 2 +- 7 files changed, 17 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 31b8e31f2..f082fa7bb 100755 --- a/README.md +++ b/README.md @@ -146,6 +146,7 @@ For previous versions, please read: ## V3 changes +* v3.0, 2020-01-15, For [#1509][bug #1509], decrease the fast vector init size from 64KB to 64B. 3.0.99 * v3.0, 2020-01-15, For [#1509][bug #1509], release coroutine when source is idle. 3.0.98 * v3.0, 2020-01-10, [3.0 alpha8(3.0.97)][r3.0a8] released. 121555 lines. * v3.0, 2020-01-09, For [#1042][bug #1042], improve test coverage for service. 3.0.97 diff --git a/trunk/auto/options.sh b/trunk/auto/options.sh index a6436535c..d19e18356 100755 --- a/trunk/auto/options.sh +++ b/trunk/auto/options.sh @@ -122,6 +122,7 @@ Options: --with-research build the research tools. --with-utest build the utest for SRS. --with-gperf build SRS with gperf tools(no gmd/gmc/gmp/gcp, with tcmalloc only). + https://blog.csdn.net/win_lin/article/details/53503869 --with-gmc build memory check for SRS with gperf tools. --with-gmd build memory defense(corrupt memory) for SRS with gperf tools. --with-gmp build memory profile for SRS with gperf tools. @@ -198,6 +199,7 @@ Experts: --memory-watch enable memory watch to detect memory leaking(hurts performance). --export-librtmp-project= export srs-librtmp to specified project in path. --export-librtmp-single= export srs-librtmp to a single file(.h+.cpp) in path. + --with-valgrind support valgrind for memory check. --without-valgrind donot support valgrind for memory check. Workflow: @@ -207,10 +209,7 @@ Workflow: 4. generate detail features. Remark: - 1. both ubuntu12 and ubuntu14 are ok for SRS. - 2. the centos5, centos6 and centos7 are ok for SRS. - 3. all linux and unix-like os are ok for SRS. - 4. windows is absolutely impossible for SRS. + 1. For performance improving, read https://blog.csdn.net/win_lin/article/details/53503869 END } @@ -289,6 +288,7 @@ function parse_user_option() { --memory-watch) SRS_MEM_WATCH=YES ;; --export-librtmp-project) SRS_EXPORT_LIBRTMP_PROJECT=${value} ;; --export-librtmp-single) SRS_EXPORT_LIBRTMP_SINGLE=${value} ;; + --with-valgrind) SRS_VALGRIND=YES ;; --without-valgrind) SRS_VALGRIND=NO ;; --with-http-callback) SRS_HTTP_CALLBACK=YES ;; @@ -395,18 +395,6 @@ function apply_user_presets() { SRS_STATIC=NO fi - # for osx(darwin) - if [ $SRS_OSX = YES ]; then - SRS_HDS=YES - SRS_LIBRTMP=YES - SRS_RESEARCH=NO - SRS_UTEST=YES - SRS_STATIC=NO - # valgrind is not supported by macOS sierra, read - # https://stackoverflow.com/questions/40650338/valgrind-on-macos-sierra - SRS_VALGRIND=NO - fi - # if dev specified, open features if possible. if [ $SRS_DEV = YES ]; then SRS_HDS=YES diff --git a/trunk/auto/summary.sh b/trunk/auto/summary.sh index f19a27722..0af1673b1 100755 --- a/trunk/auto/summary.sh +++ b/trunk/auto/summary.sh @@ -43,16 +43,13 @@ echo -e " \${BLACK}+-------------------------------------------------------- echo -e " |\${GREEN}The main server usage: ./objs/srs -c conf/srs.conf, start the srs server\${BLACK}" echo -e " | ${SrsHlsSummaryColor}About HLS, please read https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHLS\${BLACK}" echo -e " | ${SrsDvrSummaryColor}About DVR, please read https://github.com/ossrs/srs/wiki/v3_CN_DVR\${BLACK}" -echo -e " | ${SrsNginxSummaryColor}About NGINX, please read https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHLS\${BLACK}" echo -e " | ${SrsSslSummaryColor}About SSL, please read https://github.com/ossrs/srs/wiki/v1_CN_RTMPHandshake\${BLACK}" -echo -e " | ${SrsFfmpegSummaryColor}About FFMPEG, please read https://github.com/ossrs/srs/wiki/v3_CN_FFMPEG\${BLACK}" echo -e " | ${SrsTranscodeSummaryColor}About transcoding, please read https://github.com/ossrs/srs/wiki/v3_CN_FFMPEG\${BLACK}" echo -e " | ${SrsIngestSummaryColor}About ingester, please read https://github.com/ossrs/srs/wiki/v1_CN_Ingest\${BLACK}" echo -e " | ${SrsHttpCallbackSummaryColor}About http-callback, please read https://github.com/ossrs/srs/wiki/v3_CN_HTTPCallback\${BLACK}" -echo -e " | ${SrsHttpServerSummaryColor}Aoubt embeded http-server, please read https://github.com/ossrs/srs/wiki/v2_CN_HTTPServer\${BLACK}" +echo -e " | ${SrsHttpServerSummaryColor}Aoubt http-server, please read https://github.com/ossrs/srs/wiki/v2_CN_HTTPServer\${BLACK}" echo -e " | ${SrsHttpApiSummaryColor}About http-api, please read https://github.com/ossrs/srs/wiki/v3_CN_HTTPApi\${BLACK}" echo -e " | ${SrsStreamCasterSummaryColor}About stream-caster, please read https://github.com/ossrs/srs/wiki/v2_CN_Streamer\${BLACK}" -echo -e " | ${SrsKafkaSummaryColor}About kafka, please read https://github.com/ossrs/srs/wiki/v3_CN_Kafka\${BLACK}" echo -e " | ${SrsValgrindSummaryColor}About VALGRIND, please read https://github.com/ossrs/state-threads/issues/2\${BLACK}" echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" echo -e "\${GREEN}binaries, please read https://github.com/ossrs/srs/wiki/v2_CN_Build\${BLACK}" diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index a0277f3c9..20594b917 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -6771,22 +6771,22 @@ string SrsConfig::get_vhost_http_dir(string vhost) bool SrsConfig::get_vhost_http_remux_enabled(string vhost) { static bool DEFAULT = false; - + SrsConfDirective* conf = get_vhost(vhost); if (!conf) { return DEFAULT; } - + conf = conf->get("http_remux"); if (!conf) { return DEFAULT; } - + conf = conf->get("enabled"); if (!conf || conf->arg0().empty()) { return DEFAULT; } - + return SRS_CONF_PERFER_FALSE(conf->arg0()); } diff --git a/trunk/src/app/srs_app_http_stream.cpp b/trunk/src/app/srs_app_http_stream.cpp index 21d84be59..dddacdf92 100755 --- a/trunk/src/app/srs_app_http_stream.cpp +++ b/trunk/src/app/srs_app_http_stream.cpp @@ -1023,7 +1023,7 @@ srs_error_t SrsHttpStreamServer::hijack(ISrsHttpMessage* request, ISrsHttpHandle if (it == tflvs.end()) { return err; } - + // hstrs always enabled. // for origin, the http stream will be mount already when publish, // so it must never enter this line for stream already mounted. @@ -1064,7 +1064,7 @@ srs_error_t SrsHttpStreamServer::hijack(ISrsHttpMessage* request, ISrsHttpHandle if (srs_string_count(upath, "/") != srs_string_count(entry->mount, "/")) { return err; } - + // convert to concreate class. SrsHttpMessage* hreq = dynamic_cast(request); srs_assert(hreq); @@ -1127,7 +1127,7 @@ srs_error_t SrsHttpStreamServer::initialize_flv_streaming() if (!conf->is_vhost()) { continue; } - + if ((err = initialize_flv_entry(conf->arg0())) != srs_success) { return srs_error_wrap(err, "init flv entries"); } @@ -1139,7 +1139,7 @@ srs_error_t SrsHttpStreamServer::initialize_flv_streaming() srs_error_t SrsHttpStreamServer::initialize_flv_entry(std::string vhost) { srs_error_t err = srs_success; - + if (!_srs_config->get_vhost_http_remux_enabled(vhost)) { return err; } diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index 788773c80..b058f55a1 100755 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -154,7 +154,7 @@ int64_t SrsRtmpJitter::get_time() SrsFastVector::SrsFastVector() { count = 0; - nb_msgs = SRS_PERF_MW_MSGS * 8; + nb_msgs = 8; msgs = new SrsSharedPtrMessage*[nb_msgs]; } @@ -212,7 +212,7 @@ void SrsFastVector::push_back(SrsSharedPtrMessage* msg) { // increase vector. if (count >= nb_msgs) { - int size = nb_msgs * 2; + int size = srs_max(SRS_PERF_MW_MSGS * 8, nb_msgs * 2); SrsSharedPtrMessage** buf = new SrsSharedPtrMessage*[size]; for (int i = 0; i < nb_msgs; i++) { buf[i] = msgs[i]; diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index b6aa58342..db851d3d4 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -27,7 +27,7 @@ // The version config. #define VERSION_MAJOR 3 #define VERSION_MINOR 0 -#define VERSION_REVISION 98 +#define VERSION_REVISION 99 // The macros generated by configure script. #include From 0e750ab3eb5728acef822790f8df6ac7c21d4c64 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 16 Jan 2020 14:28:05 +0800 Subject: [PATCH 16/18] For #1575, use RTMP redirect as tcUrl and redirect2 as RTMP URL. 3.0.100 --- README.md | 2 ++ trunk/src/app/srs_app_edge.cpp | 11 ++++++++--- trunk/src/app/srs_app_rtmp_conn.cpp | 8 +++++--- trunk/src/app/srs_app_source.cpp | 2 +- trunk/src/core/srs_core.hpp | 2 +- trunk/src/protocol/srs_rtmp_stack.cpp | 13 ++++++++----- trunk/src/protocol/srs_rtmp_stack.hpp | 4 ++-- trunk/src/utest/srs_utest_rtmp.cpp | 22 ++++++++++++++++++++-- 8 files changed, 47 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index f082fa7bb..5e1fed5a1 100755 --- a/README.md +++ b/README.md @@ -146,6 +146,7 @@ For previous versions, please read: ## V3 changes +* v3.0, 2020-01-16, For [#1575][bug #1575], use RTMP redirect as tcUrl and redirect2 as RTMP URL. 3.0.100 * v3.0, 2020-01-15, For [#1509][bug #1509], decrease the fast vector init size from 64KB to 64B. 3.0.99 * v3.0, 2020-01-15, For [#1509][bug #1509], release coroutine when source is idle. 3.0.98 * v3.0, 2020-01-10, [3.0 alpha8(3.0.97)][r3.0a8] released. 121555 lines. @@ -1595,6 +1596,7 @@ Winlin [bug #1255]: https://github.com/ossrs/srs/issues/1255 [bug #1543]: https://github.com/ossrs/srs/issues/1543 [bug #1509]: https://github.com/ossrs/srs/issues/1509 +[bug #1575]: https://github.com/ossrs/srs/issues/1575 [bug #xxxxxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxxxxx [exo #828]: https://github.com/google/ExoPlayer/pull/828 diff --git a/trunk/src/app/srs_app_edge.cpp b/trunk/src/app/srs_app_edge.cpp index 8d9d116a8..8a0592dcf 100644 --- a/trunk/src/app/srs_app_edge.cpp +++ b/trunk/src/app/srs_app_edge.cpp @@ -416,9 +416,14 @@ srs_error_t SrsEdgeIngester::process_publish_message(SrsCommonMessage* msg, stri return err; } SrsAmf0Object* ex = prop->to_object(); - - if ((prop = ex->ensure_property_string("redirect")) == NULL) { - return err; + + // The redirect is tcUrl while redirect2 is RTMP URL. + // https://github.com/ossrs/srs/issues/1575#issuecomment-574999798 + if ((prop = ex->ensure_property_string("redirect2")) == NULL) { + // TODO: FIXME: Remove it when SRS3 released, it's temporarily support for SRS3 alpha versions(a0 to a8). + if ((prop = ex->ensure_property_string("redirect")) == NULL) { + return err; + } } redirect = prop->to_str(); diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index 6ed6ca712..f846df0dc 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -621,8 +621,10 @@ srs_error_t SrsRtmpConn::playing(SrsSource* source) } return srs_error_wrap(err, "discover coworkers, url=%s", url.c_str()); } - srs_trace("rtmp: redirect in cluster, from=%s:%d, target=%s:%d, url=%s", - req->host.c_str(), req->port, host.c_str(), port, url.c_str()); + + string rurl = srs_generate_rtmp_url(host, port, req->host, req->vhost, req->app, req->stream, req->param); + srs_trace("rtmp: redirect in cluster, from=%s:%d, target=%s:%d, url=%s, rurl=%s", + req->host.c_str(), req->port, host.c_str(), port, url.c_str(), rurl.c_str()); // Ignore if host or port is invalid. if (host.empty() || port == 0) { @@ -630,7 +632,7 @@ srs_error_t SrsRtmpConn::playing(SrsSource* source) } bool accepted = false; - if ((err = rtmp->redirect(req, host, port, accepted)) != srs_success) { + if ((err = rtmp->redirect(req, rurl, accepted)) != srs_success) { srs_error_reset(err); } else { return srs_error_new(ERROR_CONTROL_REDIRECT, "redirected"); diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index b058f55a1..39e704226 100755 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -217,7 +217,7 @@ void SrsFastVector::push_back(SrsSharedPtrMessage* msg) for (int i = 0; i < nb_msgs; i++) { buf[i] = msgs[i]; } - srs_warn("fast vector incrase %d=>%d", nb_msgs, size); + srs_info("fast vector incrase %d=>%d", nb_msgs, size); // use new array. srs_freepa(msgs); diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index db851d3d4..283e34e95 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -27,7 +27,7 @@ // The version config. #define VERSION_MAJOR 3 #define VERSION_MINOR 0 -#define VERSION_REVISION 99 +#define VERSION_REVISION 100 // The macros generated by configure script. #include diff --git a/trunk/src/protocol/srs_rtmp_stack.cpp b/trunk/src/protocol/srs_rtmp_stack.cpp index ae43916ce..bec1ad35c 100644 --- a/trunk/src/protocol/srs_rtmp_stack.cpp +++ b/trunk/src/protocol/srs_rtmp_stack.cpp @@ -2415,17 +2415,20 @@ srs_error_t SrsRtmpServer::response_connect_app(SrsRequest *req, const char* ser } #define SRS_RTMP_REDIRECT_TIMEOUT (3 * SRS_UTIME_SECONDS) -srs_error_t SrsRtmpServer::redirect(SrsRequest* r, string host, int port, bool& accepted) +srs_error_t SrsRtmpServer::redirect(SrsRequest* r, string url, bool& accepted) { srs_error_t err = srs_success; if (true) { - string url = srs_generate_rtmp_url(host, port, r->host, r->vhost, r->app, r->stream, r->param); - SrsAmf0Object* ex = SrsAmf0Any::object(); ex->set("code", SrsAmf0Any::number(302)); - ex->set("redirect", SrsAmf0Any::str(url.c_str())); - + + // The redirect is tcUrl while redirect2 is RTMP URL. + // https://github.com/ossrs/srs/issues/1575#issuecomment-574999798 + string tcUrl = srs_path_dirname(url); + ex->set("redirect", SrsAmf0Any::str(tcUrl.c_str())); + ex->set("redirect2", SrsAmf0Any::str(url.c_str())); + SrsOnStatusCallPacket* pkt = new SrsOnStatusCallPacket(); pkt->data->set(StatusLevel, SrsAmf0Any::str(StatusLevelError)); diff --git a/trunk/src/protocol/srs_rtmp_stack.hpp b/trunk/src/protocol/srs_rtmp_stack.hpp index 82c9bf006..c43c4ee17 100644 --- a/trunk/src/protocol/srs_rtmp_stack.hpp +++ b/trunk/src/protocol/srs_rtmp_stack.hpp @@ -707,9 +707,9 @@ public: // @param server_ip the ip of server. virtual srs_error_t response_connect_app(SrsRequest* req, const char* server_ip = NULL); // Redirect the connection to another rtmp server. - // @param the hostname or ip of target. + // @param a RTMP url to redirect to. // @param whether the client accept the redirect. - virtual srs_error_t redirect(SrsRequest* r, std::string host, int port, bool& accepted); + virtual srs_error_t redirect(SrsRequest* r, std::string url, bool& accepted); // Reject the connect app request. virtual void response_connect_reject(SrsRequest* req, const char* desc); // Response client the onBWDone message. diff --git a/trunk/src/utest/srs_utest_rtmp.cpp b/trunk/src/utest/srs_utest_rtmp.cpp index 47ec84aa6..7acc3d4c2 100644 --- a/trunk/src/utest/srs_utest_rtmp.cpp +++ b/trunk/src/utest/srs_utest_rtmp.cpp @@ -1751,7 +1751,8 @@ VOID TEST(ProtocolRTMPTest, ServerRedirect) string host = "target.net"; int port = 8888; bool accepted = false; - HELPER_EXPECT_SUCCESS(r.redirect(&req, host, port, accepted)); + string rurl = srs_generate_rtmp_url(host, port, req.host, req.vhost, req.app, req.stream, req.param); + HELPER_EXPECT_SUCCESS(r.redirect(&req, rurl, accepted)); if (true) { MockBufferIO tio; @@ -1776,6 +1777,14 @@ VOID TEST(ProtocolRTMPTest, ServerRedirect) prop = ex->get_property("redirect"); ASSERT_TRUE(prop && prop->is_string()); + // The recirect is tcUrl, not RTMP URL. + // https://github.com/ossrs/srs/issues/1575#issuecomment-574995475 + EXPECT_STREQ("rtmp://target.net:8888/live", prop->to_str().c_str()); + + prop = ex->get_property("redirect2"); + ASSERT_TRUE(prop && prop->is_string()); + // The recirect2 is RTMP URL. + // https://github.com/ossrs/srs/issues/1575#issuecomment-574999798 EXPECT_STREQ("rtmp://target.net:8888/live/livestream", prop->to_str().c_str()); srs_freep(msg); @@ -1808,7 +1817,8 @@ VOID TEST(ProtocolRTMPTest, ServerRedirect) string host = "target.net"; int port = 8888; bool accepted = false; - HELPER_EXPECT_SUCCESS(r.redirect(&req, host, port, accepted)); + string rurl = srs_generate_rtmp_url(host, port, req.host, req.vhost, req.app, req.stream, req.param); + HELPER_EXPECT_SUCCESS(r.redirect(&req, rurl, accepted)); EXPECT_TRUE(accepted); if (true) { @@ -1834,6 +1844,14 @@ VOID TEST(ProtocolRTMPTest, ServerRedirect) prop = ex->get_property("redirect"); ASSERT_TRUE(prop && prop->is_string()); + // The recirect is tcUrl, not RTMP URL. + // https://github.com/ossrs/srs/issues/1575#issuecomment-574995475 + EXPECT_STREQ("rtmp://target.net:8888/live", prop->to_str().c_str()); + + prop = ex->get_property("redirect2"); + ASSERT_TRUE(prop && prop->is_string()); + // The recirect2 is RTMP URL. + // https://github.com/ossrs/srs/issues/1575#issuecomment-574999798 EXPECT_STREQ("rtmp://target.net:8888/live/livestream", prop->to_str().c_str()); srs_freep(msg); From 11c2ca3b0a15eddaf5b0df76560c986f54fcb9b0 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 16 Jan 2020 14:33:48 +0800 Subject: [PATCH 17/18] word the cr comment --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5e1fed5a1..ceffbcfd9 100755 --- a/README.md +++ b/README.md @@ -146,7 +146,7 @@ For previous versions, please read: ## V3 changes -* v3.0, 2020-01-16, For [#1575][bug #1575], use RTMP redirect as tcUrl and redirect2 as RTMP URL. 3.0.100 +* v3.0, 2020-01-16, For [#1575][bug #1575], correct RTMP redirect as tcUrl, add redirect2 as RTMP URL. 3.0.100 * v3.0, 2020-01-15, For [#1509][bug #1509], decrease the fast vector init size from 64KB to 64B. 3.0.99 * v3.0, 2020-01-15, For [#1509][bug #1509], release coroutine when source is idle. 3.0.98 * v3.0, 2020-01-10, [3.0 alpha8(3.0.97)][r3.0a8] released. 121555 lines. From fea293d0b16f7e74f1af219f59b8d5be9d8b1ff2 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 16 Jan 2020 14:37:30 +0800 Subject: [PATCH 18/18] Fix #1042, improve test coverage for core/kernel/protocol/service. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ceffbcfd9..f82cc2465 100755 --- a/README.md +++ b/README.md @@ -116,6 +116,7 @@ For previous versions, please read: - [x] Support origin cluster, please read [#464][bug #464], [RTMP 302][bug #92]. - [x] Support listen at IPv4 and IPv6, read [#460][bug #460]. - [x] Support SO_REUSEPORT, to improve edge server performance, read [#775][bug #775]. +- [x] Improve test coverage for core/kernel/protocol/service. - [x] [Experimental] Support docker by [srs-docker](https://github.com/ossrs/srs-docker). - [x] [Experimental] Support DVR in MP4 format, read [#738][bug #738]. - [x] [Experimental] Support MPEG-DASH, the future live streaming protocol, read [#299][bug #299]. @@ -129,7 +130,6 @@ For previous versions, please read: - [x] [Deprecated] Support Adobe HDS(f4m), please read wiki([CN][v2_CN_DeliveryHDS], [EN][v2_EN_DeliveryHDS]) and [#1535][bug #1535]. - [x] [Deprecated] Support bandwidth testing([CN][v1_CN_BandwidthTestTool], [EN][v1_EN_BandwidthTestTool]), please read [#1535][bug #1535]. - [x] [Deprecated] Support Adobe FMS/AMS token traverse([CN][v3_CN_DRM2], [EN][v3_EN_DRM2]) authentication, please read [#1535][bug #1535]. -- [ ] Utest cover almost all kernel code. - [ ] Enhanced forwarding with vhost and variables. - [ ] Support source cleanup for idle streams. - [ ] Support H.265 by pushing H.265 over RTMP, deliverying in HLS, read [#465][bug #465].