Hi, I am trying to stream AC3 audio format file using Live555. For that I have implemented a new class AC3AudioFileServerMediaSubsession.
However if I compile the code without NODEBUG=1 flag than the server crashes with stack trace mentioned below in mail. With NODEBG=1 flag nothing happens at server and no packets are shown on network. Please suggest if I am doing somethijg wrong here? The enclosures are: 1. AC3AudioFileServerMediaSubsession.hh 2. AC3AudioFileServerMediaSubsession.cpp 3. stack traces of crashes 4. Debug traces at server 5. Changes in testOnDemandRTSPServer.cpp for AC3 Regards, Ashwani Kathuria --------------------------------------------------------------------------------------------------------------------------------------- 1. -- AC3AudioFileServerMediaSubsession.hh ------------------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------- class AC3AudioFileServerMediaSubsession: public FileServerMediaSubsession{ public: static AC3AudioFileServerMediaSubsession* createNew(UsageEnvironment& env, char const* fileName, Boolean reuseFirstSource); private: AC3AudioFileServerMediaSubsession(UsageEnvironment& env, char const* fileName, Boolean reuseFirstSource); // called only by createNew(); virtual ~AC3AudioFileServerMediaSubsession(); private: // redefined virtual functions virtual FramedSource* createNewStreamSource(unsigned clientSessionId, unsigned& estBitrate); virtual RTPSink* createNewRTPSink(Groupsock* rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic, FramedSource* inputSource); }; --------------------------------------------------------------------------------------------------------------------------------------- 2. ----------AC3AudioFileServerMediaSubsession.cpp ------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------- AC3AudioFileServerMediaSubsession* AC3AudioFileServerMediaSubsession::createNew(UsageEnvironment& env, char const* fileName, Boolean reuseFirstSource) { return new AC3AudioFileServerMediaSubsession(env, fileName, reuseFirstSource); } AC3AudioFileServerMediaSubsession ::AC3AudioFileServerMediaSubsession(UsageEnvironment& env, char const* fileName, Boolean reuseFirstSource) : FileServerMediaSubsession(env, fileName, reuseFirstSource) { } AC3AudioFileServerMediaSubsession ::~AC3AudioFileServerMediaSubsession() { } FramedSource* AC3AudioFileServerMediaSubsession ::createNewStreamSource(unsigned /*clientSessionId*/, unsigned& estBitrate) { estBitrate = 48; // kbps, estimate ByteStreamFileSource* fSource = ByteStreamFileSource::createNew(envir(), fFileName); AC3AudioStreamFramer* source = AC3AudioStreamFramer::createNew(envir(),fSource); return source; } RTPSink* AC3AudioFileServerMediaSubsession ::createNewRTPSink(Groupsock* rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic, FramedSource* inputSource) { AC3AudioStreamFramer* audioSource = (AC3AudioStreamFramer*)inputSource; return AC3AudioRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic, audioSource->samplingRate()); } --------------------------------------------------------------------------------------------------------------------------------------- 3. Crash stack Traces --------------------------------------------------------------------------------------------------------------------------------------- However if I compile the code without NODEBUG=1 flag than the server crashes with following stack trace: irst chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=feeefeee ebx=00000000 ecx=feeefeee edx=024c98e8 esi=00000000 edi=00000000 eip=00405c5a esp=0012eca8 ebp=0012ecac iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010202 *** WARNING: Unable to verify checksum for testOnDemandRTSPServer.exe testOnDemandRTSPServer!Medium::envir+0xa: 00405c5a 8b4004 mov eax,dword ptr [eax+4] ds:0023:feeefef2=???????? 0:000> kp ChildEBP RetAddr 0012ecac 0040a468 testOnDemandRTSPServer!Medium::envir(void)+0xa [e:\officialdata\rtp\live\live-latest\livemedia\include\media.hh @ 59] 0012f3bc 00409feb testOnDemandRTSPServer!AC3AudioStreamParser::parseFrame(unsigned int * numTruncatedBytes = 0x024c97e0)+0x1b8 [e:\officialdata\rtp\live\live-latest\livemedia\ac3audiostreamframer.cpp @ 306] 0012f3d8 00409ed8 testOnDemandRTSPServer!AC3AudioStreamFramer::parseNextFrame(void)+0x1b [e:\officialdata\rtp\live\live-latest\livemedia\ac3audiostreamframer.cpp @ 165] 0012f3e4 004131d1 testOnDemandRTSPServer!AC3AudioStreamFramer::doGetNextFrame(void)+0x28 [e:\officialdata\rtp\live\live-latest\livemedia\ac3audiostreamframer.cpp @ 126] 0012f400 00414375 testOnDemandRTSPServer!FramedSource::getNextFrame(unsigned char * to = 0x024ba516 "--- memory read error at address 0x024ba516 ---", unsigned int maxSize = 0xed82, <function> * afterGettingFunc = 0x00414380, void * afterGettingClientData = 0x024c9dd8, <function> * onCloseFunc = 0x00414a20, void * onCloseClientData = 0x024c9dd8)+0xd1 [e:\officialdata\rtp\live\live-latest\livemedia\framedsource.cpp @ 79] 0012f434 0041423d testOnDemandRTSPServer!MultiFramedRTPSink::packFrame(void)+0x125 [e:\officialdata\rtp\live\live-latest\livemedia\multiframedrtpsink.cpp @ 217] 0012f444 004140f1 testOnDemandRTSPServer!MultiFramedRTPSink::buildAndSendPacket(unsigned int isFirstPacket = 1)+0xfd [e:\officialdata\rtp\live\live-latest\livemedia\multiframedrtpsink.cpp @ 191] 0012f454 0040b071 testOnDemandRTSPServer!MultiFramedRTPSink::continuePlaying(void)+0x11 [e:\officialdata\rtp\live\live-latest\livemedia\multiframedrtpsink.cpp @ 152] 0012f468 00409784 testOnDemandRTSPServer!MediaSink::startPlaying(class MediaSource * source = 0x024c97a8, <function> * afterFunc = 0x004097d0, void * afterClientData = 0x024c9d30)+0x91 [e:\officialdata\rtp\live\live-latest\livemedia\mediasink.cpp @ 79] 0012f484 004090ab testOnDemandRTSPServer!StreamState::startPlaying(class Destinations * dests = 0x024c9b30, <function> * rtcpRRHandler = 0x004057e0, void * rtcpRRHandlerClientData = 0x00625630, <function> * serverRequestAlternativeByteHandler = 0x00402880, void * serverRequestAlternativeByteHandlerClientData = 0x00625630)+0x1a4 [e:\officialdata\rtp\live\live-latest\livemedia\ondemandservermediasubsession.cpp @ 481] 0012f4ac 004048ff testOnDemandRTSPServer!OnDemandServerMediaSubsession::startStream(unsigned int clientSessionId = 0x29, void * streamToken = 0x024c9d30, <function> * rtcpRRHandler = 0x004057e0, void * rtcpRRHandlerClientData = 0x00625630, unsigned short * rtpSeqNum = 0x0012f510, unsigned int * rtpTimestamp = 0x0012f50c, <function> * serverRequestAlternativeByteHandler = 0x00402880, void * serverRequestAlternativeByteHandlerClientData = 0x00625630)+0x4b [e:\officialdata\rtp\live\live-latest\livemedia\ondemandservermediasubsession.cpp @ 272] 0012f5c4 004043b5 testOnDemandRTSPServer!RTSPServer::RTSPClientSession::handleCmd_PLAY(class ServerMediaSubsession * subsession = 0x00000000, char * cseq = 0x0012f8b8 "5", char * fullRequestStr = 0x00625660 "PLAY rtsp://107.108.199.135:8554/AC3AudioTest/ RTSP/1.0..CSeq: 5..User-Agent: LibVLC/1.1.7 (LIVE555 Streaming Media v2011.01.06)..Session: 00000029..Range: npt=0.000-....")+0x45f [e:\officialdata\rtp\live\live-latest\livemedia\rtspserver.cpp @ 1150] 0012f5ec 00402f21 testOnDemandRTSPServer!RTSPServer::RTSPClientSession::handleCmd_withinSession(char * cmdName = 0x0012fa50 "PLAY", char * urlPreSuffix = 0x0012f988 "AC3AudioTest", char * urlSuffix = 0x0012f7f0 "", char * cseq = 0x0012f8b8 "5", char * fullRequestStr = 0x00625660 "PLAY rtsp://107.108.199.135:8554/AC3AudioTest/ RTSP/1.0..CSeq: 5..User-Agent: LibVLC/1.1.7 (LIVE555 Streaming Media v2011.01.06)..Session: 00000029..Range: npt=0.000-....")+0x215 [e:\officialdata\rtp\live\live-latest\livemedia\rtspserver.cpp @ 1011] 0012fb20 00402869 testOnDemandRTSPServer!RTSPServer::RTSPClientSession::handleRequestBytes(int newBytesRead = 0n170)+0x631 [e:\officialdata\rtp\live\live-latest\livemedia\rtspserver.cpp @ 468] 0012fb48 00402802 testOnDemandRTSPServer!RTSPServer::RTSPClientSession::incomingRequestHandler1(void)+0x59 [e:\officialdata\rtp\live\live-latest\livemedia\rtspserver.cpp @ 357] 0012fb54 0041c93b testOnDemandRTSPServer!RTSPServer::RTSPClientSession::incomingRequestHandler(void * instance = 0x00625630, int __formal = 0n2)+0x12 [e:\officialdata\rtp\live\live-latest\livemedia\rtspserver.cpp @ 350] 0012fedc 0041ed71 testOnDemandRTSPServer!BasicTaskScheduler::SingleStep(unsigned int maxDelayTime = 0)+0x55b [e:\officialdata\rtp\live\live-latest\basicusageenvironment\basictaskscheduler.cpp @ 130] 0012feec 00401265 testOnDemandRTSPServer!BasicTaskScheduler0::doEventLoop(char * watchVariable = 0x00000000 "")+0x31 [e:\officialdata\rtp\live\live-latest\basicusageenvironment\basictaskscheduler0.cpp @ 81] 0012ff44 004013f9 testOnDemandRTSPServer!main(int argc = 0n1, char ** argv = 0x00232e80)+0x265 [e:\officialdata\rtp\live\live-latest\testprogs\testondemandrtspserver.cpp @ 283] --------------------------------------------------------------------------------------------------------------------------------------- 4. Debug prints on Server --------------------------------------------------------------------------------------------------------------------------------------- AC3AudioStreamParser::parseFrame() EXCEPTION (This is normal behavior - *not* an error) AC3AudioStreamParser::parseFrame() EXCEPTION (This is normal behavior - *not* an error) AC3AudioStreamParser::parseFrame() EXCEPTION (This is normal behavior - *not* an error) sending response: RTSP/1.0 200 OK CSeq: 4 Date: Wed, Mar 23 2011 10:09:55 GMT Transport: RTP/AVP;unicast;destination=107.108.199.135;source=107.108.199.135;cl ient_port=49412-49413;server_port=6970-6971 Session: 00000029 Liveness indication from client at 107.108.199.135 RTSPClientSession[0266E888]::handleRequestBytes() read 170 new bytes:PLAY rtsp:/ /107.108.199.135:8554/AC3AudioTest/ RTSP/1.0 CSeq: 5 User-Agent: LibVLC/1.1.7 (LIVE555 Streaming Media v2011.01.06) Session: 00000029 Range: npt=0.000- parseRTSPRequestString() succeeded, returning cmdName "PLAY", urlPreSuffix "AC3A udioTest", urlSuffix "" RTCPInstance[00363038]::RTCPInstance() schedule(1.026029->1300874996.567368) RTCPInstance[00363038]::~RTCPInstance() sending BYE sending RTCP packet 80c80006 800000f3 d1344573 8aa3cea7 000046c8 00000000 00000000 81cb0001 800000f 3 --------------------------------------------------------------------------------------------------------------------------------------- 5. ------ Changes in testOnDemandRTSPServer.cpp for AC3 --------------------------------------------------------------------------------------------------------------------------------------- // A AC3 video elementary stream: { char const* streamName = "AC3AudioTest"; char const* inputFileName = "test.ac3"; ServerMediaSession* sms = ServerMediaSession::createNew(*env, streamName, streamName, descriptionString); sms->addSubsession(AC3AudioFileServerMediaSubsession ::createNew(*env, inputFileName, reuseFirstSource)); rtspServer->addServerMediaSession(sms); announceStream(rtspServer, sms, streamName, inputFileName); } _______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel