Browse Source

Merge pull request #309 from in2core/hotfix/capi-h264-maximum-fragment-size

C API - set h264 maximum fragment size
Paul-Louis Ageneau 4 years ago
parent
commit
329b133383
3 changed files with 11 additions and 6 deletions
  1. 1 1
      include/rtc/nalunit.hpp
  2. 8 3
      include/rtc/rtc.h
  3. 2 2
      src/capi.cpp

+ 1 - 1
include/rtc/nalunit.hpp

@@ -144,7 +144,7 @@ protected:
 
 
 class RTC_CPP_EXPORT NalUnits : public std::vector<NalUnit> {
 class RTC_CPP_EXPORT NalUnits : public std::vector<NalUnit> {
 public:
 public:
-	static const uint16_t defaultMaximumFragmentSize = 1100;
+	static const uint16_t defaultMaximumFragmentSize = 1400;
 	std::vector<rtc::binary>
 	std::vector<rtc::binary>
 	generateFragments(uint16_t maximumFragmentSize = NalUnits::defaultMaximumFragmentSize);
 	generateFragments(uint16_t maximumFragmentSize = NalUnits::defaultMaximumFragmentSize);
 };
 };

+ 8 - 3
include/rtc/rtc.h

@@ -39,6 +39,10 @@ extern "C" {
 #define RTC_ENABLE_WEBSOCKET 1
 #define RTC_ENABLE_WEBSOCKET 1
 #endif
 #endif
 
 
+#if RTC_ENABLE_MEDIA
+#define RTC_DEFAULT_MAXIMUM_FRAGMENT_SIZE ((uint16_t)1400)
+#endif
+
 #include <stdbool.h>
 #include <stdbool.h>
 #include <stdint.h>
 #include <stdint.h>
 
 
@@ -220,9 +224,10 @@ RTC_EXPORT int rtcAddTrackEx(int pc, rtcCodec codec, int payloadType, uint32_t s
 /// @param cname CName
 /// @param cname CName
 /// @param payloadType Payload Type
 /// @param payloadType Payload Type
 /// @param clockRate Clock rate
 /// @param clockRate Clock rate
-/// @param _sequenceNumber Sequence number
-/// @param _timestamp Timestamp
-RTC_EXPORT int rtcSetH264PacketizationHandler(int tr, uint32_t ssrc, const char * cname, uint8_t payloadType, uint32_t clockRate, uint16_t _sequenceNumber, uint32_t _timestamp);
+/// @param maxFragmentSize Maximum NALU fragment size
+/// @param sequenceNumber Sequence number
+/// @param timestamp Timestamp
+RTC_EXPORT int rtcSetH264PacketizationHandler(int tr, uint32_t ssrc, const char * cname, uint8_t payloadType, uint32_t clockRate, uint16_t maxFragmentSize, uint16_t sequenceNumber, uint32_t timestamp);
 
 
 /// Set OpusPacketizationHandler for track
 /// Set OpusPacketizationHandler for track
 /// @param tr Track id
 /// @param tr Track id

+ 2 - 2
src/capi.cpp

@@ -528,7 +528,7 @@ int rtcAddTrackEx(int pc, rtcCodec codec, int payloadType, uint32_t ssrc, const
 }
 }
 
 
 int rtcSetH264PacketizationHandler(int tr, uint32_t ssrc, const char *cname, uint8_t payloadType,
 int rtcSetH264PacketizationHandler(int tr, uint32_t ssrc, const char *cname, uint8_t payloadType,
-                                   uint32_t clockRate, uint16_t sequenceNumber,
+                                   uint32_t clockRate, uint16_t maxFragmentSize, uint16_t sequenceNumber,
                                    uint32_t timestamp) {
                                    uint32_t timestamp) {
 	return WRAP({
 	return WRAP({
 		auto track = getTrack(tr);
 		auto track = getTrack(tr);
@@ -539,7 +539,7 @@ int rtcSetH264PacketizationHandler(int tr, uint32_t ssrc, const char *cname, uin
 		auto packetizer = shared_ptr<H264RTPPacketizer>(new H264RTPPacketizer(rtpConfig));
 		auto packetizer = shared_ptr<H264RTPPacketizer>(new H264RTPPacketizer(rtpConfig));
 		// create H264 and RTCP SP handler
 		// create H264 and RTCP SP handler
 		shared_ptr<H264PacketizationHandler> h264Handler(
 		shared_ptr<H264PacketizationHandler> h264Handler(
-		    new H264PacketizationHandler(H264PacketizationHandler::Separator::Length, packetizer));
+		    new H264PacketizationHandler(H264PacketizationHandler::Separator::Length, packetizer, maxFragmentSize));
 		emplaceRTCPSender(h264Handler, tr);
 		emplaceRTCPSender(h264Handler, tr);
 		emplaceRTPConfig(rtpConfig, tr);
 		emplaceRTPConfig(rtpConfig, tr);
 		// set handler
 		// set handler