Hi Ross, Thanks for your comment. Here is the implementation of doGetNextFrame() in my class (which is indeed derived from FramedSource): void CAvSource::doGetNextFrame() { // Forward all frames in the input AV buffer while (getTopMetadata() != NULL) { deliverFrame(); } }
void CAvSource::deliverFrame() { av_data_t frame; int32_t ret = av_get_variable_frame(mAvBuffer, &frame, POLL_NOWAIT); if (ret <= 0) { log_error("Failed to get frame even if AV buffer told us some are " "available for av_buffer %p", mAvBuffer); return; } unsigned size = frame.num_bytes; if (size > fMaxSize) { fFrameSize = fMaxSize; fNumTruncatedBytes = size - fMaxSize; } else { fFrameSize = size; fNumTruncatedBytes = 0; } memmove(fTo, frame.virt_addr, fFrameSize); av_metadata_t* meta = frame.metadata; fPresentationTime.tv_sec = meta->time_usec_then / 1000000LL; fPresentationTime.tv_usec = meta->time_usec_then % 1000000LL; fDurationInMicroseconds = meta->time_usec_now - meta->time_usec_then; // We don't need the AV frame any more, so we can release it now. av_finished_with_variable_frame(mAvBuffer, 1); // Inform the reader that a new frame is available. FramedSource::afterGetting(this); } Could it be that calling deliverFrame() multiple times might be wrong? Thanks a lot for your help! Fabrice ________________________________ From: live-devel [live-devel-boun...@ns.live555.com] on behalf of Ross Finlayson [finlay...@live555.com] Sent: 04 September 2014 17:21 To: LIVE555 Streaming Media - development & use Subject: Re: [Live-devel] Please help: I have difficulties implementing the right classes I am trying to build an RTSP server using liveMedia to stream H.264 in real time from a live encoder. In essence, as soon as I try to connect with VLC, liveMedia abort()s with the following message: FramedSource[0xbe838]::getNextFrame(): attempting to read more than once at the same time! This error means that a "FramedSource" object (presumably of your subclass that you wrote to deliver live H.264 data from your encoder) is getting a call to "getNextFrame()" while it is already handling a previous call to "getNextFrame()". I.e., it seems that your "FramedSource" subclass's implementation of "doGetNextFrame()" is incorrect; it apparently is not calling FramedSource::afterGetting(this); after it completes delivery to the downstream (i.e., calling) object. (Also, you should use "testRTSPClient" and/or "openRTSP" as RTSP clients for testing, before using VLC. VLC is more complex, and is not our software.) Ross Finlayson Live Networks, Inc. http://www.live555.com/
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel