Hello! I use live555 2013.10.25 on my FreeScale iMX53 board. My encoded programm put data to shared memory, access to data control semaphore. For get data from shared memory I write class based on FramedSource and doGetNextFrame function.
Program is a very simple: in_addr ipv4 = {0}; ipv4.s_addr = our_inet_addr(destination); Groupsock gp(*env, ipv4, Port(port), ttl); gp.multicastSendOnly(); OutPacketBuffer::maxSize = 1280 * 720 * 3 / 2; RTPSink* h264 = H264VideoRTPSink::createNew(*env, &gp, 96); Frame *frame = new Frame(semaphore, sh_mem, *env); // my class H264VideoStreamFramer* video_src = H264VideoStreamFramer::createNew(*env, frame); h264->startPlaying(*video_src, NULL, NULL); env->taskScheduler().doEventLoop(&is_stop); shared memory: _data semaphore: _sem void Frame::doGetNextFrame() { if (NULL == _data || NULL == _sem) { handleClosure(this); return; } fFrameSize = 0; fNumTruncatedBytes = 0; if (_last_frame != _data->frame && !sem_wait(_sem)) { fFrameSize = _data->size; if (fFrameSize > fMaxSize) { fNumTruncatedBytes = fFrameSize - fMaxSize; daemon_info("frame %u, truncated %u bytes, max %u, size %u", _data->frame,fNumTruncatedBytes, fMaxSize, fFrameSize); fFrameSize = fMaxSize; } gettimeofday(&fPresentationTime, NULL); daemon_debug("%s: start copy frame %u %lu.%lu", __PRETTY_FUNCTION__,_data->frame,fPresentationTime.tv_sec, fPresentationTime.tv_usec); memcpy(fTo, _data->data, fFrameSize); gettimeofday(&fPresentationTime, NULL); daemon_debug("%s: stop copy frame %u (%u bytes) %lu.%lu", __PRETTY_FUNCTION__, _data->frame, fFrameSize,fPresentationTime.tv_sec, fPresentationTime.tv_usec); _last_frame = _data->frame; sem_post(_sem); gettimeofday(&fPresentationTime, NULL); } nextTask() = envir().taskScheduler().scheduleDelayedTask( 40000, (TaskFunc*)FramedSource::afterGetting, this); } It work, but every 2 frame I see that frame truncated: streamerd: virtual void Frame::doGetNextFrame(): start copy frame 79 12670.159867 streamerd: virtual void Frame::doGetNextFrame(): stop copy frame 79 (126794 bytes) 12670.163626 streamerd: frame 80, truncated 113146 bytes, max 23204, size 136350 streamerd: virtual void Frame::doGetNextFrame(): start copy frame 80 12670.306181 streamerd: virtual void Frame::doGetNextFrame(): stop copy frame 80 (23204 bytes) 12670.307837 streamerd: virtual void Frame::doGetNextFrame(): start copy frame 81 12670.369945 streamerd: virtual void Frame::doGetNextFrame(): stop copy frame 81 (110216 bytes) 12670.379823 streamerd: frame 82, truncated 79271 bytes, max 39782, size 119053 streamerd: virtual void Frame::doGetNextFrame(): start copy frame 82 12670.434736 streamerd: virtual void Frame::doGetNextFrame(): stop copy frame 82 (39782 bytes) 12670.436576 Why and how can I solve this problem? Thank you and excuse me for my bad english. -- Best regards, Brilliantov Kirill Vladimirovich _______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel