Skip to content

Commit

Permalink
fixed #2320
Browse files Browse the repository at this point in the history
  • Loading branch information
jeanlf committed Nov 23, 2022
1 parent c319418 commit 78f5269
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 7 deletions.
44 changes: 39 additions & 5 deletions src/ietf/rtp_packetizer.c
Expand Up @@ -579,13 +579,27 @@ GF_Err gf_rtp_builder_format_sdp(GP_RTPPacketizer *builder, char *payload_name,
char buffer[20100], dsiString[20000];
u32 i, k;
Bool is_first = GF_TRUE;
char *sdp = NULL;
GF_Err e = GF_OK;

if ((builder->rtp_payt!=GF_RTP_PAYT_MPEG4) && (builder->rtp_payt!=GF_RTP_PAYT_LATM) ) return GF_BAD_PARAM;

#define SDP_ADD_INT(_name, _val) { if (!is_first) strcat(sdpLine, "; "); sprintf(buffer, "%s=%d", _name, _val); strcat(sdpLine, buffer); is_first = 0;}
#define SDP_ADD_STR(_name, _val) { if (!is_first) strcat(sdpLine, "; "); sprintf(buffer, "%s=%s", _name, _val); strcat(sdpLine, buffer); is_first = 0;}
#define SDP_ADD_INT(_name, _val) {\
if (!is_first) gf_dynstrcat(&sdp, "; ", NULL); \
sprintf(buffer, "%s=%d", _name, _val);\
gf_dynstrcat(&sdp, buffer, NULL);\
is_first = 0;\
}

#define SDP_ADD_STR(_name, _val) {\
if (!is_first) gf_dynstrcat(&sdp, "; ", NULL);\
sprintf(buffer, "%s=%s", _name, _val);\
gf_dynstrcat(&sdp, buffer, NULL);\
is_first = 0;\
}

sprintf(sdpLine, "a=fmtp:%d ", builder->PayloadType);
sprintf(buffer, "a=fmtp:%d ", builder->PayloadType);
gf_dynstrcat(&sdp, buffer, NULL);

/*mandatory fields*/
if (builder->slMap.PL_ID) SDP_ADD_INT("profile-level-id", builder->slMap.PL_ID);
Expand All @@ -594,14 +608,21 @@ GF_Err gf_rtp_builder_format_sdp(GP_RTPPacketizer *builder, char *payload_name,

if (dsi && dsi_size) {
k = 0;
if (dsi_size>10000) {
e = GF_OUT_OF_MEM;
goto exit;
}
for (i=0; i<dsi_size; i++) {
sprintf(&dsiString[k], "%02x", (unsigned char) dsi[i]);
k+=2;
}
dsiString[k] = 0;
SDP_ADD_STR("config", dsiString);
}
if (!strcmp(payload_name, "MP4V-ES") || (builder->rtp_payt == GF_RTP_PAYT_LATM) ) return GF_OK;
if (!strcmp(payload_name, "MP4V-ES") || (builder->rtp_payt == GF_RTP_PAYT_LATM) ) {
e = GF_OK;
goto exit;
}

SDP_ADD_INT("streamType", builder->slMap.StreamType);
if (strcmp(builder->slMap.mode, "") && strcmp(builder->slMap.mode, "default")) {
Expand Down Expand Up @@ -635,7 +656,20 @@ GF_Err gf_rtp_builder_format_sdp(GP_RTPPacketizer *builder, char *payload_name,
if (builder->slMap.KI_length) SDP_ADD_INT("ISMACrypKeyIndicatorLength", builder->slMap.KI_length);
if (builder->flags & GP_RTP_PCK_KEY_IDX_PER_AU) SDP_ADD_INT("ISMACrypKeyIndicatorPerAU", 1);
}
return GF_OK;

exit:
sdpLine[0] = 0;
if (sdp) {
k = (u32) strlen(sdp);
if (k<20000)
strcpy(sdpLine, sdp);
else
e = GF_OUT_OF_MEM;
gf_free(sdp);
} else {
e = GF_OUT_OF_MEM;
}
return e;
}

#endif /*GPAC_DISABLE_STREAMING*/
6 changes: 4 additions & 2 deletions src/media_tools/isom_hinter.c
Expand Up @@ -1024,14 +1024,16 @@ GF_Err gf_hinter_track_finalize(GF_RTPHinter *tkHint, Bool AddSystemInfo)
}
/*MPEG-4 decoder config*/
else if (tkHint->rtp_p->rtp_payt==GF_RTP_PAYT_MPEG4) {
GF_Err e;
esd = gf_isom_get_esd(tkHint->file, tkHint->TrackNum, 1);

if (esd && esd->decoderConfig && esd->decoderConfig->decoderSpecificInfo && esd->decoderConfig->decoderSpecificInfo->data) {
gf_rtp_builder_format_sdp(tkHint->rtp_p, payloadName, sdpLine, esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength);
e = gf_rtp_builder_format_sdp(tkHint->rtp_p, payloadName, sdpLine, esd->decoderConfig->decoderSpecificInfo->data, esd->decoderConfig->decoderSpecificInfo->dataLength);
} else {
gf_rtp_builder_format_sdp(tkHint->rtp_p, payloadName, sdpLine, NULL, 0);
e = gf_rtp_builder_format_sdp(tkHint->rtp_p, payloadName, sdpLine, NULL, 0);
}
if (esd) gf_odf_desc_del((GF_Descriptor *)esd);
if (e) return e;

if (tkHint->rtp_p->slMap.IV_length) {
const char *kms;
Expand Down

0 comments on commit 78f5269

Please sign in to comment.