Philip Goh | 22 Jan 18:13 2015

Windows version of openRTSP producing bad files

Hello,

I’m saving an RTSP stream from an IP camera using the following command:

openrtsp -u yyy xxx -U 20150122T164234Z -4 -y -w 1920 -h 1080 -f 30 -F output_file -d 20 -P 30 rtsp://192.168.0.10/ONVIF/Storage

This works on openRTSP on Linux and OS X and I get a working .MP4 file with a size of about 3MB. On Windows,
openRTSP generates an MP4 file that is only 1KB in size. 

What is the most likely cause of this? Are the parameters different for Windows? Perhaps the binary I’ve
built is bad ( It can be downloaded from
https://dl.dropboxusercontent.com/u/21682354/Internet%20Posts/openrtsp%20windows/openRTSP.exe
)? 

Kind regards,
Phil

_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
Kenneth Forsythe | 22 Jan 15:37 2015

Encapsulate PassiveMediaServerSubsession in a derived ServerMediaSession

Hello,

 

I was trying to write a test program that contains a ServerMediaSession subclass which encapsulates a PassiveServerMediaSubsession (the contents of which could be as simple as code from the testH264VideoStreamer test program). However I am getting errors at runtime (on Windows specifically). I am seeing a “BasicTaskScheduler::SingleStep(): select fails: No error socket numbers used in the select call: 120(r) 128(r)”. If I don’t initialize an RTCPInstance I get a an access violation after the sink starts playing in RTPInterface.cpp line 215.

 

Is this scenario off limits or poor practice? I’ve had success with trying to do this with OnDemand  based subsessions, but not Passive. Alternatively, I did try instead subclassing PassiveServerMediaSubsession, and that works – but the first has the advantage of not having to have already created the groupsocks and RTPSink.

 

 

I’m really just trying to understand how to best write something more formal. Then main could be as simple as:

 

       // Begin by setting up our usage environment:

       TaskScheduler* scheduler = BasicTaskScheduler::createNew();

       UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);

 

       RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554);

       if (rtspServer == NULL) {

              *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n";

              exit(1);

       }

 

       ServerMediaSession* sms = ServerMediaSessionSubClass:: createNew(*env, "testStream", "test.264");

       rtspServer->addServerMediaSession(sms);

 

       char* url = rtspServer->rtspURL(sms);

       *env << "Play this stream using the URL \"" << url << "\"\n";

       delete[] url;

 

       env->taskScheduler().doEventLoop(); // does not return

 

 

And then in the SMS subclass constructor:

 

 

       // Create 'groupsocks' for RTP and RTCP:

       struct in_addr destinationAddress;

       destinationAddress.s_addr = chooseRandomIPv4SSMAddress(env);

       // Note: This is a multicast address.  If you wish instead to stream

       // using unicast, then you should use the "testOnDemandRTSPServer"

       // test program - not this test program - as a model.

 

       const unsigned short rtpPortNum = 18888;

       const unsigned short rtcpPortNum = rtpPortNum + 1;

       const unsigned char ttl = 255;

 

       const Port rtpPort(rtpPortNum);

       const Port rtcpPort(rtcpPortNum);

 

       Groupsock rtpGroupsock(env, destinationAddress, rtpPort, ttl);

       rtpGroupsock.multicastSendOnly(); // we're a SSM source

       Groupsock rtcpGroupsock(env, destinationAddress, rtcpPort, ttl);

       rtcpGroupsock.multicastSendOnly(); // we're a SSM source

 

       // Create a 'H264 Video RTP' sink from the RTP 'groupsock':

       OutPacketBuffer::maxSize = 100000;

       RTPSink* videoSink = H264VideoRTPSink::createNew(env, &rtpGroupsock, 96);

 

       // Create (and start) a 'RTCP instance' for this RTP sink:

       const unsigned estimatedSessionBandwidth = 500; // in kbps; for RTCP b/w share

       const unsigned maxCNAMElen = 100;

       unsigned char CNAME[maxCNAMElen + 1];

       gethostname((char*)CNAME, maxCNAMElen);

       CNAME[maxCNAMElen] = '\0'; // just in case

       RTCPInstance* rtcp

              = RTCPInstance::createNew(env, &rtcpGroupsock,

              estimatedSessionBandwidth, CNAME,

              videoSink, NULL /* we're a server */,

              True /* we're a SSM source */);

       // Note: This starts RTCP running automatically

 

       addSubsession(PassiveServerMediaSubsession::createNew(*videoSink, rtcp));

 

       // Open the input file as a 'byte-stream file source':

       ByteStreamFileSource* fileSource = ByteStreamFileSource::createNew(env, inputFileName);

       FramedSource* videoES = fileSource;

 

       // Create a framer for the Video Elementary Stream:

       H264VideoStreamFramer* videoSource = H264VideoStreamFramer::createNew(env, videoES);

       videoSink->startPlaying(*videoSource, NULL, NULL);

 

