static STATUS onMediaSinkHook()

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;
}