in source/src/AppCommon.c [41:84]
static STATUS onMediaSinkHook(PVOID udata, PFrame pFrame)
{
STATUS retStatus = STATUS_SUCCESS;
PAppConfiguration pAppConfiguration = (PAppConfiguration) udata;
PStreamingSession pStreamingSession = NULL;
PRtcRtpTransceiver pRtcRtpTransceiver = NULL;
UINT32 i;
CHK(pAppConfiguration != NULL, STATUS_APP_COMMON_NULL_ARG);
MUTEX_LOCK(pAppConfiguration->streamingSessionListReadLock);
for (i = 0; i < pAppConfiguration->streamingSessionCount; ++i) {
pStreamingSession = pAppConfiguration->streamingSessionList[i];
if (pFrame->trackId == DEFAULT_VIDEO_TRACK_ID) {
if (pStreamingSession->firstKeyFrame == FALSE && pFrame->flags != FRAME_FLAG_KEY_FRAME) {
continue;
} else {
pStreamingSession->firstKeyFrame = TRUE;
}
}
pFrame->index = (UINT32) ATOMIC_INCREMENT(&pStreamingSession->frameIndex);
if (pFrame->trackId == DEFAULT_AUDIO_TRACK_ID) {
pRtcRtpTransceiver = pStreamingSession->pAudioRtcRtpTransceiver;
} else {
pRtcRtpTransceiver = pStreamingSession->pVideoRtcRtpTransceiver;
}
retStatus = writeFrame(pRtcRtpTransceiver, pFrame);
if (retStatus != STATUS_SUCCESS) {
// STATUS_SRTP_NOT_READY_YET
DLOGW("writeFrame() failed with 0x%08x", retStatus);
retStatus = STATUS_SUCCESS;
}
}
MUTEX_UNLOCK(pAppConfiguration->streamingSessionListReadLock);
CleanUp:
if (pAppConfiguration != NULL && ATOMIC_LOAD_BOOL(&pAppConfiguration->terminateApp)) {
retStatus = STATUS_APP_COMMON_SHUTDOWN_MEDIA;
}
return retStatus;
}