_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
Dnyanesh Gate | 22 Jan 10:55 2015

Proxy server multiprocess/multithreaded streaming.

Dear Live555 Team,

I have been using live555 proxy server to stream 1000+ streams. I have deployed it on quad core Intel Xeon server.
The server is working fine, but Its suffering from serious problem. For 100 streams and connected one client for each stream, one of the core is getting 100% utilized and other cores remain idle.
So that it couldn't go beyond 100 streams and also degrade its performance.

I had been searching for multiprocess or multi threaded solution on mailing list. But didn't found anything helpful.
People and FAQ did mentioned that to create TaskScheduler and RTSPClient in its own process or thread on client side.
But I am not getting how to do it on server side. ProxyServerMediaSession and ProxyRTSPClient doesn't allow to subclass.

Is it possible to create new process and handle ProxyServerMediaSession and all its client within that process ?
So that when all client disconnected or camera got disconnected I can close session and clients and exit from that process.

Can you guys please give me some guide lines on this.

--
Thanks & Regards,
DnyaneshG.
_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
Anthony Desmarais | 21 Jan 06:37 2015

Multicast to multiple interfaces

Hi Ross,

 

I have the live555 test application multicasting a MPEG2 transport stream from our embedded system. The system however has multiple network interfaces on it and sometimes more than one is active. We would like the system to stream on every enabled network interface in the system. Has this been considered in the live555 system?

 

Thanks

 

Anthony

 

 

Anthony Desmarais, Team Leader: Software Platforms

Altech Multimedia International (Pty) Ltd, Registration 1984/003805/07

PO Box 54, Mount Edgecombe, 4300, South Africa

UEC House, 1 Montgomery Drive, Mount Edgecombe, South Africa

+27 (0) 31 508 2710 (direct)

+27 (0) 31 539 5258 (fax)

+27 (0) 83 390 1706 (mobile)

anthony.desmarais <at> altech-multimedia.com

www.altech-multimedia.com

 


E-Mail Disclaimer: www.altron.co.za/email.asp
Should you have any questions regarding this e-mail legal notice please contact us on
1. Telephone number : +27315082800
2. Fax number : +2731539 3370
3. E-mail address: info <at> altech-multimedia.com

_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
ChaseopIm | 19 Jan 07:03 2015

check RTSPClient::handleResponseBytes

Hi.

 

I think there is some buggy code in RTSPClient::handleResponseBytes method(code line is 1547 ~ 1549).

In code, lineStart = nextLineStart; and nextLineStart is return value of getLine.

getLine function can return NULL. So nextLineStart and lineStart could be also null.

When lineStart is null, occurred crash.

 

Please check RTSPClient::handleResponseBytes.

 

Thanks.

 

 

_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
Dnyanesh Gate | 16 Jan 11:23 2015

Proxy server delete ServerMediaSession after all client disconnected.

Hi Ross,
I am using Live555 as a streaming media server and using REGISTER command feature to access cameras which are behind firewall.
I am able to do that, but our camera doesn't support PAUSE command. Proxy server is sending PAUSE command when all RTSP clients are disconnected.
I wish to send TEARDOWN command and delete that ServerMediaSession from proxy server.
I did tried to delete session by using following code snippet

void ProxyServerMediaSubsession::closeStreamSource(FramedSource* inputSource) {
  if (verbosityLevel() > 0) {
    envir() << *this << "::closeStreamSource()\n";
  }
  // Because there's only one input source for this 'subsession' (regardless of how many downstream clients are proxying it),
  // we don't close the input source here.  (Instead, we wait until *this* object gets deleted.)
  // However, because (as evidenced by this function having been called) we no longer have any clients accessing the stream,
  // then we "PAUSE" the downstream proxied stream, until a new client arrives:
  if (fHaveSetupStream) {
    ProxyServerMediaSession* const sms = (ProxyServerMediaSession*)fParentSession;
    ProxyRTSPClient* const proxyRTSPClient = sms->fProxyRTSPClient;
    if (proxyRTSPClient->fLastCommandWasPLAY) { // so that we send only one "PAUSE"; not one for each subsession
//      proxyRTSPClient->sendPauseCommand(fClientMediaSubsession.parentSession(), NULL, proxyRTSPClient->auth());
      proxyRTSPClient->sendTeardownCommand(fClientMediaSubsession.parentSession(), NULL, proxyRTSPClient->auth());
      proxyRTSPClient->fLastCommandWasPLAY = False;
      sms->fOurRTSPServer->deleteServerMediaSession((ProxyServerMediaSession*)sms);
    }
  }
}


Sometimes this code work, but sometimes it doesn't.
Can you please suggest me what is the better way to delete ServerMediaSession when there is no client connected to proxy server for specific stream?
--
Thanks & Regards,
DnyaneshG.
_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
Bruno Siqueira | 12 Jan 14:47 2015
Picon

Fwd: Streaming live from Android

Dear Live555 team,

