From rafaellorenzo at sepsa.es Fri Apr 1 03:50:29 2011 From: rafaellorenzo at sepsa.es (Rafael Lorenzo Alonso) Date: Fri, 1 Apr 2011 12:50:29 +0200 Subject: [Live-devel] H264VideoFileServerMediaSubsession and doEventLoop Message-ID: <4D95ADF5.10307@sepsa.es> Hi, First of all, congratulations for such a great library. We're working on a RTSPServer of H264 video from several RTP flows using your library. We're facing some problems most of them we have found solutions for but we have one we think is specially difficult for us to resolve without some help. In particular, the problem concerns the function getAuxSDPLine. In the following line: envir().taskScheduler().doEventLoop(&fDoneFlag); char const* H264VideoFileServerMediaSubsession::getAuxSDPLine(RTPSink* rtpSink, FramedSource* inputSource) { // Note: For H264 video files, the 'config' information ("profile-level-id" and "sprop-parameter-sets") isn't known // until we start reading the file. This means that "rtpSink"s "auxSDPLine()" will be NULL initially, // and we need to start reading data from our file until this changes. fDummyRTPSink = rtpSink; // Start reading the file: fDummyRTPSink->startPlaying(*inputSource, afterPlayingDummy, this); // Check whether the sink's 'auxSDPLine()' is ready: checkForAuxSDPLine(this); envir().taskScheduler().doEventLoop(&fDoneFlag); char const* auxSDPLine = fDummyRTPSink->auxSDPLine(); return auxSDPLine; } This stops there until the H264VideoStreamFramer gets from the video the SPS and PPS (NALs 7 and 8). We have made a version of the H264VideoFileServerMediaSubsession that takes the H264 video from an H264VideoRTPSource instead taking it from a file. The RTP video flow we use comes from network cameras that unfortunately don't send such NAL's (first problem). We have bypass that error inheriting H264VideoStreamDiscreteFramer allowing to set manually SPS and PPS in the constructor. Anyway, our main problem is that if the client subsession ends (TEARDOWN or TIMEOUT) the object is deleted while waiting in that line checking for a variable of the deleted object. In the library as it is the problem is dificult to induce as this function will return very quick, as soon as the file is read from the disk. Maybe if the file doesn't contain any NAL unit 7 and 8 and is big enough to allow the client TEARDOWN/TIMEOUT the session in time, could end up occurring but it is not very likely. In our case the problem is much more probable as the RTP video could be o not in the network, forcing the H264VideoRTPSouce to wait forever, ending up in a stack overflow after having many sessions blocked in doEventLoops. Do you think there is any possibility of doing this another way? I think this is a problem derived of not using threads and that could be happening across the library in some other points. Maybe this can be solved by making the doEventLoop function being able to return an error if the object it trusts is been destroyed (making a call in the destructor of that object to unblock the possible doEventLoop call). Do you think this could be a solution somehow? Sorry for my English, it's been a while since I don't use it... Best regards, Rafael Lorenzo. Infrastructure Software Engineer. SEPSA SCI, Albatros Corporation. From msdark at archlinux.cl Fri Apr 1 11:03:47 2011 From: msdark at archlinux.cl (Matias Hernandez Arellano) Date: Fri, 1 Apr 2011 14:03:47 -0400 Subject: [Live-devel] Stream my own manipulated image array (push data to stream) Message-ID: <80F42BE9-E048-41C2-A0F0-AA0D91A128E1@archlinux.cl> (sorry for my poor english).. I hope i'm writing to right list.. I have an application to do some image processing created with OpenCV (to capture frames from a camera and manipulate the images) .. now i need to add a streaming capability (the idea is see the result of the processing part in other machine, maybe through HTML5) .. So i made a little research about this, and found i can use different protocols to do that and i think to use this library to take care of that.. Then i try to found a good tool/lib to accomplish my task. .. i try with gstreamer, they have an API called AppSrc to push data into a buffer (in this case the frames getting with OpenCV) and stream that, but i have some troubles to join their Glib Loop with the application, so i think in libvlc and finally found live555 , but i can't find any example of how can i do the stream part with frames externally created ... .. So. It's possible to use live555 to stream this content?? Any guideline, idea or example about this? PD: I get the frames and i can convert to any format (one-by-one but is really quick) .. so i just need to push into "the stream" to send over networks and can see in other device "live streaming" .. Thanks in advance. Mat?as Hernandez Arellano Ingeniero de Software/Proyectos en VisionLabs S.A CDA Archlinux-CL www.msdark.archlinux.cl From rafaellorenzo at sepsa.es Tue Apr 5 03:46:49 2011 From: rafaellorenzo at sepsa.es (Rafael Lorenzo Alonso) Date: Tue, 5 Apr 2011 12:46:49 +0200 Subject: [Live-devel] There is a leak in BasicTaskScheduler Message-ID: <4D9AF319.8090407@sepsa.es> Hi, You should call unscheduleDelayedTask in the destructor of BasicTaskScheduler... (BasicTaskScheduler.cpp) Greetings, Rafael Lorenzo, Infrastructure Software Engineer. SEPSA SCI, Albatros Corporation. From belloni at imavis.com Wed Apr 6 03:04:18 2011 From: belloni at imavis.com (Cristiano Belloni) Date: Wed, 06 Apr 2011 12:04:18 +0200 Subject: [Live-devel] Synchro problem and isCurrentlyAwaitingData() Message-ID: <4D9C3AA2.40404@imavis.com> Hi to all, I wrote a custom shared memory source. it inherits from FramedSource. The shared memory is synchronized via Linux semaphores (simple producer-consumer algorithm), but since I didn't want to subclass TaskScheduler, I still use a "dummy" file descriptor-based communication with live555. In pseudocode: ~~~Client (without live555): wait on semaphore_empty (blocking) copy frame in shared memory write one byte in a dedicated FIFO (this should wake up live555' TaskScheduler select()) post on semaphore_fill ~~~Server (with live555, in SharedMemSource::incomingPacketHandler1()) [turnOnBackgroundReadHandling is called in doGetNextFrame] wait on semaphore_fill (blocking) read one byte from the dedicated FIFO (to flush the FIFO buffer) copy frame from shared memory post on semaphore_empty This works. Altought the blocking wait on semaphore_fill might make you wonder, the client wakes up my source with the write() in the dedicated FIFO and immediately posts on semaphore_fill, so the server almost never waits, and if it does, it doesn't block for a really small time. The problem is that, after a while (1 or 2 hours usually), the client does its cycle and the server never wakes up. It *doesn't* get stuck on the wait, I checked: it simply never wakes up, as if the client write() was lost (but it *always* succeed on the client side) or the select() didn't wake up even if the write succeeded. I would like to emphasize this: the server *never* gets stuck forever on its wait. When it gets stuck, the client is one frame ahead of the server, incomingPacketHandler1() simply is never called anymore and the wait is not even reached. At this point, I have two questions: 1) In your knowledge, can the select() not wake up even if a write() on the other side succeeded? If it can, how is it possible? Note that the system is an embedded ARM processor, and it could get quite busy while acquiring and streaming video. 2) First thing I do in SharedMemSource::incomingPacketHandler1() is to check for isCurrentlyAwaitingData(). If it's false, I simply return before doing all the cycle, and this happens quite often. What's the meaning of isCurrentlyAwaitingData()? I mean, if the select() in TaskScheduler returned, some data must be present on the file/fifo/socket. How is it possible that the select() did return but still there's no data available? I'm getting really confused on this. Thanks and regards, Cristiano Belloni. -- Belloni Cristiano Imavis Srl. www.imavis.com belloni at imavis.com -------------- next part -------------- An HTML attachment was scrubbed... URL: From belloni at imavis.com Wed Apr 6 09:49:00 2011 From: belloni at imavis.com (Cristiano Belloni) Date: Wed, 06 Apr 2011 18:49:00 +0200 Subject: [Live-devel] Synchro problem and isCurrentlyAwaitingData() In-Reply-To: <4D9C3AA2.40404@imavis.com> References: <4D9C3AA2.40404@imavis.com> Message-ID: <4D9C997C.4060802@imavis.com> Il 06/04/2011 12:04, Cristiano Belloni ha scritto: > Hi to all, > I wrote a custom shared memory source. it inherits from FramedSource. > The shared memory is synchronized via Linux semaphores (simple > producer-consumer algorithm), but since I didn't want to subclass > TaskScheduler, I still use a "dummy" file descriptor-based > communication with live555. In pseudocode: > > > ~~~Client (without live555): > > wait on semaphore_empty (blocking) > copy frame in shared memory > write one byte in a dedicated FIFO (this should wake up live555' > TaskScheduler select()) > post on semaphore_fill > > ~~~Server (with live555, in SharedMemSource::incomingPacketHandler1()) > [turnOnBackgroundReadHandling is called in doGetNextFrame] > > wait on semaphore_fill (blocking) > read one byte from the dedicated FIFO (to flush the FIFO buffer) > copy frame from shared memory > post on semaphore_empty > > This works. Altought the blocking wait on semaphore_fill might make > you wonder, the client wakes up my source with the write() in the > dedicated FIFO and immediately posts on semaphore_fill, so the server > almost never waits, and if it does, it doesn't block for a really > small time. > > The problem is that, after a while (1 or 2 hours usually), the client > does its cycle and the server never wakes up. It *doesn't* get stuck > on the wait, I checked: it simply never wakes up, as if the client > write() was lost (but it *always* succeed on the client side) or the > select() didn't wake up even if the write succeeded. > > I would like to emphasize this: the server *never* gets stuck forever > on its wait. When it gets stuck, the client is one frame ahead of the > server, incomingPacketHandler1() simply is never called anymore and > the wait is not even reached. > > At this point, I have two questions: > > 1) In your knowledge, can the select() not wake up even if a write() > on the other side succeeded? If it can, how is it possible? Note that > the system is an embedded ARM processor, and it could get quite busy > while acquiring and streaming video. > > 2) First thing I do in SharedMemSource::incomingPacketHandler1() is to > check for isCurrentlyAwaitingData(). If it's false, I simply return > before doing all the cycle, and this happens quite often. What's the > meaning of isCurrentlyAwaitingData()? I mean, if the select() in > TaskScheduler returned, some data must be present on the > file/fifo/socket. How is it possible that the select() did return but > still there's no data available? I'm getting really confused on this. > > Thanks and regards, > Cristiano Belloni. > > > -- > Belloni Cristiano > Imavis Srl. > www.imavis.com > belloni at imavis.com > > > _______________________________________________ > live-devel mailing list > live-devel at lists.live555.com > http://lists.live555.com/mailman/listinfo/live-devel Update: I put some logs in BasicTaskScheduler to see what happens. one before the select(): printf ("[SYNCHROBUG] About to do the select, timeout %d.%d\n", tv_timeToDelay.tv_sec, tv_timeToDelay.tv_usec); int selectResult = select(fMaxNumSockets, &readSet, &writeSet, &exceptionSet, &tv_timeToDelay); if (selectResult < 0) { [...] two after the select(), (one catches an EINTR or EAGAIN error value should they happen): #else if (errno != EINTR && errno != EAGAIN) { #endif // Unexpected error - treat this as fatal: #if !defined(_WIN32_WCE) perror("BasicTaskScheduler::SingleStep(): select() fails"); #endif internalError(); } } if (errno == EINTR || errno == EAGAIN) { perror ("[SYNCHROBUG] error is"); } printf ("[SYNCHROBUG] Select done, getting sockets\n"); [...] two after the first and second pass of readable socket check: int resultConditionSet = 0; if (FD_ISSET(sock, &readSet) && FD_ISSET(sock, &fReadSet)/*sanity check*/) { printf ("[SYNCHROBUG] Socket %d found readable on first pass\n", sock); resultConditionSet |= SOCKET_READABLE; } [...] if (FD_ISSET(sock, &readSet) && FD_ISSET(sock, &fReadSet)/*sanity check*/) { printf ("[SYNCHROBUG] Socket %d found readable on second pass\n", sock); resultConditionSet |= SOCKET_READABLE; } And one to check if we found some readable/writable/excepting socket at all: if (handler == NULL) { fLastHandledSocketNum = -1;//because we didn't call a handler printf ("[SYNCHROBUG] No socket found at all\n"); } at first everything is ok: [SYNCHROBUG] About to do the select, timeout 0.0 [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] No socket found at all [SYNCHROBUG] About to do the select, timeout 0.0 [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] About to do the select, timeout 0.0 [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 5 found readable on first pass [SYNCHROBUG] About to do the select, timeout 0.0 [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 5 found readable on second pass [SYNCHROBUG] About to do the select, timeout 0.0 [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 5 found readable on second pass [SYNCHROBUG] About to do the select, timeout 0.0 [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 5 found readable on second pass [SYNCHROBUG] About to do the select, timeout 0.0 [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 5 found readable on second pass [SYNCHROBUG] About to do the select, timeout 0.0 [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 5 found readable on second pass (socket 5 must be the FIFO, I guess) But then, select keeps randomly return errno=11, aka EAGAIN or "Resource temporarily unavailable": [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 5 found readable on second pass [SYNCHROBUG] About to do the select, timeout 1.480311 [SYNCHROBUG] error is: Resource temporarily unavailable [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 6 found readable on first pass [SYNCHROBUG] About to do the select, timeout 1.479309 [SYNCHROBUG] error is: Resource temporarily unavailable [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 5 found readable on second pass [SYNCHROBUG] About to do the select, timeout 1.478362 [SYNCHROBUG] error is: Resource temporarily unavailable [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 6 found readable on first pass [SYNCHROBUG] About to do the select, timeout 1.477358 [SYNCHROBUG] error is: Resource temporarily unavailable [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 5 found readable on second pass [SYNCHROBUG] About to do the select, timeout 1.476431 [SYNCHROBUG] error is: Resource temporarily unavailable [SYNCHROBUG] Select done, getting sockets [SYNCHROBUG] Socket 6 found readable on first pass Now, I don't even know the reason why a select() could return EAGAIN (a lot of people say it souldn't at all, and even my "man 3 select" agrees: http://stackoverflow.com/questions/4193043/select-on-a-pipe-in-blocking-mode-returns-eagain ), but I see this case is handled in your code and ignored, just like the EINTR case: if (errno != EINTR && errno != EAGAIN) { #endif // Unexpected error - treat this as fatal: #if !defined(_WIN32_WCE) perror("BasicTaskScheduler::SingleStep(): select() fails"); #endif internalError(); } [if errno is EINTR or EAGAIN, then the scheduler goes on inspecting the select()'s returned sets]. Could that be the origin of my problems? As obviously you can't try my executables on my hardware, please tell me what else could I log. BTW the rtsp/rtp client in this picture is openRTSP. Here's an ascii schema :) client program generating frames ----FIFO---> rtsp server based on live555 ----RTSP/RTP/TCP----> openRTSP Thank you and best regards, Cristiano Belloni. -- Belloni Cristiano Imavis Srl. www.imavis.com belloni at imavis.com -------------- next part -------------- An HTML attachment was scrubbed... URL: From sumeet.kumar at hcl.com Thu Apr 7 03:59:11 2011 From: sumeet.kumar at hcl.com (Sumeet Kumar - ERS, HCL Tech) Date: Thu, 7 Apr 2011 16:29:11 +0530 Subject: [Live-devel] locally viewing the stream generated by testMPEG1or2AudioVideoStreamer in unicast mode Message-ID: <7F32C6A46402CD49BA87BC5874370F1A2A0C90C098@NDA-HCLT-EVS05.HCLT.CORP.HCL.IN> Hi Ross, I have been successfully able to run testMPEG1or2AudioVideoStreamer in unicast mode, by making suggested changes as per the FAQ. Thanks a lot for those suggestions. But I am not able to play the streaming locally on my localhost (I have tried giving the destinationAddressStr as "127.0.0.1" or the local ip address as output from the ipconfig command). I am using VLC Player to view the streaming video. If you could please provide me some pointers/suggestions for the reason of this failure. Regards, Sumeet ________________________________ ::DISCLAIMER:: ----------------------------------------------------------------------------------------------------------------------- The contents of this e-mail and any attachment(s) are confidential and intended for the named recipient(s) only. It shall not attach any liability on the originator or HCL or its affiliates. Any views or opinions presented in this email are solely those of the author and may not necessarily reflect the opinions of HCL or its affiliates. Any form of reproduction, dissemination, copying, disclosure, modification, distribution and / or publication of this message without the prior written consent of the author of this e-mail is strictly prohibited. If you have received this email in error please delete it and notify the sender immediately. Before opening any mail and attachments please check them for viruses and defect. ----------------------------------------------------------------------------------------------------------------------- -------------- next part -------------- An HTML attachment was scrubbed... URL: From Ritun.Palit at hcl.com Thu Apr 7 04:23:34 2011 From: Ritun.Palit at hcl.com (Ritun Palit) Date: Thu, 7 Apr 2011 16:53:34 +0530 Subject: [Live-devel] problem in playing testH264VideoStreamer with vlc Message-ID: <5F9A1BA455104A428B008F9E96382E1D38944CF8DF@NDA-HCLT-EVS04.HCLT.CORP.HCL.IN> Hi Ross, I'm executing the testH264VideoStreamer.exe with sample test.264 (downloaded from live555) and facing a weird problem. When I try to play the "rtsp:// url" from VLC 1.1.8 (latest version of vlc) player, it starts flickering after finishing of 1st time play call. I had tried the "url" with openrtsp, it is generating video-H264-1 file and size of the file is not zero. If you could please provide me your valuable suggestion to point out the problem . Thanks & Regards, Ritun ________________________________ ::DISCLAIMER:: ----------------------------------------------------------------------------------------------------------------------- The contents of this e-mail and any attachment(s) are confidential and intended for the named recipient(s) only. It shall not attach any liability on the originator or HCL or its affiliates. Any views or opinions presented in this email are solely those of the author and may not necessarily reflect the opinions of HCL or its affiliates. Any form of reproduction, dissemination, copying, disclosure, modification, distribution and / or publication of this message without the prior written consent of the author of this e-mail is strictly prohibited. If you have received this email in error please delete it and notify the sender immediately. Before opening any mail and attachments please check them for viruses and defect. ----------------------------------------------------------------------------------------------------------------------- -------------- next part -------------- An HTML attachment was scrubbed... URL: From manuel.carrizo at intraway.com Thu Apr 7 14:49:09 2011 From: manuel.carrizo at intraway.com (Manuel) Date: Thu, 7 Apr 2011 18:49:09 -0300 Subject: [Live-devel] Publish two streams (one without audio) from a camera Message-ID: Hi, I'm trying to get the audio and video stream from a camera using RTSPClient and then publish a stream with audio and video and another stream with video only. This is what I have: I create a RTSPServer I create two ServerMediaSession, sms_with_audio and sms_without_audio RTSPClient connects to camera I get the SDP I build a MediaSession from the sdp I iterate the subsessions, calling ServerMediaSession::addSubsession() for the video subsession on sms_with_audio and sms_without_audio and for the audio subsession on sms_with_audio Then I add the SMSs to the RTSPServer Call RTSPClient::playMediaSession and finally start the event loop My problem is that if I try to play the stream without audio, it freezes after a few seconds. What could I be missing? Thanks in advance, Manuel -------------- next part -------------- An HTML attachment was scrubbed... URL: From sumeet.kumar at hcl.com Thu Apr 7 21:15:06 2011 From: sumeet.kumar at hcl.com (Sumeet Kumar - ERS, HCL Tech) Date: Fri, 8 Apr 2011 09:45:06 +0530 Subject: [Live-devel] Streaming testMPEG1or2AudioVideoStreamer behind network firewall Message-ID: <7F32C6A46402CD49BA87BC5874370F1A2A0C90C362@NDA-HCLT-EVS05.HCLT.CORP.HCL.IN> Hi Ross, We have setup a Windows server (with a publically accessible IP address) outside our LAN. When I setup and run "live555MediaServer.exe" on this server, and try to access (using VLC Player) the generated RTSP URL from my local machine (which resides behind a network firewall), I am able to see the stream. However when I try to do the same, using "testMPEG1or2AudioVideoStreamer.exe", I am unable to view the stream from my local machine (which resides behind a network firewall). I have even tried to run testMPEG1or2AudioVideoStreamer.exe in unicast mode (as suggested by the FAQ), still no success. Any suggestions/guidance for the reason for this difference in behavior will be very helpful. Regards, Sumeet ________________________________ ::DISCLAIMER:: ----------------------------------------------------------------------------------------------------------------------- The contents of this e-mail and any attachment(s) are confidential and intended for the named recipient(s) only. It shall not attach any liability on the originator or HCL or its affiliates. Any views or opinions presented in this email are solely those of the author and may not necessarily reflect the opinions of HCL or its affiliates. Any form of reproduction, dissemination, copying, disclosure, modification, distribution and / or publication of this message without the prior written consent of the author of this e-mail is strictly prohibited. If you have received this email in error please delete it and notify the sender immediately. Before opening any mail and attachments please check them for viruses and defect. ----------------------------------------------------------------------------------------------------------------------- -------------- next part -------------- An HTML attachment was scrubbed... URL: From finlayson at live555.com Sun Apr 10 02:22:44 2011 From: finlayson at live555.com (finlayson at live555.com) Date: Sun, 10 Apr 2011 10:22:44 +0100 Subject: [Live-devel] My Photoset Nr.4095 Message-ID: <0504876873.K2U0DCSZ444499@eqctp.jogygkr.com> Hi There. I am a very fun gal who loves to take pictures as well as recieve them... You can find me in the middle of this page: I am giving out my personal info here: http://dategirlssexy.ru Name: Amely S., Boston I am a: Woman Age: 25 y/o Height: 5-6 Weight: 116 Lbs Hair: Brown currently www.dategirlssexy.ru From abbasj at discover.uottawa.ca Sun Apr 10 23:55:10 2011 From: abbasj at discover.uottawa.ca (Abbas Javadtalab) Date: Mon, 11 Apr 2011 02:55:10 -0400 Subject: [Live-devel] How To codify the testH264videoStreamer Program in order to transmit NAL units? Message-ID: <4DA2A5CE.6020003@discover.uottawa.ca> Hello, I am trying to modify the "testH264VideoStreamer" program in order to get NAL unit instead of using file. I have developed an user interface to work with x264 library. the UI is able to encode each frame and generate NAL nits using x264 library. Now, I want to integrate this UI with "testH264VideoStreamer" program. I have some question: 1-How can I pass the NAL unit to this program directly? 2-Is there any function that get the NAL units directly? 3- Is there any live chat similar to x264 developer group to ask questions online? Any help is appropriated. Thanks in advance. Abbas From steve at stevemcfarlin.com Mon Apr 11 11:41:38 2011 From: steve at stevemcfarlin.com (Steve McFarlin) Date: Mon, 11 Apr 2011 11:41:38 -0700 Subject: [Live-devel] H264VideoStreamDiscreteFramer Message-ID: Hello, I have an encoder that delivers discrete H264 frames with a NAL start code. When I copy to the fTo parameter is exclude the NAL start code and set the frame size to the appropriate value. My issue is the resulting stream is recognized as garbage when streamed to VLC and Quicktime renders a green blocky screen and the height is wrong. I did try the H264VideoStreamFamer as a test by feeding it the output of the encoder as a stream. This worked to a degree. The encoder sends NAL unit types 7 and 8 first and then 1 ... 1, 5, 1 .... 1, 5. The encoder does not appear to set the frame rate in the SPS. Does anyone have any suggestions on where to look for the issue. Maybe Thanks, Steve From steve at stevemcfarlin.com Mon Apr 11 15:59:39 2011 From: steve at stevemcfarlin.com (Steve McFarlin) Date: Mon, 11 Apr 2011 15:59:39 -0700 Subject: [Live-devel] SSRC Changing mid stream Message-ID: <6ECEF82A-E445-4918-A939-335E56A2FD25@stevemcfarlin.com> Hello, I have an issue with the unsupported Darwin injector pushing a H264VidoRtpSink. It appears the SSRC is changing mid stream as reported by my server. I took a look at RTPSink and see this is randomly generated in the constructor. Is there any reason this might change? Thanks, Steve From satram at juniper.net Mon Apr 11 18:53:21 2011 From: satram at juniper.net (satheesh Ramalingam) Date: Tue, 12 Apr 2011 07:23:21 +0530 Subject: [Live-devel] H264VideoStreamDiscreteFramer In-Reply-To: References: Message-ID: Hi Steve, Can you use openRTSP program to receive the stream and check whether it matches your input frames? This will tell u the difference in nalu header parsing. >> This worked to a degree. The encoder sends NAL unit types 7 and 8 first and then 1 ... 1, 5, 1 .... 1, 5. You can consider dropping first set of p -frames (nalu type 1) before getting first IDR (nal type 5). -----Original Message----- From: live-devel-bounces at ns.live555.com [mailto:live-devel-bounces at ns.live555.com] On Behalf Of Steve McFarlin Sent: Tuesday, April 12, 2011 12:12 AM To: live-devel at ns.live555.com Subject: [Live-devel] H264VideoStreamDiscreteFramer Hello, I have an encoder that delivers discrete H264 frames with a NAL start code. When I copy to the fTo parameter is exclude the NAL start code and set the frame size to the appropriate value. My issue is the resulting stream is recognized as garbage when streamed to VLC and Quicktime renders a green blocky screen and the height is wrong. I did try the H264VideoStreamFamer as a test by feeding it the output of the encoder as a stream. This worked to a degree. The encoder sends NAL unit types 7 and 8 first and then 1 ... 1, 5, 1 .... 1, 5. The encoder does not appear to set the frame rate in the SPS. Does anyone have any suggestions on where to look for the issue. Maybe Thanks, Steve _______________________________________________ live-devel mailing list live-devel at lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel From max.goettner at dstream.de Tue Apr 12 03:14:37 2011 From: max.goettner at dstream.de (=?iso-8859-1?Q?Max_G=F6ttner_-_d.stream?=) Date: Tue, 12 Apr 2011 12:14:37 +0200 Subject: [Live-devel] unsubscribe Message-ID: <000001cbf8fa$6dba9d10$492fd730$@goettner@dstream.de> -------------- next part -------------- An HTML attachment was scrubbed... URL: From Ritun.Palit at hcl.com Wed Apr 13 03:40:02 2011 From: Ritun.Palit at hcl.com (Ritun Palit) Date: Wed, 13 Apr 2011 16:10:02 +0530 Subject: [Live-devel] Streaming continuously growing .mpg file through live555MediaServer.exe Message-ID: <5F9A1BA455104A428B008F9E96382E1D39A65EB3F5@NDA-HCLT-EVS04.HCLT.CORP.HCL.IN> Hi, I have a .mpg file which continuously grows with respect to time. I'm trying to stream that file by "live555MediaServer.exe", when I play the rtsp url from the vlc player, it gets stuck. The same scenario works fine for .m4e files. My question is Why it does not play continuously growing .mpg file? My server and client resides on the same LAN. Regards, Sumeet ________________________________ ::DISCLAIMER:: ----------------------------------------------------------------------------------------------------------------------- The contents of this e-mail and any attachment(s) are confidential and intended for the named recipient(s) only. It shall not attach any liability on the originator or HCL or its affiliates. Any views or opinions presented in this email are solely those of the author and may not necessarily reflect the opinions of HCL or its affiliates. Any form of reproduction, dissemination, copying, disclosure, modification, distribution and / or publication of this message without the prior written consent of the author of this e-mail is strictly prohibited. If you have received this email in error please delete it and notify the sender immediately. Before opening any mail and attachments please check them for viruses and defect. ----------------------------------------------------------------------------------------------------------------------- -------------- next part -------------- An HTML attachment was scrubbed... URL: From raghu at foxitsolutions.com Thu Apr 14 23:13:38 2011 From: raghu at foxitsolutions.com (Raghu Kumar) Date: Fri, 15 Apr 2011 11:43:38 +0530 Subject: [Live-devel] Weired bug in receiving RTP data on iPhone (Need help a sort of urgent) Message-ID: Hi, I am trying to send and receiving H264 RTP data from the local network Interface (127.0.0.1) for testing. I used two different threads and created different Environments and Task Schedulers. The send is always working, I see the log messages. But the problem is at receiving side. Some times it is receiving with out any problem. but some times, it is just silent even though the sender is sending the packets. I tried to place the log messages and I see that, MultiFramedRTPSource::networkReadHandler is not called but the sockets are created and startNetworkReading is executed. I am trying this on iPhone. Thanks in Advance, Raghu -------------- next part -------------- An HTML attachment was scrubbed... URL: From boiler4.kim at lge.com Tue Apr 19 19:26:29 2011 From: boiler4.kim at lge.com (Jinho Kim) Date: Wed, 20 Apr 2011 11:26:29 +0900 Subject: [Live-devel] [live-devel] Rtsp-alt [FIN, ACK] after about one minute Message-ID: <002101cbff02$5d83b040$188b10c0$@kim@lge.com> Hi, my name is Jinho. Recently, I've been reviewing Live555 S/W package. Regarding to the issue below -- "Rtsp-alt [FIN, ACK] after about one minute testOnDemandRTSPServer" http://lists.live555.com/pipermail/live-devel/2008-November/009751.html is there anyone who has an answer? Thanks in advance ================================== Jinho B. Kim Life's good. Phone : 82-10-8244-5576 Email : boiler4.kim at lge.com -------------- next part -------------- An HTML attachment was scrubbed... URL: From msdark at archlinux.cl Wed Apr 20 19:43:25 2011 From: msdark at archlinux.cl (Matias Hernandez Arellano) Date: Wed, 20 Apr 2011 22:43:25 -0400 Subject: [Live-devel] Stream JPEG images created with OpenCV Message-ID: <4FA6FF25-8E32-415B-97A2-75EC97E655A3@archlinux.cl> (sorry for my english) Hi!!... i'm trying to solve a problem to create a stream application. I have an application that use OpenCV to capture frames from any camera connected .. this works in a thread feeding a circular buffer (using semaphores ).. then i read from this buffer to do some processing and feed another circular buffer to storages the frames (OpenCV image representation) ... So i wan't to read from this frame, encode the data into a JPEG image (this can be donde with libjpeg or using OpenCV so no problem here) .. and use this new jpeg image (not a file a memory buffer) .. and stream this.. Can this be done with live555? (first question) I read the Elphel code and i trying to understand how the library works. I need to create a VideoSource or something like that or i can use something to "Push" this jpeg images to do the streaming part? Is there any guideline, example or something where i can found information of how to do this.. Thanks in advance and.. great work!!! -- Mat?as Hernandez Arellano Ingeniero de Software/Proyectos en VisionLabs S.A CDA Archlinux-CL www.msdark.archlinux.cl From belloni at imavis.com Thu Apr 21 08:32:48 2011 From: belloni at imavis.com (Cristiano Belloni) Date: Thu, 21 Apr 2011 17:32:48 +0200 Subject: [Live-devel] Synchro problem and isCurrentlyAwaitingData() In-Reply-To: <4D9C997C.4060802@imavis.com> References: <4D9C3AA2.40404@imavis.com> <4D9C997C.4060802@imavis.com> Message-ID: <4DB04E20.1020307@imavis.com> Il 06/04/2011 18:49, Cristiano Belloni ha scritto: > Il 06/04/2011 12:04, Cristiano Belloni ha scritto: >> Hi to all, >> I wrote a custom shared memory source. it inherits from FramedSource. >> The shared memory is synchronized via Linux semaphores (simple >> producer-consumer algorithm), but since I didn't want to subclass >> TaskScheduler, I still use a "dummy" file descriptor-based >> communication with live555. In pseudocode: >> >> >> ~~~Client (without live555): >> >> wait on semaphore_empty (blocking) >> copy frame in shared memory >> write one byte in a dedicated FIFO (this should wake up live555' >> TaskScheduler select()) >> post on semaphore_fill >> >> ~~~Server (with live555, in SharedMemSource::incomingPacketHandler1()) >> [turnOnBackgroundReadHandling is called in doGetNextFrame] >> >> wait on semaphore_fill (blocking) >> read one byte from the dedicated FIFO (to flush the FIFO buffer) >> copy frame from shared memory >> post on semaphore_empty >> >> This works. Altought the blocking wait on semaphore_fill might make >> you wonder, the client wakes up my source with the write() in the >> dedicated FIFO and immediately posts on semaphore_fill, so the server >> almost never waits, and if it does, it doesn't block for a really >> small time. >> >> The problem is that, after a while (1 or 2 hours usually), the client >> does its cycle and the server never wakes up. It *doesn't* get stuck >> on the wait, I checked: it simply never wakes up, as if the client >> write() was lost (but it *always* succeed on the client side) or the >> select() didn't wake up even if the write succeeded. >> >> I would like to emphasize this: the server *never* gets stuck forever >> on its wait. When it gets stuck, the client is one frame ahead of the >> server, incomingPacketHandler1() simply is never called anymore and >> the wait is not even reached. >> >> At this point, I have two questions: >> >> 1) In your knowledge, can the select() not wake up even if a write() >> on the other side succeeded? If it can, how is it possible? Note that >> the system is an embedded ARM processor, and it could get quite busy >> while acquiring and streaming video. >> >> 2) First thing I do in SharedMemSource::incomingPacketHandler1() is >> to check for isCurrentlyAwaitingData(). If it's false, I simply >> return before doing all the cycle, and this happens quite often. >> What's the meaning of isCurrentlyAwaitingData()? I mean, if the >> select() in TaskScheduler returned, some data must be present on the >> file/fifo/socket. How is it possible that the select() did return but >> still there's no data available? I'm getting really confused on this. >> >> Thanks and regards, >> Cristiano Belloni. >> >> >> -- >> Belloni Cristiano >> Imavis Srl. >> www.imavis.com >> belloni at imavis.com >> >> >> _______________________________________________ >> live-devel mailing list >> live-devel at lists.live555.com >> http://lists.live555.com/mailman/listinfo/live-devel > > Update: I put some logs in BasicTaskScheduler to see what happens. > > one before the select(): > > printf ("[SYNCHROBUG] About to do the select, timeout %d.%d\n", > tv_timeToDelay.tv_sec, tv_timeToDelay.tv_usec); > int selectResult = select(fMaxNumSockets, &readSet, &writeSet, > &exceptionSet, &tv_timeToDelay); > if (selectResult < 0) { > [...] > > two after the select(), (one catches an EINTR or EAGAIN error value > should they happen): > > #else > if (errno != EINTR && errno != EAGAIN) { > #endif > // Unexpected error - treat this as fatal: > #if !defined(_WIN32_WCE) > perror("BasicTaskScheduler::SingleStep(): select() fails"); > #endif > internalError(); > } > } > if (errno == EINTR || errno == EAGAIN) { > perror ("[SYNCHROBUG] error is"); > } > > printf ("[SYNCHROBUG] Select done, getting sockets\n"); > [...] > > two after the first and second pass of readable socket check: > > int resultConditionSet = 0; > if (FD_ISSET(sock, &readSet) && FD_ISSET(sock, &fReadSet)/*sanity > check*/) { > printf ("[SYNCHROBUG] Socket %d found readable on first > pass\n", sock); > resultConditionSet |= SOCKET_READABLE; > } > > [...] > > if (FD_ISSET(sock, &readSet) && FD_ISSET(sock, > &fReadSet)/*sanity check*/) { > printf ("[SYNCHROBUG] Socket %d found readable on second > pass\n", sock); > resultConditionSet |= SOCKET_READABLE; > } > > And one to check if we found some readable/writable/excepting socket > at all: > > > if (handler == NULL) { > fLastHandledSocketNum = -1;//because we didn't call a handler > printf ("[SYNCHROBUG] No socket found at all\n"); > } > > > at first everything is ok: > > [SYNCHROBUG] About to do the select, timeout 0.0 > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] No socket found at all > [SYNCHROBUG] About to do the select, timeout 0.0 > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] About to do the select, timeout 0.0 > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 5 found readable on first pass > [SYNCHROBUG] About to do the select, timeout 0.0 > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 5 found readable on second pass > [SYNCHROBUG] About to do the select, timeout 0.0 > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 5 found readable on second pass > [SYNCHROBUG] About to do the select, timeout 0.0 > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 5 found readable on second pass > [SYNCHROBUG] About to do the select, timeout 0.0 > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 5 found readable on second pass > [SYNCHROBUG] About to do the select, timeout 0.0 > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 5 found readable on second pass > > (socket 5 must be the FIFO, I guess) > > > But then, select keeps randomly return errno=11, aka EAGAIN or > "Resource temporarily unavailable": > > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 5 found readable on second pass > [SYNCHROBUG] About to do the select, timeout 1.480311 > [SYNCHROBUG] error is: Resource temporarily unavailable > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 6 found readable on first pass > [SYNCHROBUG] About to do the select, timeout 1.479309 > [SYNCHROBUG] error is: Resource temporarily unavailable > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 5 found readable on second pass > [SYNCHROBUG] About to do the select, timeout 1.478362 > [SYNCHROBUG] error is: Resource temporarily unavailable > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 6 found readable on first pass > [SYNCHROBUG] About to do the select, timeout 1.477358 > [SYNCHROBUG] error is: Resource temporarily unavailable > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 5 found readable on second pass > [SYNCHROBUG] About to do the select, timeout 1.476431 > [SYNCHROBUG] error is: Resource temporarily unavailable > [SYNCHROBUG] Select done, getting sockets > [SYNCHROBUG] Socket 6 found readable on first pass > > Now, I don't even know the reason why a select() could return EAGAIN > (a lot of people say it souldn't at all, and even my "man 3 select" > agrees: > http://stackoverflow.com/questions/4193043/select-on-a-pipe-in-blocking-mode-returns-eagain > ), but I see this case is handled in your code and ignored, just like > the EINTR case: > > if (errno != EINTR && errno != EAGAIN) { > #endif > // Unexpected error - treat this as fatal: > #if !defined(_WIN32_WCE) > perror("BasicTaskScheduler::SingleStep(): select() fails"); > #endif > internalError(); > } > > [if errno is EINTR or EAGAIN, then the scheduler goes on inspecting > the select()'s returned sets]. > > Could that be the origin of my problems? > > As obviously you can't try my executables on my hardware, please tell > me what else could I log. BTW the rtsp/rtp client in this picture is > openRTSP. Here's an ascii schema :) > > client program generating frames ----FIFO---> rtsp server based on > live555 ----RTSP/RTP/TCP----> openRTSP > > Thank you and best regards, > > Cristiano Belloni. > > > -- > Belloni Cristiano > Imavis Srl. > www.imavis.com > belloni at imavis.com > > > _______________________________________________ > live-devel mailing list > live-devel at lists.live555.com > http://lists.live555.com/mailman/listinfo/live-devel Ok, it was a problem related to the timestamp calculations, which you fixed in the last version. Disregard this. Cristiano. -- Belloni Cristiano Imavis Srl. www.imavis.com belloni at imavis.com -------------- next part -------------- An HTML attachment was scrubbed... URL: From finlayson at live555.com Mon Apr 25 21:22:49 2011 From: finlayson at live555.com (Ross Finlayson) Date: Mon, 25 Apr 2011 21:22:49 -0700 Subject: [Live-devel] DeviceSource.cpp impacts on sockets In-Reply-To: References: Message-ID: >I'm adapting live555 to stream from a live source and using >testMPEG2TransportStreamer.cpp and >http://www.live555.com/liveMedia/faq.html#liveInput >as reference. > >I got all necessary code to startup a RTP server and start playing >and put on my source code. > >As explained on the FAQ, i substitue ByteStreamFileSource >and MPEG2TransportStreamFramer layers by the DeviceSource one. That's correct. However, it's also a good idea to deliver - to the "RTPSink" object - a sufficiently large chunk of MPEG Transport Stream data to make efficient use of each outgoing RTP packet. (Packing just a single 188-byte Transport 'packet' into each outgoing RTP packet will work, but is inefficient.) To overcome this, either have your 'DeviceSource' accumulate a reasonable number (usually 7) of Transport 'packets' before delivering them, or else insert a "MPEG2TransportStreamAccumulator" object (see, for example, the source code in "wis-streamer": http://www.live555.com/wis-streamer/ ) >Using DDD to degub a segmentation fault bug, i found thats is caused >by a call to socketErr() made by writeSocket() ( more precisely, "if >(setsockopt(socket, IPPROTO_IP, IP_MULTICAST_TTL,(const char*)&ttl, >sizeof ttl) < 0)" line call). If this is correct, then it may be caused by a bad 'socket' parameter (perhaps a socket that has already been closed. However, I don't see what could be causing this... >How could DeviceSource changes impact on socket issues?? Unfortunately I don't see how they could. Sorry. -- Ross Finlayson Live Networks, Inc. http://www.live555.com/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From 34973832 at qq.com Thu Apr 28 04:49:22 2011 From: 34973832 at qq.com (=?ISO-8859-1?B?TXIuIFhpYW8=?=) Date: Thu, 28 Apr 2011 11:49:22 -0000 Subject: [Live-devel] mem leak when BasicTaskScheduler destructed Message-ID: hello, please note the followed code: ////////// BasicTaskScheduler ////////// BasicTaskScheduler* BasicTaskScheduler::createNew() { return new BasicTaskScheduler(); } #define MAX_SCHEDULER_GRANULARITY 10000 // 10 microseconds: We will return to the event loop at least this often static void schedulerTickTask(void* clientData) { ((BasicTaskScheduler*)clientData)->scheduleDelayedTask(MAX_SCHEDULER_GRANULARITY, schedulerTickTask, clientData); } BasicTaskScheduler::BasicTaskScheduler() : fMaxNumSockets(0) { FD_ZERO(&fReadSet); FD_ZERO(&fWriteSet); FD_ZERO(&fExceptionSet); schedulerTickTask(this); // ensures that we handle events frequently } BasicTaskScheduler::~BasicTaskScheduler() { } this code scheduled a task "schedulerTickTask" when construction, but not unscheduler it. so, when the BasicTaskScheduler object destruct, it will be mem leak. class BasicTaskScheduler: public BasicTaskScheduler0 { public: static BasicTaskScheduler* createNew(); virtual ~BasicTaskScheduler(); public: void schedulerTickTask(); protected: BasicTaskScheduler(); // called only by "createNew()" protected: // Redefined virtual functions: virtual void SingleStep(unsigned maxDelayTime); virtual void setBackgroundHandling(int socketNum, int conditionSet, BackgroundHandlerProc* handlerProc, void* clientData); virtual void moveSocketHandling(int oldSocketNum, int newSocketNum); protected: // To implement background operations: int fMaxNumSockets; fd_set fReadSet; fd_set fWriteSet; fd_set fExceptionSet; TaskToken fTickTask; // !!! THIS ONE !!! }; ////////// BasicTaskScheduler ////////// BasicTaskScheduler* BasicTaskScheduler::createNew() { return new BasicTaskScheduler(); } #define MAX_SCHEDULER_GRANULARITY 10000 // 10 microseconds: We will return to the event loop at least this often static void schedulerTickTask(void* clientData) { ((BasicTaskScheduler*)clientData)->schedulerTickTask(); } void BasicTaskScheduler::schedulerTickTask() { fTickTask = scheduleDelayedTask(MAX_SCHEDULER_GRANULARITY, ::schedulerTickTask, this); } BasicTaskScheduler::BasicTaskScheduler() : fMaxNumSockets(0) { FD_ZERO(&fReadSet); FD_ZERO(&fWriteSet); FD_ZERO(&fExceptionSet); schedulerTickTask(); // ensures that we handle events frequently } BasicTaskScheduler::~BasicTaskScheduler() { unscheduleDelayedTask(fTickTask); fTickTask = NULL; } ///// thanks -------------- next part -------------- An HTML attachment was scrubbed... URL: From ajaykashyap87 at gmail.com Tue Apr 12 23:44:15 2011 From: ajaykashyap87 at gmail.com (ajay kashyap) Date: Wed, 13 Apr 2011 06:44:15 -0000 Subject: [Live-devel] Sugesstion Required Message-ID: Hi, Am pursuing academic project . My Question is weather i can make live555 to stream adaptively and increase the troughput(or reduce packet loss) . Is it possible to analyse or find packets lost during streaming? if so how? And is it possible to find the bandwidth approximately and stream accordingly? Please give your suggestions, and guidance. Thanks in advance. From fl.tariolle at gmail.com Mon Apr 4 03:04:35 2011 From: fl.tariolle at gmail.com (FL Tariolle) Date: Mon, 04 Apr 2011 10:04:35 -0000 Subject: [Live-devel] live555 broken link: tips to build "live555 Streaming Media" code under Visual Studio 2005 are no more available Message-ID: "Eric Flickner hints" reported in http://www.live555.com/liveMedia/#config-windows section are no more available. This broken link is: http://letsgoustc.spaces.live.com/blog/cns!89AD27DFB5E249BA!167.entry Can anyone give me these tips? And then, it would be interesting to publish these tips in live555 site, not as an external non permanent link. Thanks. -------------- next part -------------- An HTML attachment was scrubbed... URL: From hhchang9 at hotmail.com Thu Apr 28 00:40:26 2011 From: hhchang9 at hotmail.com (Chang Hung-Hsin) Date: Thu, 28 Apr 2011 07:40:26 -0000 Subject: [Live-devel] openRTSP doesn't work with -y In-Reply-To: References: Message-ID: I tried openRTSP -4 -t -y rtsp://tvsqt.uws.edu.au/tvs.sdp > a.mp4 a.mp4 is always 0 byte I triedwithout -y openRTSP -4 -t rtsp://tvsqt.uws.edu.au/tvs.sdp > a.mp4 a.mp4 is playable but the video is out of sync. Is it a bug? -------------- next part -------------- An HTML attachment was scrubbed... URL: From hustmark at gmail.com Sun Apr 24 23:10:08 2011 From: hustmark at gmail.com (Mark) Date: Mon, 25 Apr 2011 06:10:08 -0000 Subject: [Live-devel] RTCP bug in multicast? Message-ID: Hi Ross, I just read the rtcp.cpp and find a problem in multicast mode. In RTCPInstance::incomingReportHandler1(), from line 342 : // Ignore the packet if it was looped-back from ourself: if (RTCPgs()->wasLoopedBackFromUs(envir(), fromAddress)) { // However, we still want to handle incoming RTCP packets from // *other processes* on the same machine. To distinguish this // case from a true loop-back, check whether we've just sent a // packet of the same size. (This check isn't perfect, but it seems // to be the best we can do.) if (fHaveJustSentPacket && fLastPacketSentSize == packetSize) { // This is a true loop-back: fHaveJustSentPacket = False; break; // ignore this packet } } Here, the mechanism to prevent endless loop seems not perfect, checking the variables fHaveJustSentPacket and fLastPacketSentSize is not enough. Think about this situation: 1. client1 sends out an RR(receive report) 2. server receives the RR and run into RTCPInstance::incomingReportHandler1() 3. before server runs to line 364 of rtcp.cpp ( fRTCPInterface.sendPacket(pkt, packetSize); ) , client2 sends out an RR packet 4. now server runs line 364-366; resending the client1's RR packet to the multicast group, then modify fHaveJustSentPacket and fLastPacketSentSize; fRTCPInterface.sendPacket(pkt, packetSize); fHaveJustSentPacket = True; fLastPacketSentSize = packetSize; 5. in the next SingleStep(), the RTCP will receive the client2's RR packet and resending the packet( line 364-366 of rtcp.cpp) to the multicast group 6. in the next SingleStep(), the RR packet in step 4 is arrived and server runs into RTCPInstance::incomingReportHandler1(), when it check looped-back packet in line 342, the variables fHaveJustSentPacket and fLastPacketSentSize are modified in step 5, so the checking is incorrect and may cause endless loop of multicast RTCP packet sending To avoid this bug we must enable the code in Groupsock::multicastSendOnly(), so the server will not received any multicast packets that it just sent out. From jingke2000 at gmail.com Wed Apr 6 21:59:07 2011 From: jingke2000 at gmail.com (Ke Yu) Date: Thu, 07 Apr 2011 04:59:07 -0000 Subject: [Live-devel] issue with streaming ulaw from memory buffer Message-ID: Hi! I'm writing some code to stream live audio in ulaw format over RTP multicast. I derived a class from framedSource class to read in the data from a memory buffer. An audio recorder thread feeds ulaw audio data to this buffer. In the derived class, I specified frame size @ 128 bytes, duration @ 16000 us and the presentation time, etc in the "doGetNextFrame" function. The network sink is an instance of "SimpleRTPSink". It seems to be straightforward. However, the audio was very broken when played back from VLC. Later I found that the output RTP packet has 1024 bytes payload and arriving interval for each RTP packet is 128 ms. I intended to have a 16-ms arriving interval and 128-byte RTP payload (which is the audio recorder's output frame size). Does this make any sense and how should I do that? Thanks! From linuxmeego at gmail.com Fri Apr 29 01:54:46 2011 From: linuxmeego at gmail.com (W W) Date: Fri, 29 Apr 2011 08:54:46 -0000 Subject: [Live-devel] Hi Guys, Could I ask you some questions about the Live55 Media Server? Message-ID: Hi Guys Sorry to trouble you. I want to develop a RTSP server. I want to use the Live555 Media Server.But I don't know how to use it. Could you give me some suggestion?Or some material to learn how to use it. I down load the live555MediaServer for Linux. Is there any document that introduce the Live555 Media Server? Thanks very much. BR Simon -------------- next part -------------- An HTML attachment was scrubbed... URL: From llzz2 at 163.com Mon Apr 18 05:00:51 2011 From: llzz2 at 163.com (LEO) Date: Mon, 18 Apr 2011 12:00:51 -0000 Subject: [Live-devel] what's the filename extension for the audio file generated by openRTSP Message-ID: <157dbe6.451.12f687c48f6.Coremail.llzz2@163.com> live-devel at lists.live555.com Hi, every body I'm fresh in the site and executed the command line as below ./openRTSP rtsp://video2.americafree.tv/AFTVHorrorH26496.sdp and it gerenated 1 video (video-H264-1)and 1 audio(audio-MPEG4-GENERIC-2) files. Either .264 or .mpg extension matches the file of video-H264-1 and it plays well in the movie player in Ubuntu, but for the audio-MPEG4-GENERIC-2 of the audio file, I tyried .aac, .amr, mp3, wav, ts, they all failed and can't be played. I'm confused. Long -------------- next part -------------- An HTML attachment was scrubbed... URL: From vidiot1000 at yahoo.com Mon Apr 18 11:23:36 2011 From: vidiot1000 at yahoo.com (Brad Thomas) Date: Mon, 18 Apr 2011 18:23:36 -0000 Subject: [Live-devel] openRTSP -- MP4 Audio/Video Capture -- Multiple Edit Lists -- Desync when editing Message-ID: <782754.16566.qm@web112615.mail.gq1.yahoo.com> Hello, We are currently using openRTSP to capture audio/video from Axis network Cameras (p1344) with the following command: openRTSP -b 200000 -4 -f 30 -y ?u -w 1280 -h 720 -d $DUR "rtsp://172.29.1.100:554/axis-media/media.amp?streamprofile=profile" > "/media/recordings/drive1/classroom/310-$2.mp4" & (Also tried it without the ?f 30) The resulting video will playback perfectly with the popular programs tried (vlc, quicktime, etc) but any attempt to edit the video will result in the audio and video desyncing. I have yet to find a program to overcome the issue. When using ffmpeg to manipulate the video this warning is printed: [mov,mp4,m4a,3gp,3g2,mj2 @ 0x2c80510] multiple edit list entries, a/v desync might occur, patch welcome It seems that the multiple edit lists are the cause of the editing issues. Is there any way to overcome this with openRTSP when the video is saved? Has anyone else encountered this issue and way to fix the desyncing. Any help is appreciated. Have a nice day, Brad Thomas