void DummySink::afterGettingFrame(unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned /*durationInMicroseconds*/) { #ifndef ANDROID extern pthread_mutex_t watchdogMutex; extern struct timeval watchdogTimer; #endif if(fSubsession.rtpPayloadFormat() == video_sess_fmt) { bool marker = false; int channel = port2channel[fSubsession.clientPortNum()]; RTPSource *rtpsrc = fSubsession.rtpSource(); #ifdef ANDROID // support only single channel if(channel > 0) goto dropped; #endif if(rtpsrc != NULL) { marker = rtpsrc->curPacketMarkerBit(); } play_video(channel, fReceiveBuffer+MAX_FRAMING_SIZE-video_framing, frameSize+video_framing, presentationTime, marker); #ifdef ANDROID if(rtspconf->builtin_video_decoder==0 && rtspconf->builtin_audio_decoder==0) kickWatchdog(rtspParam->jnienv); #endif } else if(fSubsession.rtpPayloadFormat() == audio_sess_fmt) { play_audio(fReceiveBuffer+MAX_FRAMING_SIZE-audio_framing, frameSize+audio_framing, presentationTime); } #ifndef ANDROID // watchdog is implemented at the Java side pthread_mutex_lock(&watchdogMutex); gettimeofday(&watchdogTimer, NULL); pthread_mutex_unlock(&watchdogMutex); #endif dropped: // Then continue, to request the next frame of data: continuePlaying(); }