I was curious if Live555 supports broadcasting live from a smartphone and streaming to we browsers.
As far as I read the documentation, it only supports local files inside the server being streamed. Does it have this extra functionality?

Best regards,

Bruno Siqueira
System Engineer
tel: +55.21.99987-9987
skype: bruno_sil


_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
Anthony Desmarais | 12 Jan 14:05 2015

Streaming from dvb tuner

Hi Ross,

 

I am busy porting the Live555 server to an embedded Linux MIPS platform (I actually got help from you in December on this too.) The aim is to receive a video stream from a USB DVB-T dongle and stream this over a network.

 

I currently have the test application testOnDemandRTSPServer running and streaming a MPEG2 file from the systems drive over the network just fine. I also have the DVB-T dongle on the system working and receiving a stream, I am now trying to tie these two together. As per your FAQ I have set the variable ‘reuseFirstSource = TRUE’

 

On the DVB device I am running the dvbapps test application to tune to the signal, this creates a device node /dev/dvb/adapter0/dvr0 which I can read to get the MPEG stream.

 

The client is currently a PC just running VLC.

 

If I set the input file on testOnDemandRTSPServer to /dev/dvb/adapter0/dvr0 the client cannot display the video.

 

I did the following test though.

I ran the command

cat /dev/dvb/adapter0/dvr0 > test.ts

after a few minutes I stopped this and then ran testOnDemandRTSPServer pointing it to the new test.ts file and the client displays the video just fine. So this tells me that the data coming out of /dev/dvb/adaptor0/dvr0 is in the correct format for testOnDemandRTSPServer so there must be something in the Live555 code that is stopping when accessing /dev/dvb/adapter0/dvr0.

I am a C developer for 18+ years now but have very little C++ experience so I am struggling a bit to get through your code.

 

Any help would be appreciated.

 

Anthony

 

 

Anthony Desmarais, Team Leader: Software Platforms

Altech Multimedia International (Pty) Ltd, Registration 1984/003805/07

PO Box 54, Mount Edgecombe, 4300, South Africa

UEC House, 1 Montgomery Drive, Mount Edgecombe, South Africa

+27 (0) 31 508 2710 (direct)

+27 (0) 31 539 5258 (fax)

+27 (0) 83 390 1706 (mobile)

anthony.desmarais <at> altech-multimedia.com

www.altech-multimedia.com

 


E-Mail Disclaimer: www.altron.co.za/email.asp
Should you have any questions regarding this e-mail legal notice please contact us on
1. Telephone number : +27315082800
2. Fax number : +2731539 3370
3. E-mail address: info <at> altech-multimedia.com

_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
Ogden, Nick | 9 Jan 13:15 2015

Streaming Recorded Media

I’m using Live555 to replace an old streaming stack in a video / audio

recording system. One of the requirements of this system is that any

client playing back the media should be able to display the original time

at which the video / audio was recorded. In the previous system this

was supported by storing the original NTP timestamps from when the

video was recorded and reusing them in the RTCP packets when streaming.

 

From my initial investigations, there seems to be no way to specify the

NTP timestamp to be used for an RTCP packet, nor to provide an offset
that could be applied against the wall clock to adjust the generated

timestamps.

 

Does anyone know of a way to achieve this, or an alternative way to provide

the original timestamps?

 

Kind regards.

--

Nick Ogden

 

G4S Technology

Tel:    +44 (0) 1684 857299          
nick.ogden <at> usa.g4s.com

www.g4stechnology.com

Challenge House, International Drive, Tewkesbury, Gloucestershire, GL20 8UQ, UK

P Please consider the environment before printing this email

 


The details of this company are as follows:
G4S Technology Limited, Registered Office: Challenge House, International Drive, Tewkesbury, Gloucestershire GL20 8UQ, Registered in England No. 2382338.

This communication may contain information which is confidential, personal and/or privileged.

It is for the exclusive use of the intended recipient(s).
If you are not the intended recipient(s), please note that any distribution, forwarding, copying or use of this communication or the information in it is strictly prohibited.

Any personal views expressed in this e-mail are those of the individual sender and the company does not endorse or accept responsibility for them.

Prior to taking any action based upon this e-mail message, you should seek appropriate confirmation of its authenticity.

This e-mail has been scanned for all viruses by MessageLabs.
_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
Kalkere, Giridhara | 6 Jan 05:45 2015
Picon

recording audio and video streams

Dear Ross,

 

I am using Live555 Media library to record an IP camera which has both video and audio streams.

After recording a chunk if I try to play it in the VLC player it shows only one stream available in the codec information section.

 

Can you please suggest what might have went wrong here.  Why I cannot able to see both streams.

 

Thanks and Regards,

Giri

 

_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
Kalkere, Giridhara | 29 Dec 12:42 2014
Picon

recording audio

Dear Ross,

 

Can use the live555 for the audio and video recording simultaneously?

 

Thanks and Regards,

Giri

_______________________________________________
live-devel mailing list
live-devel <at> lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Gmane