[SCM] liblivemedia/master: Remove the not DFSG-free upstream changelog and replace it with a URL.

bdrung at users.alioth.debian.org bdrung at users.alioth.debian.org
Fri Dec 21 15:41:12 UTC 2012


The following commit has been merged in the master branch:
commit 8e83e3f0c0c4dc47dfd48be0af00e42572bf4e81
Author: Benjamin Drung <bdrung at debian.org>
Date:   Fri Dec 21 16:34:08 2012 +0100

    Remove the not DFSG-free upstream changelog and replace it with a URL.
    
    The upstream changelog is not DFSG-free:
    http://lists.live555.com/pipermail/live-devel/2012-December/016242.html

diff --git a/debian/rules b/debian/rules
index 9b9f453..b30746f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -18,10 +18,6 @@ ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
 	INSTALL_PROGRAM += -s
 endif
 
-#helper to update the upstream changelog
-debian/upstream.changelog:
-	wget http://live555.com/liveMedia/public/changelog.txt -O $@
-
 %:
 	dh $@ --parallel
 
@@ -51,5 +47,3 @@ override_dh_auto_install:
 
 override_dh_installchangelogs:
 	dh_installchangelogs debian/upstream.changelog
-
-.PHONY: debian/upstream.changelog
diff --git a/debian/upstream.changelog b/debian/upstream.changelog
index 920e31c..bf69ddc 100644
--- a/debian/upstream.changelog
+++ b/debian/upstream.changelog
@@ -1,3836 +1,2 @@
-2012.12.15:
-- Added an experimental new configuration file "config.linux-with-shared-libraries", for building for Linux with shared libraries
-  only (i.e., no static libraries).  (Thanks to Benjamin Drung for proposing and assisting with this.)
-
-2012.11.30:
-- Fixed another bug in the "ProxyServerMediaSession" destructor: We need to delete the "MediaSession" object before we delete
-  the "ProxyRTSPClient" object, in case the "MediaSession"s RTP/RTCP objects have an 'alternative byte handler' reference back
-  to the "ProxyRTSPClient".  (Thanks to Sergei Bastrakov for reporting this.)
-
-2012.11.29:
-- Fixed a bug in "ProxyServerMediaSession" that would be triggered if a "RTSPServer" that uses such an object were deleted.
-  (This also fixes a memory leak that would occur if a proxy's back-end server failed, but then restarted.)
-  (Thanks to Sergei Bastrakov for reporting this bug.)
-
-2012.11.28:
-- Fixed a bug in "ProxyRTSPClient" that was causing some background tasks to not be halted when a "ProxyServerMediaSession" is
-  deleted.  (Thanks to Sergei Bastrakov for bringing this to our attention.)
-
-2012.11.22:
-- Fixed a minor memory leak in "RTSPServer::closeAllClientSessionsForServerMediaSession()".  (Thanks to Matt Norman.)
-- Fixed an issue that caused "sapWatch" to fail to compile for at least one version of Debian.  (Thanks to Alessio Treglia.)
-
-2012.11.17:
-- Fixed a bug in "ProxyRTSPClient".  When we discover that the connection to the back-end server has failed, we need to
-  close any existing front-end RTSP client connections before we delete all of the "ProxyServerMediaSubsession"s.
-  The signature to "ProxyServerMediaSession::createNew()" has also changed; it now takes a pointer to the "RTSPServer" as parameter.
-
-2012.11.16:
-- Added a new configuration file "config.iphone-simulator" for building for Apple's iPhone simulator (running on a Mac).
-  (Note that we already had a configuration file "config.iphoneos" for building for the iPhone (or iPad) itself.)
-- Updated "SIPClient" and the "playSIP" demo application with a fix (suggested by Frederic Nadeau) to make "playSIP" send
-  RTCP "RR" packets back to the correct address.  This is a hack, and should be fixed by upgrading "SIPClient" to make it
-  asyncronous (like "RTSPClient").
-
-2012.11.08:
-- Updated the (Windows-only) implementation of "gettimeofday()" to be 'thread safe' (and also work correctly in WinCE).
-  (Thanks to Simon Roehrl.)
-- Made a change to the implementation of "RTPSink::convertToRTPTimestamp()" to overcome a possible integer overflow problem.
-  (Thanks to Simon Roehrl for noting this issue.)
-
-2012.11.05:
-- Made the "ProxyServerMediaSubsession" implementation a little more robust, by making sure that an object doesn't try to handle
-  reception of a RTCP "BYE" after it's been deleted.
-- Updated "config.iphoneos" to update "LINK_OPTS" to fix a linking problem (and also update "IOS_VERSION" to 6.0).
-  (Thanks to Chris Ballinger.)
-
-2012.10.24:
-- Made the "addNewInputSource()" function of "MPEG2TransportStreamFromESSource" "protected:", to allow subclasses of
-  "MPEG2TransportStreamFromESSource" to support adding new kinds of input stream, if desired.
-
-2012.10.22:
-- Updated "AVIFileSink" to add an index at the end.  (Thanks to "qiuchangyong qiuchangyong".)
-- Updated the "MediaSession" implementation to accept "audio/OPUS" as a valid RTP payload format (which can be implemented
-  using a "SimpleRTPSource").
-
-2012.10.21:
-- Fixed a bug in "PresentationTimeSessionNormalizer".  (Thanks to Bruno Marchand.)
-
-2012.10.19:
-- Fixed a bug in the way that our RTSP proxy implementation reinitializes itself after reestablishing connectivity with the
-  back-end server.  It now deletes all "ProxyServerMediaSubsession"s, so that they will get reestablished when the response
-  to the new "DESCRIBE" command comes back.  (This also makes it possible for the back-end stream to restart with different
-  parameters.)  (Thanks to Aashish Kaushik for reporting this problem.)
-- Moved the definition of the "PresentationTimeSessionNormalizer" and "PresentationTimeSubessionNormalizer" classes to
-  "include/ProxyServerMediaSession.hh", so that developers can use them if they wish.  (Note, though, that those classes were
-  intended for use only within our "ProxyServerMediaSession" (etc.) implementation, so don't complain if they don't do what you
-  want.)
-- Added a "#ifndef RTSP_BUFFER_SIZE"/"#endif" around the definition of RTSP_BUFFER_SIZE in "liveMedia/include/RTSPServer.hh",
-  to allow this definition to be changed at compile time if desired.  (Suggestion from Matt Schuckmann.)
-
-2012.10.18:
-- Updated the "RTPInterface" RTP/RTCP-over-TCP handling code to properly handle the case where we know about the
-  'stream channel id' for an embedded RTP or RTCP packet, but haven't yet registered a read handler function for it.
-  (This can occur in rare situations if our server starts sending RTP or RTCP packets before sending the RTSP "PLAY" response,
-  and the client (e.g., VLC) doesn't start reading from its input source until after it receives the "PLAY" response.)
-  (Thanks to Ralf Globisch for noticing this issue, and proposing a solution.)
-
-2012.10.17:
-- Maved "RTSPClient::reset()" from "private:" to "protected:", and made "ProxyRTSPClient::reset()" call "RTSPClient::reset()"
-  (at the end).  This causes the "ProxyRTSPClient" object to properly get reset (and, in particular, the 'session id' to get
-  reset) if we have to restart a connection with a back-end server.
-  (Thanks to Aashish Kaushik for reporting this issue.)
-- Made the implementation of ending RTP/RTCP-over-TCP a little more efficient (by implementing each packet send using 2 calls
-  to "send()", rather than 4).
-
-2012.10.16:
-- Updated our implementation of sending RTP/RTCP-over-TCP so that if the initial '$' send() succeeds, we force the send()s of
-  the remaining data (the 'stream channel id', packet size, and packet data) to succeed, even if it means that we have to 
-  temporarily block by doing so.  This makes servers whose RTP/RTCP-over-TCP streams exceed the capacity of the network
-  handle this a bit more gracefully, avoiding the possibility that 'incomplete' packet data will appear on receivers'
-  TCP connections.
-
-2012.10.12:
-- We backed out the change that we made (back in version 2012.06.12) to ignore SDP-specified port numbers for unicast streams,
-  because this broke our SIP client (which has no way of telling the server that it wants to use a different port number).
-  Now, if you want to ignore SDP-specified port numbers, you'll need to compile "MediaSession.cpp" with the definition
-  -DIGNORE_UNICAST_SDP_PORTS=1
-
-2010.10.11:
-- Fixed a bug that would cause "playSIP" to crash if run without a username/password parameter.  (Thanks to Sam Machin.)
-- Added "#include <errno.h>" to "groupsock/include/NetCommon.h", to reduce the likelihood of compiler warning messages
-  when compiling for Windows.  (Thanks to Bruno Marchand for the suggestion.)
-- Updated "StreamReplicator" to call "stopPlaying()" on the upstream source if/when all replicas have closed.
-  (Thanks to Bruno Marchand for the suggestion.)
-
-2012.10.04:
-- Updated the fix that we made in version 2012.09.11: When a "RTSPClient" requests RTP/RTCP-over-TCP streaming, it is
-  prepared to handle incoming RTP/RTCP-over-TCP data as soon as it receives the "SETUP" response, but doesn't start sending
-  RTCP "RR" packets until after it receives the "PLAY" response.
-
-2012.10.01:
-- Made the code for receiving RTP/RTSP-over-TCP streams a little more robust.  (Thanks to Rex Wolf.)
-- Made a minor fix to the way that "SIPClient" sends a "BYE".  (Thanks to Frederic Nadeau.)
-- Made the "fDestinationsHashTable" field in "OnDemandServerMediaSubsession" "protected:" rather than "private:", to allow
-  subclasses to access it, if desired.  (They should only do lookups in the table, though.)
-  (Thanks to Matt Schuckmann for this suggestion.)
-
-2012.09.27:
-- Fixed the RTSP proxying implementation so that the presentation times of relayed frames are properly aligned with
-  'wall clock' time, so that receivers will get these presentation times accurately (using RTCP).  We also defer RTCP "SR"
-  reports on the outgoing ('front-end') streams until the incomong streams' presentation times have been RTCP-synchronized
-  (because until then, the incoming presentation times are not accurate).
-  (Thanks to Bruno Marchand for bringing this issue to our attention.)
-- Updated the "ProxyRTSPClient" implementation so that if the connection to the back-end server fails, it tries to restore the
-  connection by sending a new "DESCRIBE" command. This is more reliable (especially for back-end servers that use authentication.)
-  (Thanks to Lei Wu for this suggestion.)
-- Added optional Boolean parameters to the "createNew()" functions for the "MPEG4VideoStreamDiscreteFramer",
-  "MPEG1or2VideoStreamDiscreteFramer", and "DVVideoStreamFramer" filters, to specify that the input frames' presentation
-  times should be passed through unmodified.  (The default behavior for these filters is to modify at least some presentation
-  times.)  This parameter is necessary for our RTSP proxying implementation (because it wants to relay frames' presentation times
-  unmodified.)
-- Updated "RTSPClient.hh" to move the "fCSeq" and "fCurrentAuthenticator" from "private:" to "protected:".
-  This makes it possible for subclasses to implement variants of RTSP commands.
-  (Thanks to Matt Schuckmann for this suggestion.)
-- Updated the "MediaSession" implementation to accept "audio/ILBC" as a valid RTP payload format (which can be implemented
-  using a "SimpleRTPSource").
-- Added a "usesTCPTransport()" Boolean function to "RTSPServer::RTSPClientSession" so that subclasses can easily know whether
-  (at least one subsession of) the session is being streamed via TCP.
-- Removed a small piece of unnecessary code from the "testRTSPClient" code.  (Thanks to Anton Zvyagintsev for noticing this.)
-
-2012.09.13:
-- Minor bugfix in "RTSPClient" when imnplementing RTSP-over-HTTP: Don't enqueue "POST" request records (after sending the command),
-  because we don't expect a response to this request.  (Thanks to Daniel Peng.)
-- Print an error message (in "RTCP.cpp" and "MultiFramedRTPSource.cpp") when we hit a buffer limit when reading
-  a (RTCP or RTP) packet over TCP.
-- Increased MAX_PACKET_SIZE in "MultiFramedRTPSource.cpp" (for reading incoming packets) to 20000, because of a report
-  of a server sending packets larger than 10000 bytes.
-- Added support for receiving the "application/VND.ONVIF.METADATA" RTP payload format.  This is just a XML document packed into
-  simple RTP packets (but with the "M" bit used to indicate the end of the document).
-  (Thanks to Michel Promonet for this suggestion.)
-- Updated the meaning of the "doNormalMBitRule" parameter to "SimpleRTPSource::createNew()" and "SimpleRTPSink::createNew()".
-  It now applies for all media types other than "audio".  (Previously, it applied only to "video".)
-  This change makes it possible to use "doNormalMBitRule" = True for the "application/VND.ONVIF.METADATA" RTP payload format.
-
-2012.09.12:
-- Fixed a bug in the URL parsing code in "RTSPCommon.cpp" that would cause parsing to fail for RTSP urls that don't have any
-  slashes after the "host" or "host:port" part.  (Such URLs would usually be used only for operations - such as "OPTIONS" - on the
-  entire server.)  (Thanks to Tamas Vincze for reporting this.)
-
-2012.09.11:
-- Fixed a problem whereby a "RTSPClient" streaming RTP/RTCP-over-TCP would sometimes send its first RTCP "RR" packet before
-  the server had had a chance to handle the "PLAY" command.  This caused a problem for our server, because it would receive
-  the RTCP "RR" packet over the RTSP command connection, before it knew how to deal with this.
-  (Thanks to Ralf Globisch for reporting this issue.)
-- Fixed a bug in "MPEG2TransportStreamFromESSource": Its destructor wasn't stopping the delivery from upstream objects.
-  (Thanks to Jing Li for reporting this.)
-- Updated "AVIFileSink" to add a 'start code' before each H.264 NAL unit that it writes to the file.
-  (Thanks to 'giuchangyong' for the suggestion.)
-- Added "-DTIME_BASE=int" to the COMPILE_OPTS for each of the "config.macosx*" configuration files (because someone reported
-  that it seems to be necessary for them).
-
-2012.09.07:
-- The socket error handling improvement that we made back in version 2012.07.24 inadvertently broke a workaround that we had
-  made (much earlier) for a bug in Windows.  This caused problems for some Windows clients that receive via RTP-over-TCP.
-  This version should fix those problems.
-- Modified the implementation of "MatroskaFileParser::parseEBMLVal_float()" to remove some aliasing that might cause
-  some compilers to generate incorrect code when optimizing.  (Thanks to 'Owen' for noting this issue.)
-
-2012.09.06:
-- Fixed a bug in "RTSPServer" that would cause incorrect RTSP responses to be sent back in response to "PAUSE"
-  (and some "GET_PARAMETER" and "SET_PARAMETER") commands.  (Thanks to Matthias Meding for reporting this.)
-
-2012.08.31:
-- Fixed a bug in "WAVAudioFileServerMediaSubsession" that could cause problems when seeking within very large WAV files.
-  (Thanks to 'Raph' for noting this problem.)
-- Fixed a bug in "VorbisAudioRTPSink".  (Thanks to Owen Wallace for reporting this.)
-
-2012.08.30:
-- Fixed an obscure bug in the "MatroskaFile" constructor if the specified input file does not exist.
-  Also, fixed an obscure bug in "RTSPServer" if it receives a malformed request.
-  (Thanks to Kevin Kuo for reporting this.)
-
-2012.08.29:
-- The private->protected change to "fPreferredFrameSize" in the previous release was done in the wrong header file.  It should
-  have been done in "WAVAudioFileSource.hh", not "ByteStreamFileSource.hh".
-
-2012.08.28:
-- Added a new 'filter' class "EndianSwap24", for byte-swapping 24-bit values between little and big-endian.
-- Updated "WAVAudioFileServerMediaSubsession" to support the streaming of 24-bit (or 20-bit) WAV audio files.
-  (Thanks to 'Raph' for this suggestion, and for providing an example file.)
-- Brought the "testWAVAudioStreamer" demo application up-to-date, by increasing the variety of WAV file formats that it can support.
-- Added a "-U <absolute-start-time-string>" option to "openRTSP", to support seeking by 'absolute' time (if, of course, the
-  server supports this).  (Thanks to Michel Promonet for this suggestion.)
-- Updated the RTSP server implementation so that, by default, if a client tries to "PLAY" a stream using an 'absolute' time,
-  then the server will refuse by sending back a regular (NPT) "Range:" header instead.  (If you want the server to handle
-  seeking by 'absolute' time, then you need to reimplement "ServerMediaSession::seekStream()" or
-  "OnDemandServerMediaSubsession::seekStreamSource()".)
-- Made the "fPreferredFrameSize" variable in "ByteStreamFileSource.hh" "protected:" rather than "private:", to allow subclasses
-  of "WAVAudioFileSource" to change its value, if desired.
-
-2012.08.20:
-- Added optional RTSP server and RTSP client support for streams that are indexed by 'absolute' time - i.e., using strings
-  of the form "YYYYMMDDTHHMMSSZ" or "YYYYMMDDTHHMMSS.<frac>Z".
-  - For RTSP server developers (i.e., developers who have their own subclasses of "OnDemandServerMediaSubsession"):
-    - To automatically have your streams advertised (in their SDP description) as supporting absolute time indexing,
-      reimplement (in your subclass) the virtual function:
-        "virtual void getAbsoluteTimeRange(char*& absStartTime, char*& absEndTime) const;"
-	  (see "liveMedia/include/ServerMediaSession.hh").
-      This function should set "absStartTime" to a string value (of the form noted above), and should set "absEndTime" to
-      a corresponding string value, if the stream has an end time, otherwise NULL.
-    - To implement seeking by absolute time, reimplement (in your subclass) the virtual function:
-        "virtual void seekStreamSource(FramedSource* inputSource, char*& absStart, char*& absEnd);"
-	  (see "liveMedia/include/OnDemandServerMediaSubsession.hh").
-      "absStart" (and "absEnd", if non-NULL) are strings (of the form noted above).
-      (The function *may* change them, to make them more accurate.)      
-  - For RTSP client developers:
-    - To check whether a stream supports indexing by absolute time,
-      call "MediaSession::absStartTime()" or "MediaSubsession::absStartTime()", and check whether this (string) value is non-NULL.
-    - To play a stream, indexed by absolute time, call one of the new, alternative forms of "RTSPClient::sendPlayCommand()"
-      that take "absStartTime" (and optional "absEndTime") strings as parameters.
-      (see "liveMedia/include/RTSPClient.hh")
-- Updated the "BasicTaskScheduler" class to make the 'maxSchedulerGranularity' time (in microseconds) an optional parameter to
-  "BasicTaskScheduler::createNew()".  This parameter (default value: 10000 (i.e., 10 ms)) specifies the maximum time that we
-  wait (in "select()") before returning to the event loop to handle non-socket or non-timer-based events,
-  such as 'triggered events'.  You can change this is you wish (but only if you know what you're doing!),
-  or set it to 0, to specify no such maximum time.
-  (You should set it to 0 only if you know that you will not be using 'event triggers'.)
-
-2012.08.17:
-- Fixed the RTSP server support for MPEG Transport Stream 'trick play' to stream the correct amount of data when a stream
-  'duration' is specified for fast forward or reverse play.  (Thanks to Michael Boom for reporting this bug.)
-- Made some changes to "liveMedia/include/RTSPServer.hh" to make old compilers happy.
-
-2012.08.12:
-- Modified the change to the definitions of EINTR, EAGAIN, EINPROGRESS, EDOULDBLOCK in "groupsock/include/NetCommon.h"
-  (made in the previous release) to ensure that they are always mapped to the "WSA*" equivalents.
-
-2012.08.08
-- A major update to the RTSP server implementation.  A single RTSP client session (i.e, the streaming of one particular stream
-  to one particular client) can now use an arbitrary number (>=1) of TCP connections.
-  For more details, see:
-      http://lists.live555.com/pipermail/live-devel/2012-July/015571.html
-- Put #ifndef/#endif around the (Windows-only) definitions of EINTR, EAGAIN, EINPROGRESS, EDOULDBLOCK in
-  "groupsock/include/NetCommon.h", in case they are already defined by the system's header files.
-  (Thanks to Hyunho Kim for bringing this to our attention.)
-- Made a small modification to "H264VideoStreamFramer.cpp" to eliminate some 'unused variable' compiler warnings
-  (when compiling without DEBUG defined).
-
-2012.07.26:
-- Made the "RTPInterface" code for handling RTP/RTCP-over-TCP a little more robust.
-- Updated the "WAVAudioFileSource" WAV-file parser to skip any extraneous 'chunks' between RIFF and FORMAT.
-  (Thanks to Sid Price for suggesting this.)
-
-2012.07.24:
-- Updated the "RTPInterface" code to better handle socket errors when reading from TCP sockets.  (Thanks to Barry Stump for
-  bringing this issue to our attention.)
-- Made sure that some code that calls "fileno()" for doing asynchronous file reading never gets compiled under Windows
-  (where all file reading is synchronous), because some versions of Windows redefine the result type of "fileno()".
-  (Thanks to Sid Price for bringing this to our attention.)
-- A member variable of "ProxyServerMediaSession" was not being initialized correctly (causing a "valgrind" error).
-  (Thanks to Jesus Leganes for reporting this.)
-- Removed some unnecessary "abort()" calls from the code.
-
-2012.07.18:
-- Fixed a minor bug in the "H264VideoStreamParser" code that could sometimes cause a very short trailing NAL unit to not
-  get parsed properly.  (Thanks to John McNamara for reporting this issue.)
-- Made some changes to RTSP header parsing, to make it more robust.  (Thanks to Lionel Orry for the suggestion.)
-
-2012.07.14:
-- Updated the RTSP server code to properly handle "Range:" headers of the form "npt=-<endtime>".
-  (Thanks to Michael Boom for bringing this to our attention.)
-
-2012.07.06:
-- Modified the implementation of "ServerMediaSession::generateSDPDescription()" to ignore (skip over) subsessions that use
-  medium or codec names that we don't understand.  (Previously, subsessions like this would cause a NULL SDP description to be
-  returned.)  This allows "ProxyServerMediaSession" to properly handle sessions like this.  (Thanks to Kiran Thakkar for
-  alerting us to an example that illustrated this problem.)
-
-2012.07.03:
-- Moved "ProxyRTSPClient" - which had previously been hidden inside the implementation of "ProxyServerMediaSession" - to
-  the "ProxyServerMediaSession.hh" header file, in case developers want to subclass it.  We also define a new virtual function
-  "ProxyServerMediaSession::createNewProxyRTSPClient()" whichh can be reimplemented to create such subclasses.
-  (Thanks to Jesus Leganes for this suggestion.)
-- Made "RTSPClient::sendRequest()" a virtual function, and made it "protected:" rather than "private:", in case subclasses
-  want to redefine it (e.g., to do additional functions such as logging).
-  (Thanks to Jesus Leganes for this suggestion.)
-
-2012.06.26:
-- Moved the code for ignoring the SIGPIPE signal to "RTSPCommon.cpp", and made it a function.  We now call this function from
-  the "RTSPClient" code, as well as the "RTSPServer" code.  (Thanks to Barry Stump for the suggestion.)
-- Added a new public member flag "describeCompletedFlag" to "ProxyServerMediaSession".  This can be used as a 'watch variable'
-  in a call to "doEventLoop()", to 'block' in the event loop until the back-end "DESCRIBE" command sent for a newly-created
-  "ProxyServerMediaSession" has completed.
-
-2012.06.23:
-- Fixed a bug in "H264VideoStreamParser" that affected the "testH264VideoToTransportStream" demo application.
-  (Thanks to John McNamara for helping to debug the problem.)
-- We no longer set a non-default "FileSink" buffer size in the "testH264VideoToTransportStream" demo application, because the
-  "FileSink" is fed by a "MPEG2TransportStreamFromESSource", ehich delivers only one 188-byte Transport Stream packet at a time.
-
-2012.06.17:
-- Fixed a bug in "HTTP Live Streaming" server support.  (Thanks to Daniel Wang for reporting the problem.)
-- Updated the implementation of "triggerEvent()" in "BasicTaskScheduler" to avoid a possible race condition (if "triggerEvent()"
-  is called from a non-LIVE555 thread).  (Thanks to Matthais Doering for noting this issue.)
-- Updated the "ProxyServerMediaSession" code to ensure that all front-end "RTCPInstance" objects are created with non-zero
-  bandwidth estimates.
-
-2012.06.12:
-- If a SDP description specifies a port number for a unicast stream, then we still choose an ephemeral client port number,
-  just as we would if the SDP description had not specified a port number (the usual case). Renato Mauro reports that some Sony
-  network cameras do this; this change lets the client choose a different port number (which is useful if one host is receiving
-  from more than one such camera at once).
-- Fixed some minor bugs with Matroska file parsing.  (Thanks to Petr Novak.)
-- A field in "RTPTransmissionStats" was not being initialized in the constructor.  (Thanks to Michel Promonet for noting this.)
-- Updated "UsageEnvironment/include/Boolean.hh" to use the 'bool' type defined for "MSVC++ 8.0, Visual Studio 2005 and higher",
-  if that development environment is being used.  Also, fixed a few places in the code where we were using boolean types
-  incorrectly.  (Thanks to Nikolai Vorontsov for these suggestions.)
-
-2012.05.17:
-- Changed the implementation of "RTSPServer::removeServerMediaSession(char const* streamName)" to not
-  call "lookupServerMediaSession()", in case that (virtual) function has been overridden in a subclass to do something different.
-  Now we just call the hash table 'remove' function directly.  (Thanks to Bruno Abreu for bringing this to our attention.)
-- Updated the "config.iphoneos" configuration file.  (Developers may need to change the definition of "IOS_VERSION", however.)
-- Added "#include <ctype.h>" to "MPEG4GenericRTPSink.cpp", because some systems apparently need this to define "tolower()".
-  (Thanks to Michel Promonet for noting this.)
-
-2012.05.11:
-- Really fixed the bug in the implementation of "StreamReplicator::deleteReplica()" that I was supposed to have fixed in
-  the previous revision.  (Thanks to Bruno Abreu for setting us straight.)
-- Fixed the signature of "MultiFramedRTPSink::curFragmentationOffset()" to return an "unsigned" rather than a "Boolean".
-  (Thanks to Nikolai Vorontsov for noticing this.)
-
-2012.05.03:
-- Fixed the "testReplicator" demo application code to actually do what it claims - transmit one replica stream via UDP,
-  while writing the other replica stream to a file.
-  (We had accidentally omitted the line that transmits one replica stream via UDP.)
-- Fixed a bug in the implementation of "StreamReplicator::deleteReplica()".  (Thanks to Bruno Abreu for reporting this.)
-- Fixed a bug in "RTSPServer" that would occur if you tried to add two different "ServerMediaSession" objects using the same
-  stream name.  (Thanks to Vadim Kosarev for noting this.)
-- Added "-DXLOCALE_NOT_USED=1" to "config.cygwin" (on the suggestion of Warren Young).
-
-2012.04.27:
-- Modified the "RTSPClient" implementation to be more careful about not accessing the "RTSPClient" object's state after
-  calling "handleRequestError()", in case the handler function handles the error by deleting the "RTSPClient" object itself.
-  (The "testRTSPClient" demo application does this, for example.)  (Thanks to Gord Umphrey for reporting a problem,
-  and to Guy Bonneau for pointing out this as a possible cause.)
-- Fixed a typo in the "Makefile.tail" file for the "mediaServer" directory.  (Thanks to 'Nix Lo' for the report.)
-- Removed an unneeded "typedef" from "Locale.hh"; it was causing compiler warnings.  (Thanks to Barry Stump and Warren Young
-  for reporting this.)
-
-2012.04.26:
-- Added a debugging error message to various "*Sink" classes, to warn when the "numTruncatedBytes" parameter in the 'after getting'
-  function is >0.  When this happens, you need to increase the "bufferSize" parameter in the appropriate "*::createNew()" call.
-- Changed the buffer size used by the "testH264VideoToTransportStream" demo application from 10000 to 100000, because input H.264
-  NAL units are often larger than 10000 bytes.
-- Changed the default 'buffer size' parameter in "H264VideoFileSink::createNew()" from 10000 to 100000, because input H.264
-  NAL units are often larger than 10000 bytes. 
-- Changed the signature of "AuxHandlerFunc()" (used by the "setAuxilliaryReadHandler()" hack) to pass "packetSize" by reference
-  instead of by value.  (Thanks to Keary Griffin for this suggestion; he was using this mechanism to implement SRTP.)
-- Changed the way that we disable the handling of SIGPIPE signals in "RTSPServer.cpp" (so that the server doesn't get killed
-  when clients, running on the same host, get killed).  (Phillipe Clavel reported that the old method
-  - "signal(SIGPIPE, SIG_IGN);" - wasn't working properly on Mac OS X.)
-
-2012.04.21:
-- Made some cosmetic changes to the "live555ProxyServer" code, prior to its official announcement.
-
-2012.04.18:
-- Added "ProxyServerMediaSession" - a subclass of "ServerMediaSession" that can be used to create a (unicast) RTSP servers
-  that acts as a 'proxy' for another (unicast or multicast) RTSP/RTP stream.
-- Added a new application "live555ProxyServer", and included it in a new subdirectory "proxyServer/" in the 
-  "LIVE555 Streaming Media" distribution.  This application - which uses the new "ProxyServerMediaSession" class - acts as
-  a unicast RTSP server 'proxy' for one or more 'back end' (unicast or multicast) RTSP streams, specified on the command line.
-- Fixed an obscure bug in RTP/RTCP-over-TCP reading.  (Thanks to Shiyong Zhang for reporting this.)
-- Changed the definition of "Boolean" in "UsageEnvironment/include/Boolean.hh" from "unsigned" to "unsigned char",
-  to avoid an apparent conflict when compiling for Mac OS X (and also to save some space).
-  (Thanks to Barry Stump for the suggestion.)
-- Madea a minor change to "RTPInterface" to accommodate RTSP clients that call 'startPlaying()' on a "RTPSource" object prior
-  to the handling of a RTSP "SETUP" response.  (This change affected only RTP-over-TCP streams.)
-- Changed the "RTSPClient" "fVerbosityLevel" field from "private:" to "protected:", to allow subclasses to use it in their own
-  debugging output.
-- Made some changes to "GroupsockHelper.cpp" that were allegedly needed for compilation for 'Android'.
-- Made a minor change to "NetCommon.h" that allegedly improves/fixes compilation for some version of Windoze.
-- Removed the "MP3HTTPSource" class; it was old code that shouldn't be used.
-
-2012.04.04:
-- Made some changes to "H264VideoRTPSink" and "T140TextRTPSink" to correct some minor bugs.
-- Improved the way that "H264VideoStreamDIscreteFramer" detects and reports NAL units that erroneously begin with
-  MPEG 'start codes'.
-- Fixed a bug in the way in which the "ServerMediaSession" reference count is updated by "RTSPServer::RTSPClientSession" objects.
-  (Thanks to Daniel Liu for reporting this.)
-- Modified the "MultiFramedRTPSource" code to optimize the case when the 'packet reordering threshold' has been set to 0.
-  (Doing this is not recommended, however, unless you're only going to be on networks where packet reordering is extremely
-  unlikely.)
-- Added a new member function "reassignInputSource()" to "FramedFilter", to allow a filter's input source to be changed.
-- Changed some comments in "testRTSPClient.cpp" to make it clearer that if you (for whatever reason) choose to reclaim the
-  "UsageEnvironment" and "TaskScheduler" objects, then you can do so only *outside* the event loop (e.g., in "main()", after
-  "doEventLoop()" has returned).
-
-2012.03.22:
-- Fixed a bug in the way that "MPEG1or2DemuxedServerMediaSubsession" creates "AC3AudioStreamFramer" objects.
-  This was causing errors in the way that AC3 audio tracks in VOB files were being streamed by "testOnDemandRTSPServer".
-  (Thanks to "Rustam" for reporting this issue.)
-- Corrected a potentially misleading error message in "RTSPClient".  (Thanks to Sebastien Escudier for reporting this.)
-
-2012.03.20:
-- Fixed a bug in the "RTSPServer" implementation that could prevent it from properly handling 'pipelined' requests
-  (such as "SETUP" requests) from a single client.
-- Updated the "RTSPClient" code to (when "verbosityLevel" > 0) output a warning message when the server 'skips over' one of our
-  earlier requests.  If this happens, it indicates a bug in the server (perhaps a bug in the way that the server handles
-  pipelined requests - such as the bug that we just fixed in our own server here).
-- Fixed a bug in the "RTSPClient" code that prevented it from properly handling 'pipelined' responses from a single server.
-- Fixed a bug in the Matroska file parsing code that could cause an infinite loop when streaming from a multi-track file.
-- Updated the "RTSPServer" code to no longer attempt to seek, or set the scale of, a subsession within a multi-subsession
-  stream.  (Instead, these operations can be done only on the 'aggregate' session.)
-- Added a new member function "addFilter()" to "MediaSubsession".  This allows RTP receivers to add a filter (such as a 'framer')
-  in front of the subsession's "readSource()", changing "readSource()" to be this new filter.
-- Fixed a minor bug in "ServerMediaSession" that was causing it to generate incomplete default 'info' and 'description' strings
-  in SDP descriptions.
-- Fixed a minor bug in "T140TextRTPSink": Make sure that the 'idle timer' (for delivering empty frames downstream) gets turned
-  off when the input source closes.
-- Fixed the testing of the "mpeg4Mode" parameter to the "MPEG4GenericRTPSink" constructor, to make it case-insensitive.
-- Added new versions of "H264VideoRTPSink::createNew()" that (optionally) take SPS and PPS NAL units
-  (either in raw binary form, or as a 'sprop-parameter-string') as parameters.  This is useful if you know this information in
-  advance, rather than having to get it from the input 'framer' object.
-- Added a new version of "H264VideoStreamFramer::setSPSandPPS()" that takes a 'sprop-parameter-string'
-  (instead of the raw binary NAL units) as parameter.
-- Added a new version of "MPEG4ESVideoRTPSink::createNew()" that takes stream configuration information as a parameter.  This is
-  useful if you know this information in advance, and don't want to rely upon the sink getting this from the input 'framer' object.
-- Added a member function "MPEG4VideoStreamFramer::setConfigInfo()" that can be used to (optionally) set stream configuration
-  information, without requiring the framer to read it from the input source.
-- Added a new version of "VorbisAudioRTPSink::createNew()" that takes a Base-64-encoded 'configuration' string - rather than
-  raw configuration headers - as parameter.
-- Added a minor hack to "MediaSubsession" to allow ADU-ized MP3 frames to optionally be received 'as is',
-  instead of always converting them back to MP3 frames for delivery.
-- Added a new member function "ServerMediaSession::numSubsessions()" to return the number of "ServerMediaSubsessions" that have
-  been added to the "ServerMediaSession".
-- Changed the signature of "base64Decode()" to make its string argument "char const*" instead of "char*" (for extra type safety).
-
-2012.02.29:
-- We no longer define RTSPCLIENT_SYNCHRONOUS_INTERFACE by default.  Consequently, the old, now-deprecated 'synchronous' "RTSPClient"
-  interface will no longer be available, by default.  If you still want this, however, you can get it by "#define"ing
-  RTSPCLIENT_SYNCHRONOUS_INTERFACE before "RTSPClient.hh" gets included the first time.
-- Modified the 'multicast loopback' mechanism for getting our own IP address to check the source address of the received
-  multicast packet, to make sure that it's valid (e.g., not 127.0.0.1).  (Thanks to Stefan Spurling for this suggestion.)
-- Updated "MediaSubsession::initiate()" to better handle the (relatively rare) case of UDP-only (i.e., non-RTP) streams that
-  specify a port number in the SDP description.  In this case, because RTP is not being used, we accept the provided port number
-  even if it's odd, and we don't bother creating a RTCP 'groupsock'.  (Thanks to John Orr for this suggestion.)
-
-2012.02.04:
-- Updated "WAVAudioFileSource" to read from its input file asynchronously,
-  if possible, rather than doing a synchronous (blocking) read.
-
-2012.02.03:
-- Updated "RTSPClient" to - after receiving a "SETUP" response for a UDP stream - send a couple of short 'dummy' UDP packets
-  to the server.  This will make it more likely that the incoming RTP/UDP packets will successfully traverse a NAT box
-  (if the client is behind a NAT).  (Note that we don't do this for RTCP, because the client's regular RTCP "RR" packets will
-  have the same effect.)
-- Changed the way that the "sessionId" member field in "MediaSubsession" is managed.  Its memory is now managed by "MediaSubsession"
-  itself, rather than by "RTSPClient" (as it was previously).  With the previous behavior, "valgrind" (incorrectly) reported
-  a possible memory leak.  The new behavior should make 'valgrinerds' happy.
-
-2012.01.26:
-- We now make the "MediaLookupTable" class visible in the header file "include/Media.hh".  This allows developers to, if they wish,
-  iterate over the whole set of "Medium" objects that they've created.
-  (Thanks to Aviad Rozenhek for this suggestion.)
-- "HashTable::Iterator::create()" now takes a "HashTable const&" as parameter, rather than a "HashTable&".
-  (This makes it possible for iterators to work on (references to) hash tables that we've declared as const - for more type safety.)
-
-2012.01.25:
-- Added a new class "MPEG2TransportUDPServerMediaSubsession" (a subclass of "OnDemandServerMediaSubsession") that can be used
-  to build a RTSP server that can takes a UDP (raw UDP or RTP/UDP) Transport Stream as input (via IP multicast, or unicast).
-  We also updated the "testOnDemandRTSPServer" demo application to show how a RTSP server can take input from the
-  (IP multicast) Transport Stream sent by the "testMPEG2TransportStreamer" demo application.
-  (Thanks to Achraf Gazdar for this suggestion.)
-- Added a new demo application (in "testProgs") "testMPEG2TransportReceiver"
-  (which can receive the MPEG-2 Transport/RTP stream sent by "testMPEG2TransportStreamer")
-
-2012.01.13:
-- Fixed a bug in "StreamReplicator" that could cause 'replica deactivation' code to be executed more than once on the same replica,
-  with bad results.  (Thanks to Mike Stewart for reporting this.)
-- Updated the 'connect()'-result test in "RTSPClient.cpp" to check for EWOULDBLOCK as well as EINPROGRESS.
-  (Windoze systems can apparently return EWOULDBLOCK.  Thanks to Jeff Shanab for the suggestion.)
-
-2012.01.07:
-- Added a new "liveMedia" class "StreamReplicator".  This can be used to create an arbitrary number of 'replicas' of an input
-  stream.  We also added a new demo application "testReplicator" (in "testProgs") that demonstrates how to use this class.
-- Made a small change to "testRTSPClient" to account for the possibility of a RTCP "BYE" being received after having sent a
-  RTSP "TEARDOWN".
-
-2011.12.23:
-- Added a new demo application "testRTSPClient" to the "testProgs" directory.  If you're developing your own RTSP client
-  application (or want to embed RTSP client functionality into a larger application), then "testRTSPClient" is a better model
-  for this than "openRTSP" (because "openRTSP" was designed to be a standalone application, and is complex, with a large number
-  of options).
-- Fixed a bug in "MultiFramedRTPSource" that could cause an incorrect count of 'truncated' bytes to get reported if the receiving
-  sink's buffer size was too large to fit a complete incoming frame.  (Even worse, this bug might also cause a frame of invalid
-  data (that should have been truncated from the previous frame) to get delivered to the sink.)
-
-2011.12.20:
-- Fixed a "RTSPServer" bug in handling commands (such as "GET_PARAMETER" or "SET_PARAMETER") that have a "Content-Length:" header,
-  specifying extra bytes at the end of the message.  (The bug usually affected only RTP-over-TCP streams, not RTP-over-UDP.)
-  (Thanks to Jer Morrill for bringing this bug to our attention.)
-- We no longer make the 'groupsock' "reuseFlag" a static variable, in case the library is being accessed by multiple threads.
-  Instead, we now make it part of the "groupsockPriv" memory that's part of each "UsageEnvironment".
-  (Thanks to Michel Promonet for noting this issue.)
-
-2011.12.19:
-- Updated the "UserAuthenticationDatabase" destructor (in "RTSPServer.cpp") to delete each of the "password" strings that we
-  had previously allocated, thereby eliminating a memory leak.  (Thanks to Michel Promonet for noting this.)
-- Fixed a bug with the "#ifdef"s in "liveMedia/include/Locale.hh" (introduced in version 2011.11.27) - to ensure that the new
-  'xlocale' functions get used on Linux by default.
-  (Thanks to Remi Denis-Courmont for alerting us to this issue.)
-- Added a public member function "url()" to "RTSPClient", to get the RTSP URL.  (This might be useful for applications that
-  create multiple "RTSPClient" objects, and want to identify each one (e.g., when debugging).)
-
-2011.12.02:
-- Updated the "H264VideoStreamFramer" implementation to avoid triggering a "StreamParser" internal error, even for extremely
-  large NAL units.
-
-2011.11.29:
-- Updated "MPEG2TransportStreamMultiplexor" to change the Program Map PID from 0x10 to 0x30.  (Thanks to Chris Richardson,
-  who noted that PIDs below 0x30 are not valid for ATSC or DVB (although they may be valid for other Transport Streams).)
-- Updated the "NetAddressList()" constructor (for resolving names->IP addresses) to use "getaddrinfo()" - if available - rather
-  than the older, deprecated "gethostbyname()" function.  Also, the "ourIPAddress()" code (in "GroupsockHelper.cpp") now uses
-  the "NetAddressList()" code (if the initial multicast loopback method fails) to look up our host name.
-
-2011.11.28:
-- Use "uintptr_t" and "intptr_t" in a few places, where appropriate, to eliminate compiler warnings when compiing for 64-bits.
-  (Thanks to the VLC developers for this suggestion.)
-- When we create each (datagram or stream) socket, set the 'close on exec' property (if we can).
-  (Thanks to the VLC developers for this suggestion.)
-
-2011.11.27:
-- Updated the definition and implementation of the "Locale" class to - if possible - use "newlocale()" rather than "setlocale()".
-  The reason for this is that - on some systems - "setlocale()" may not be thread safe.
-  (Thanks to the VLC developers for this suggestion.)
-
-  IMPORTANT NOTE: Some systems - e.g., FreeBSD - do not have the "xlocale.h" header file that defines "newlocale()".
-  This means that we had to #ifdef the code, and continue to use the old implementation (using "setlocale()"),
-  if XLOCALE_NOT_USED is defined.  We have updated the "config.freebsd" configuration file to add "-DXLOCALE_NOT_USED=1"
-  to the compile flags.  However, if there are other systems that have "locale.h" but not "xlocale.h", then their configuration
-  files will need to be updated also.  If you find such a system, then please let us know (using the "live-devel" mailing list).
-- Updated the 'IP address finding' code in "groupsock/GroupsockHelper.cpp" to use "getaddrinfo()" - if available - rather than
-  the older, deprecated "gethostbyname()" function.
-  (Thanks to the VLC developers for this suggestion.)
-- Made the "RTSPClient" member function "setBaseURL()" protected rather than private, to allow subclass constructors to,
-  if they wish, construct and set the "rtsp://" URL in the body of their constructor, rather than in the call to the parent
-  "RTSPClient" constructor.  (If they want to do this, then they should first pass "NULL" as the "rtspURL" parameter in the
-  parent constructor.)
-  (Thanks to Jeff Shanab for this suggestion.)
-
-2011.11.26:
-- We no longer use "inet_ntoa()" (or "our_inet_ntoa()"), because it's not safe if called from multiple threads.
-  Instead, we now use our own "AddressString" class (defined in "groupsock/include/NetAddress.hh").  
-  E.g., instead of calling
-      our_inet_addr(addr)
-  we now call
-      AddressString(addr).val()
-  (Thanks to the VLC developers for noting the problem with "inet_ntoa()".)
-- Updated the "WindowsAudioInputDevice" code to make it work better with Unicode.  (Thanks to Jeff Shanab.)
-
-2011.11.20:
-- Fixed "RTCP.cpp" to not call a "BYE" handler (if one's set) until the very end of the incoming RTCP report handler member
-  function.  This is to allow for the (common) possibility of the "BYE" handler causing "this" to get deleted.
-  (Thanks to Jeff Shanab for noticing this.)
-- Updated some counters used by "MPEG2TransportStreamFramer" from "unsigned long" to "u_int64_t", to better support streams
-  that last for several days.  (Thanks to Tim Shackleton for this fix.)
-- Modified the "RTSPServer" code to properly handle weird RTSP clients that ask for RAW UDP streaming, but also specify two
-  port numbers in the "client_port=" part of the "Transport:" header.
-  (Thanks to "homepuh(at)yandex.ru" for this suggestion.)
-- Made a small change to the "VP8VideoRTPSource" implementation to reflect a minor change (the addition of the "K" header flag)
-  in the most recent IETF Internet-Draft (draft-ietf-payload-vp8-02.txt)
-- Added an #ifndef to "Boolean.hh" to deal with a Windows development environment that already defines (not "#define"s)
-  "True" and "False".  (Thanks to Jeff Shanab for this suggestion.)
-
-2011.11.08:
-- Added "VorbisAudioRTPSink" and "VorbisAudioRTPSource" for sending/receiving Vorbos audio RTP streams (based on RFC 5215).
-- Added "VP8VideoRTPSink" and "VP8VideoRTPSource" for sending/receiving VP8 video RTP streams.
-- Added support for extracting and streaming Vorbis audio tracks from Matroska (including WEBM) files.
-- Added support for extracting and streaming VP8 video tracks from Matroska (including WEBM) files.
-- Updated the "testOnDemandRTSPServer" and "LIVE555MediaServer" (source-code version only) applications to support streaming
-  from ".webm' files.
-- Fixed frame durations for data extracted from Matroska tracks that don't have a 'default duration'.
-- Fixed a memory leak in "RTSPClient::sendOptionsCmd()".  (Thanks to Gregg Mattinson for reporting this.)
-  (Note, however, that "sendOptionsCmd()" - and other functions in the synchronous interface - are currently deprecated.
-  Developers should now be using the asynchronous "RTSPClient" interface instead.)
-
-2011.11.02:
-- Updated the Matroska file parsing code to be more tolerant of extremely large frames (larger than the "StreamParser"
-  "BANK_SIZE"), and bogus data - to avoid tripping into parser 'internal errors'.
-- Added an #ifndef/#endif around the "NoReuse dummy;" statement in "RTSPServer.cpp".  This allows a developer - at compile time -
-  to allow a "RTSPServer" to run even if there is already a server using the same port.  (The only time you should do this is
-  if you anticipate restarting a server immediately after it exits, when the old server is still in a TIME_WAIT state, and
-  you're sure that no other server will ever be running with the same port number.)
-  (Suggestion by Chris Richardson.)
-
-2011.10.27:
-- Added support for seeking within streams that are demultiplexed from a Matroska file.
-- Modified the signatures of the virtual functions "ServerMediaSubsession::seekStream()"
-  and "OnDemandServerMediaSubsession::seekStreamSource()" to make the "seekNPT" parameter a "double&" rather than a "double".
-  This makes it possible for subclasses to make slight changes to the specified seek position when they implement seeking.
-  (This is necessary for seeking within Matroska-demuxed streams, because 'cue points' in Matroska files can be coarse-grain.)
-- Made a slight modification to "openRTSP" so that it sets the play duration correctly if the RTSP seek position changes as
-  a result of the RTSP "PLAY" command.
-- Changed the implementation of "ReorderingPacketBuffer" in "MultiFramedRTPSource" to use a doubly-linked list rather than
-  a singly-linked list.  This makes it more efficient to add new packets to the list after a packet loss has occurred
-  (while we wait for the 'reordering threshold' to expire).  (As always, most of the "ReorderingPacketBuffer" code gets called
-  only if a packet is lost (or reordered) in the input stream; not in the common case where all packets arrive in order.)
-  (Thanks to Ralf Schroeder for this suggestion.)
-- Made the implementation of the "our_random()" function more robust in case it's called concurrently by multiple threads.
-  (Of course, as explained in the FAQ, you should calling LIVE555 code from multiple threads only if each thread uses its own
-  "UsageEnvironment" and "TaskScheduler" object.)
-  (Thanks to Michael Margold for raising this issue.)
-- Fixed the way that you can specify - in the C/C++ preprocessor - that you want to use the system-supplied "random()" and
-  "srandom()" functions, rather than our own versions.  You can do this by defining USE_SYSTEM_RANDOM (e.g., in a "config." file).
-
-2011.10.18:
-- Improved "RTSPServer" support for subdirectories in "rtsp://" URLs (handling this better for non-compliant clients
-  that try to do a "SETUP" on agrregate URLs - when there is only a single subsession in the stream).
-
-2011.10.09:
-- Updated "RTSPServer" to better support multiple "/" characters (i.e., subdirectories) in URL - i.e., improving the modification
-  that we made back in version 2011.08.13.
-- Added an #include to "RTSPCommon.hh" to overcome a compilation problem that some
-  people had when using Borland development tools on Windows.
-
-2011.10.05:
-- Added support for RTSP/RTP streaming, on demand, from a Matroska ('.mkv') file.  The video, audio, and subtitle tracks (if any)
-  within the file are demultiplexed and streamed separately, via RTP.  We currently support H.264 video, AAC, AC3 and MP3 audio,
-  and text subtitles.  Sometime in the future, we will also support WEBM ('.webm') Matroska files, with VP8 video and Vorbis audio.
-  (We don't currently support seeking within the underlying  Matroska file (to implement RTSP seeking), but hope to do so
-  in the future.)
-  We also updated the "testOnDemandRTSPServer" demo application and the "LIVE555 Media Server" (currently, just the source-code
-  version - not the prebuilt application binary versions) to support streaming from '.mkv' files.
-- Added a new "RTPSink" subclass "T140TextRTPSink" to implement the 'text conversation' RTP payload format defined
-  by RFC 4103.  (Note, however, that the optional support for 'redundancy' - as described in that RFC - is not yet supported.)
-  We had already implemented the *reception* of this RTP payload format (using "SimpleRTPSource").
-  We use this payload format to stream 'subtitle' tracks from Matroska files.
-- Added a new configuration file "config.macosx-32bit" for generating 32-bit-only binaries for Mac OS X.
-  (Thanks to Robert Wolff for contributing this.)
-- Added a mechanism for (optionally) setting a callback function on a "RTPSink" - to be called if a send of data over
-  the sink's socket fails.  (Contributed by Ralf Globisch.)
-- Made a minor change to "MultiFramedRTPSink" to ensure that the "doSpecialFrameHandling()" virtual function gets called
-  even when sending RTP packets that contain a 0-length payload.
-- Fixed a minor memory leak in "H264VideoRTPSink" (the intermediate 'fragmenter' object wasn't getting deleted properly)
-
-2011.09.19:
-- We now set RTCP "RR" handlers for "PassiveServerMediaSubsession"s.  As a result, client sessions for multicast streams
-  will no longer time out - as long as the clients send RTCP "RR" packets which the server can receive.
-- Added a new public member function "setSPSandPPS()" to "H264VideoStreamFramer".  This lets you initialize a 
-  "H264VideoStreamFramer" (or a "H264VideoStreamDiscreteFramer") with SPS and PPS NAL units, in case these do not appear
-  early (or at all) in the input stream.
-- Made some performance improvements to "H264VideoFileServerMediaSubsession" and "MPEG4VideoFileServerMediaSubsession".
-- Fixed a bug in "H264VideoRTPSink" that could cause input source processing to not get stopped properly if the sink gets deleted.
-
-2011.09.02:
-- Updated "MultiFramedRTPSource" to more cleanly handle the situation where the sender's SSRC changes.  We don't yet support
-  streams that contain multiple SSRCs, but we can handle streams where the SSRC changes occasionally - e.g., because a multicast
-  source has been restarted.  (When the SSRC changes, we don't check the RTP sequence number of the first packet.)
-  (Thanks to Dmitriy Vasil'ev for bringing this issue to our attention.)
-
-2011.08.22:
-- Updated the "RTSPServer" code to handle a rare condition whereby "handleRequestBytes()" gets called recursively.
-  (This can happen only when we handle a "DESCRIBE" by re-calling the event loop (e.g., to wait for SDP parameters to
-  become available).)  If this happens, we need to make sure that we don't delete the "RTSPClientSession" object until we leave the
-  outermost call.  (Thanks to Vadim Kosarev for identifying the problem, and proposing the solution.)
-
-2011.08.20:
-- Modified the "MediaSession" and "MediaSubsession" classes to make it possible for developers to add support for receiving
-  new RTP payload formats, without having to modify the "MediaSession" or "MediaSubsession" code itself.  To do this, developers
-  define their own subclasses of "MediaSession" and "MediaSubsession".  For more details, see the comment near the top of
-  "liveMedia/include/MediaSession.hh"
-
-2011.08.13:
-- Updated the "RTSPServer" implementation to allow multiple "/" characters in the "rtsp://" URL.  This allows the 
-  "LIVE555 Media Server" to stream from subdirectories.  (Thanks to Mike Williams for this suggestion.)
-- Updated the "RTSPClient" code to more cleanly handle our server's (empty) responses to RTSP "GET_PARAMETER" commands.
-  (Thanks to Sebastien Escudier for noting this issue.)
-- Updated the "StreamParser" code to allow parsers to test whether we've seen EOF on the input stream.  We also modified
-  the "H264VideoStreamParser" code to use this, and fix a bug which was causing it to omit the last NAL unit in the input file.
-- Updated "JPEGVideoRTPSource" to generate correct (or at least more correct) JPEG headers when the input stream contains just
-  one quantization header.
-- Added a 'cast' to the "RTSPServerSupportingHTTPStreaming" code to overcome a compilation problem that some people may
-  have been seeing.
-
-2011.07.21:
-- Changed some member variables from "private:" to "protected:", to make subclassing easier.
-  (Requested by Mojtaba Nouri and James Stafford.)
-- Added a sanity check to the "RTP-over-TCP" handling code in "RTPInterface.cpp" to alleviate a strange condition (perhaps a bug)
-  that Jeremy Noring saw.
-
-2011.07.18:
-- Added a new, optional extension to "RTSPServer" - called "RTSPServerSupportingHTTPStreaming" - that supports streaming
-  to iPhones and iPads, using Apple's "HTTP Live Streaming" mechanism.  (For this to work, the files being streamed *must* be
-  MPEG Transport Stream files with H.264 video, and must also be 'indexed' (using the same 'index file' mechanism that we use
-  for 'trick play').  (The "live555MediaServer" source code has been updated to support this, as an option.)
-- Fixed a bug in the various "*Streamer" demo applications that stream from the same input file, in a loop.  We weren't calling
-  "stopPlaying()" on the "RTPSink" object at the end of each loop.  This bug directly affected only "testH264VideoStreamFramer",
-  but was theoretically an issue for other demo applications as well.  (Thanks to Sergey Kosov for reporting this.)
-
-2011.07.15a:
-- Removed some experimental new code that had accidentally been left in the "mediaServer" directory.
-
-2011.07.15:
-- Added a new class "ByteStreamMemoryBufferSource" to encapsulate a (static) memory buffer that's used as a byte stream data source.
-- Added a new class "TCPStreamSink" to encapsulate a writable TCP socket.  Being a "MediaSink", you can call "startPlaying()"
-  on it, to stream from a "FramedSource" to a TCP socket.  This class could be used to implement a HTTP server, for example.
-- Changed the signature of "ServerMediaSubsession::seekStream()" to take an additional "numBytes" return parameter.
-  This parameter is set to the number of bytes that will be streamed (or 0 if unlimited, or unknown).
-  (This can be used to implement a HTTP server, with a "Content-Length:" response header.)
-- Added a new virtual function "getStreamSource(streamToken)" to "ServerMediaSubsession".  This provides an easy way for
-  "RTSPServer" subclasses to access the media source for each stream, if desired.
-- Removed the classes "HTTPSink" and "MPEG1or2VideoHTTPSink".  They weren't being used anymore.
-
-2011.07.08:
-- Updated the RTSP server implementation to check the "Content-Length:" header - if present - in incoming requests.  Most commands
-  don't include extra data after the <CR><LF><CR><LF>, and thus don't need a "Content-Length:" header.  However, two commands
-  - GET_PARAMETER and SET_PARAMETER - include extra data, and thus have a "Content-Length:" header.  We now check this value,
-  to make sure that we've received all of the required data for each request.
-  (Thanks to Matt Schuckmannn for reporting this issue.)
-
-2011.07.06:
-- Modified the change to "ByteStreamFileSource" that we made in version 2011.06.12.  We now call "read()" only if we know that
-  the underlying file is non-seekable.  Otherwise - if the file is seekable - we call "fread()", as we did prior to 2011.06.12.
-  (Reading from the file using "read()" doesn't work properly if we're also seeking within the file.
-  This is why Transport Stream 'trick play' got broken by 2011.06.12, but should be working again now.)
-
-2011.07.05:
-- Updated "MPEG2IndexFromTransportStream" to make "MPEG2TransportStreamIndexer" more robust when it sees PCR timestamps decreasing
-  in time (something that shouldn't happen).  (Thanks to Mojtaba Nouri for providing an example Transport Stream file that
-  illustrates this.)
-- Fixed a bug in "MPEG2IndexFromTransportStream" that could cause the "MPEG2TransportStreamIndexer" utility to hang when it
-  saw bogus data appear before a MPEG system code.  (Thanks to Julian Scheel for reporting this issue.)
-- Modified the "BasicTaskScheduler" implementation to add "dumySocket" only to "fReadSet", but not to "fWriteSet" or "fExceptionSet".
-  This should continue to work around the Windows bug (where "select()" returns an error if no sockets are present in "fReadSet"),
-  but without causing "select()" to keep returning unnecessarily (chewing up CPU).  (Thanks to Matt Schuckmann for reporting this.)
-- We now make all files in the source code distribution read-only, by default.  Developers can, of course, change the permissions
-  of any of these files to make them writeable, but having them be read-only by default helps emphasize that modifying the
-  supplied source code is discouraged.  Instead, developers should - if possible - extend the supplied source code using
-  C++ subclassing.  For more information, see the FAQ: http://www.live555.com/liveMedia/faq.html#modifying-and-extending
-  
-
-2011.06.16:
-- Updated "AC3AudioRTPSink" and "AC3AudioRTPSource" to conform to RFC 4184, which defines the RTP payload format for AC-3 audio.
-  Previously, we were using a different, incompatible payload format (that had been defined by an initial draft document, but
-  which differed from that defined in the final RFC.  Unfortunately, this means that older clients that use our code
-  - including existing binary versions of VLC and MPlayer - will no longer be able to play AC-3/RTP streams from our server
-  (until they are rebuilt using this newest version of our library).
-- Updated "AC3AudioStreamFramer" - and added a new class "AC3AudioFileServerMediaSubsession" - to support streaming from an AC-3
-  audio file.  We also added this support to the "testOnDemandRTSPServer" demo application, and to the "LIVE555 Media Server"
-  (currently just the source code; not the prebuilt binary versions).
-  (Thanks to Ashwani Kathuria for suggesting this.)
-- Moved the definition of "class StreamState" from "OnDemandServerMediaSubsession.cpp" to "OnDemandServerMediaSubsession.hh".
-  Even though "class StreamState" is used only internally, in the implementation of "OnDemandServerMediaSubsession", moving its
-  definition to the header file makes it possible for subclasses of "OnDemandServerMediaSubsession" to access it.
-
-2011.06.14a:
-- Removed some junk (debugging) files that had accidentally been left in the "testProgs/" directory.
-
-2011.06.14:
-- Fixed a race condition in "H264VideoFileServerMediaSubsession" and "MPEG4VideoFileServerMediaSubsession" that could have been
-  triggered when two separate clients tried to stream the same file concurrently.  (Thanks to Bruno Abreu for reporting this.)
-- Fixed a minor bug in "Authenticator::operator=()": we were not freeing the LHS object's memory before doing the
-  assignment.  (Thanks to Sawan Das for noting this.)
-- Updated "config.iphoneos" to change LIBRARY_LINK from "ar cr " to "libtool -s -o ", just as we did for "config.macosx" in the
-  previous release.
-
-2011.06.12:
-- Updated the RTCP implementation to (if we're a SSM source) reflect incoming RTCP packets back to the multicast group
-  *only* if the packet originated from another host.  This means that we won't reflect packets that come from other
-  processes on our own host.  The reason for this is that we can't reliably distinguish such packets from packets that were
-  actually looped back from us.  (We must not 'reflect' such packets, otherwise we risk a packet storm.)
-- Updated the "ByteStreamFileSource" code to make the underlying socket non-blocking.  We also read data using "read()"
-  rather than "fread()", to eliminate blocking (if READ_FROM_FILES_SYNCHRONOUSLY is not defined).  (This change should
-  affect only reading from pipes, not regular files.)  (Thanks to Tyson Wiser for noting this issue.) 
-- Updated the "DelayQueue" destructor to make sure that any remaining delay queue entries are destroyed.
-  (Thanks to "Mr. Xiao" and Luke Kucalaba for (independently) reporting this issue.)
-- Updated "config.macosx" to change LIBRARY_LINK from "ar cr " to "libtool -s -o ", because someone reported that "ar"
-  didn't work for them.
-- Added support for receiving the "audio/EAC3" RTP payload format (which is handled the same way as "audio/AC3").
-  (Thanks to Gregory McGarry for the patch.)
-
-2011.05.25:
-- Fixed a bug in "RTSPClient" which was causing clients to crash if servers returned a 401 error code, but without a
-  "WWW-Authenticate:" header.  (Thanks to Sebastien Escudier for reporting this.)
-
-2011.03.14:
-- Updated the "MPEG2TransportFileServerMediaSubsession" to use the "streamDuration" parameter (if >0.0) to limit
-  the number of Transport Packets that are streamed from the source file.  (This happens only if the file is indexed.)
-  This allows the server to implement finite RTSP ranges for such streams.
-- Fixed a minor bug in "OnDemandServerMediaSubsession" if "reuseFirstSource" is set.  (Thanks to Andreas Gaer for noting this.)
-
-2011.03.06:
-- Changed the implementation of "RTSPClient::teardownMediaSession()" and "RTSPClient::teardownMediaSubsession()"
-  (i.e., in the old, now-deprecated synchronous "RTSPClient" interface) to not wait for, or handle, a response to the
-  RTSP "TEARDOWN" command.  This avoids the client blocking indefinitely if the server (or its connection) happens to die before
-  the RTSP response gets sent.
-  (Note, however: All RTSP client applications should be updated to use the new, asynchronous interface.  The old synchronous
-  interface will not be supported indefinitely.)
-
-2011.03.05:
-- Changed the signature of the "OnDemandServerMediaSubsession::seekStreamSource()"
-  virtual function to add a "streamDuration" field.  This field (if >0.0) tells
-  the implementation how much data to stream before ending with EOF.
-  Our RTSPServer implementation now uses this to implement finite RTSP ranges
-  (as specified in the "Range:" header).  As with seeking, only some codecs currently
-  implement this: MP3 audio, WAV audio, and DV video.
-- We now support streaming from IMA ADPCM ("DVI4") WAV files.
-- When streaming MP3 audio files or indexed MPEG Transport Stream Files, we now compute a more accurate bitrate estimate
-  (for use in computing RTCP packet frequencies).
-
-2011.01.24:
-- Fixed a bug that was accidentally introduced in version 2011.01.10, and which crashes VLC (when VLC is used to play a
-  "rtsp://" URL).  To avoid the bug, VLC should therefore use this version or later.
-
-2011.01.21:
-- Fixed a bug in "H264VideoStreamFramer" that was introduced in the last release.
-  (This affected the "testH264VideoToTransportStream" demo application.)  (Thanks to Dunling Li for reporting this.)
-- Fixed a minor syntax bug in "H264VideoStreamFramer.cpp" which (fortunately) had not been an actual problem.
-  (Thanks to Guillaume Le Neindre for the report.)
-
-2011.01.20:
-- Added a new demo application "testH264VideoToTransportStream", which takes a H.264 Video input file (named "in.264"),
-  and converts it to a Transport Stream file (named "out.ts").
-  (Note that for this conversion to work properly, the input H.264 file must contain sufficient timing information for us to be
-  able to deduce the frame rate.)
-  (Thanks to Dunling Li for this suggestion.)
-- Changed our RTSP server implementation so that the "SET_PARAMETER" command succeeds (but does nothing) by default.
-  (Subclasses can redefine its behavior, if necessary.)  We also now support the special "*" URL, which designates an
-  operation on the entire server.  (The only commands for which this is allowed are "OPTIONS", "GET_PARAMETER" and "SET_PARAMETER".)
-  (Thanks to Jeremy Noring for noting that some clients need this.)
-
-2011.01.19:
-- Fixed a bug in "OnDemandServerMediaSubsession" that was causing unicast RTSP/RTP
-  servers to sometimes omit sending the very first packet of a stream.  (This seemed
-  to occur only for servers running on Windows.)
-
-2011.01.10:
-- Updated "RTSPClient" so that the new asynchronous interface can handle RTSP URLs that contain a "<username>:<password>@"
-  before the server host name/address.  This had been supported in the old synchronous interface, but when we implemented the
-  new asynchronous interface, we had forgotten to implement it there as well.
-- Made a change to the implementation (but not the default behavior) of "RTSPServer" to allow for the possibility of a subclass
-  implementing HTTP streaming (using the same HTTP port that we use to support RTSP-over-HTTP tunneling).
-
-2011.01.06:
-- We added support for receiving the RTP payload formats "audio/L20", "audio/L24" and "audio/DAT12", as defined in RFC 3190.
-  We also recognize the new "fmtp:"-line parameters "emphasis" and "channel-order" that this RFC also defines.
-  (Thanks to Maciej Szlapka for noting that these payload formats had not previously been supported.)
-
-2011.01.05:
-- Made a small change to the sanity check introduced to "MultiFramedRTPSink" and "BasicUDPSink" in version 2010.12.05 to
-  eliminate the possibility of small extra delays accumulating over time.  (Thanks to Warren Young for raising this issue.)
-- Made a small change to the 'magic values' that are used to implement the "esds" atom for MPEG-4 video in "QuickTimeFileSink".
-  (I have no idea what these values are supposed to do, but Stu Tomlinson reports that the new values work better for him.)
-
-2010.12.31:
-- We now support 'trick play' operations (seeking, fast-forward, reverse play) on MPEG Transport Stream files that contain
-  H.264 video (rather than just MPEG-2 video, as previously).  To support this, the index file format has been extended in a
-  backwards-compatible way, so that existing index files (for MPEG-2 video Transport Streams) will continue to work as before.
-  New versions of the "MPEG2TransportStreamIndexer" and "testMPEG2TransportStreamTrickPlay" utilities - and the
-  "live555MediaServer" - have also been released.
-- Fixed a bug in the definition of the "profile_level_id" field in "H264VideoRTPSink".  (Thanks to Geoff Cleary for noting this.)
-- Change the parsing of RTSP "Range:" headers to allow parameters of the form "clock=" or"smtpe=".  (However, we currently don't
-  interpret parameters of this form; instead, we just ignore them.)
-  (Thanks to Sebastien Escudier for this suggestion.)
-- Fixed "openRTSP" to properly reset internal state before repeating the playing of a stream (if the '-c' (play continuously))
-  option is used.  (Thanks to Anon Sricharoenchai for noting this.)
-
-2010.12.14:
-- Oops - there was a serious bug in the 'event trigger' implementation in the previous release.
-  IMPORTANT: You should upgrade to this new version if you plan to use the 'event trigger' mechanism!
-  (Thanks to "P.J." for noticing the bug in the previous version.)
-
-2010.12.11:
-- Added a new 'event trigger' mechanism to "TaskScheduler".  This makes it possible
-  to define new events that can be handled within the event loop.  Unlike other
-  library functions, events can be 'triggered' (i.e., fired) from a separate thread.
-  This makes it easier to implement input devices than the old 'watchVariable'
-  mechanism (which remains).
-  Also, the "DeviceSource" class - which is a model for how to implement an input
-  device class - has been significantly improved.  It now uses the new 'event trigger'
-  mechanism.  Also, more of it has been implemented, making it clearer where new code
-  needs to be written. 
-
-2010.12.05:
-- Significantly improved our support for streaming H.264 video.  In particular, "H264VideoStreamFramer"
-  and "H264VideoStreamDiscreteFramer" (a new class) act like their corresponding MPEG4 versions: "H264VideoStreamFramer" reads
-  a H.264 Video Elementary Stream byte stream (e.g., from a file), and "H264VideoStreamDiscreteFramer" reads discrete H.264 video
-  NAL units (i.e., one-at-a-time), e.g., from a H.264 video encoder.  (Note that developers no longer need to subclass
-  "H264VideoStreamFramer".)  We also added a new demo application - "testH264VideoStreamer" - for streaming from
-  a H.264 Elementary Stream Video file via multicast.  "testOnDemandRTSPServer" and "live555MediaServer" were also updated to
-  stream H.264 Video Elementary Stream files.
-- Added a sanity check to "MultiFramedRTPSink" and "BasicUDPSink" to allow for the possibility of the system clock jumping ahead
-  in time, and thereby messing up the calculation of how long to wait before sending the next packet.
-  (Thanks to Anders Chen for noting this issue.)
-- Fixed bugs in "AMRAudioRTPSource" and "QCELPAudioRTPSource" that might sometimes cause an event handler to try to reference
-  objects that had already been deleted.  (Thanks to David Cailliere for detecting the problem with "AMRAudioRTPSource";
-  it turns out that "QCELPAudioRTPSource" had the same problem.)
-
-2010.11.17:
-- Added new a member function "setAuthenticationDatabase()" to "RTSPServer".  This allows a server's manager to change
-  (or disable) authentication at runtime.  (Thanks to Jeremy Norling for suggesting this functionality.)
-
-2010.11.10:
-- Fixed "openRTSP" to eliminate a recursive call to "shutdown()" if we receive a RTCP "BYE" while in the middle of doing
-  a RTSP "TEARDOWN" command.  (Thanks to David Cailliere for noting this issue.)
-
-2010.11.09:
-- The previous release had accidentally included some experimental changes to "H264VideoStreamFramer" that were not (yet)
-  intended to see the light of day.
-
-2010.11.08:
-- Fixed a minor problem with RTSP-over-HTTP support in "RTSPClient" that was causing some servers to complain due to the
-  "CSeq:" header value not being incremented properly.  (Thanks to Kamil Dobkowski for the report.)
-
-2010.11.04:
-- Backed out and corrected the change to "RTSPClient" that we made in version 2010.10.22.  It turns out that existing RTSP-over-HTTP
-  servers that return "401 Unauthorized" in response to the HTTP "GET" *do*, in fact, want clients to resend the "GET" command
-  (with a filled-in "Authorization:" header).  However, at least one such server out there closes the TCP connection after
-  sending back the "401 Unauthorized" response, so we need to send the second "GET" command using a new TCP connection.
-  (Thanks to Kamil Dobkowski for providing access to a server that illustrated this problem.)
-
-2010.10.28:
-- Updated "JPEGVideoRTPSource" amd "JPEGVideoRTPSink" to support optional "Restart Marker Headers" in the outgoing RTP packet.
-  (We already supported such headers in *incoming* JPEG/RTP packets ("JPEGVideoRTPSource").)
-  If "type()" (defined by the "JPEGVideoSource" subclass) returns a value in [64,127], then the "JPEGVideoSource" subclass must
-  also redefine "restartInterval()" to return a non-zero value.
-  (Thanks to Cristiano Belloni for suggesting this addition.)
-
-2010.10.23a:
-- Fixed a bug in the way that "RTSPClient" generates ephemeral RTP/RTCP port number pairs for use when receiving unicast
-  RTSP/RTP streams.  The RTP (even) port was guaranteed not to be in use elsewhere on the same host, but that guarantee was not
-  necessarily true for the RTCP (next, i.e. odd) port.  This version fixes this.
-
-2010.10.23:
-- Our server implementation of "RTSP-over-HTTP tunneling" now allows for the possibility of receiving data from the 
-  (Base-64-encoded) initial RTSP command at the same time that we receive the HTTP "POST" command.  (This is a possibility because
-  the client does not wait for a response to the "POST" - because there isn't one.)
-
-2010.10.22:
-- Made a minor modification to the way that "RTSPClient" does "RTSP-over-HTTP tunneling".  If the initial "GET" request
-  returns "401 Unauthorized", then we don't resend it (with an "Authorization:" header).
-  Instead, we continue, as normal, sending the subsequent HTTP "POST" (with an "Authorization:" header).
-  It's not clear (from the limited documentation on "RTSP-over-HTTP tunneling") which behavior is 'correct', but at least some
-  servers seem to handle the new approach better.
-
-2010.10.20:
-- Made the implementation of 'RTSP-over-HTTP tunneling' in the RTSP server more tolerant of certain buggy clients.
-  (Thanks to Cristiano Belloni for this suggestion.)
-
-2010.10.15:
-- Added server support for RTSP/RTP-over-HTTP tunneling.  We added a new "RTSPServer" member function
-      Boolean setUpTunnelingOverHTTP(Port httpPort);
-  to (attempt to) set up tunneling on the specified HTTP port number.
-  We also updated the "testOnDemandRTSPServer" and "live555MediaServer" applications to try to set up HTTP tunneling
-  on port 80, then port 8000, and then finally port 8080.
-
-2010.10.06:
-- Made a small change to "RTSPClient" to make it better handle RTSP servers that
-  erroneously do not include "CSeq:" lines in their responses.
-  (Thanks to Sebastien Escudier for this suggestion.)
-- Made a minor update to "RTSPClient" to better handle any error in the HTTP "GET" command (if RTSP-over-HTTP tunneling
-  is being used).
-- Updated the "timestampString()" function in "groupsock/GroupsockHelper.cpp" to allow for the possibility of "ctime()" returning NULL.
-- Removed the (never fully implemented) "RTSPOverHTTPServer" class.
-  Instead, RTSP-over-HTTP tunneling will be implemented within the existing "RTSPServer"
-  code, as that seems to be easier than using a separate class.
-
-2010.09.25:
-- Disabled the code for "Groupsock::multicastSendOnly()", because it was apparently causing SSM multicast packets to not be
-  received by other applications on the same host (at least, for some systems).
-
-2010.09.23a:
-- Backed out the "RTSPServer" change that was in the previous release, because of a report that it doesn't work.
-
-2010.09.23:
-- Updated "H264VideoFileSink" to take an optional "sprop parameter string" parameter as input.  If present, this string is
-  decoded, and the resulting data (SPS/PPS NAL units) is prepended to the file.
-  Also, updated "openRTSP" to call "MediaSubsession::fmtp_spropparametersets()", and pass this string when creating a
-  "H264VideoFileSink".
-- Updated "RTSPServer" to ensure that we transmit RTP and RTCP packets over the same interface that is used by the requesting client
-  (in case the server is multi-homed).  (Thanks to David Stegbauer for this suggestion.)
-
-2010.09.22:
-- Added a new virtual function "internalError()" to "UsageEnvironment" and "TaskScheduler".  This function is called
-  a small number of times within the library code when an unexepected, 'should not occur'-type error condition occurs.
-  The default implementation of this function calls "abort()", but subclasses can, of course, redefine this, if desired.
-- Updated "RTSPClient::parseTransportParams()" to accept either "port=<num1>-<num2>" or "port=<num>".
-  (The RTSP specification is ambiguous about whether or not both are allowed.)
-- Made sure that calls to "ntohl()" and "htonl()" take (and return) "u_int32_t" rather than unsigned", for improved portability.
-  (Thanks to Anon Sricharoenchai for this suggestion.)
-
-2010.09.10:
-- Added a sanity check to "MediaSubsession::getNormalPlayTime()" so that we ignore any old packet that might
-  mess up the initial computation of the presentationTime-to-NPT offset following the arrival of new "RTP-Info" data.
-  This should never happen with our servers (though John Shao Fa - who proposed this check - claims to be seeing it).
-  We add the check, however, to protect against other servers that might be messing up.
-
-2010.09.03:
-- Made sure that various calls to "TaskScheduler::scheduleDelayedTask()" are called with a "int64_t" 'delay in microseconds'
-  parameter, to avoid possible integer underflow if the system clock gets set back in time.
-  (Thanks to Sebastien Escudier for reporting this problem.)
-
-2010.08.31:
-- Fixed some problems in the way that we implement RTP/RTCP-over-TCP streams that were showing up when we have more than one
-  such stream sharing the same input source ("reuseFirstSource" == True).  (Thanks to John Tam for reporting this.)
-
-2010.08.22:
-- Updated the "DarwinInjector" class to use the new, asynchronous "RTSPClient" interface.
-
-2010.07.29:
-- Fixed a bug in RTP-over-TCP that was sometimes causing a socket to (attempt to be) read after it had already been closed.
-  (Thanks to Wilton @ Invent Vision for reporting this bug.)
-- Fixed some bugs in the way that RTP reception statistics were being generated and reported.  (Thanks to David Cailliere.)
-- Added a new config file "config.linux-64bit" that should work better than "config.linux" for building for 64-bit Linux systems.
-
-2010.07.13:
-- Updated the "openRTSP" and "playSIP" applications to use the new asynchronous "RTSPClient" interface.
-- Made the "readSocket()" routine more bullet-proof against Windows brain damage that was apparently causing problems with
-  Windows RTSP clients that do RTP-over-TCP.
-  (Thanks to Kamil Dobkowski for this suggestion.)
-
-2010.07.07:
-- Fixed a problem with RTP-over-TCP reception that was causing some RTP-over-TCP streams to not be received properly.
-  All RTSP client applications that can request/receive RTP-over-TCP should upgrade to this new version.
-  (Thanks to Kamil Dobkowski for providing a server that we could use to debug the problem.)
-- Reinstated the functionality of the "forceMulticastOnUnspecified" flag in the "RTSPClient" "SETUP" command.
-  (This functionality had temporarily been disabled, because I wasn't sure that it was still used by anyone.
-  But apparently it is.)
-
-2010.06.22:
-- Fixed another bug in the new "RTSPClient" implementation (thanks to Sebastien Escudier); we were not recognizing
-  "npt=now-" in "Range:" headers.
-- Fixed a bug in "openRTSP" (reported by Kenneth Ljungh).  We were closing output files before issuing a RTSP "TEARDOWN" command.
-  This problem was exposed only with the new "RTSPClient" implementation, because it reenters the event loop (thereby possibly
-  handling incoming RTP packets) after the sending of the "TEARDOWN", before it gets handled and responded to.
-  We have now fixed the "openRTSP" code to not close output files until after the RTSP "TEARDOWN" has been completed.
-
-2010.06.18:
-- Fixed a bug in the new "RTSPClient" implementation (reported by Sebastien Escudier) - that was causing problems
-  when streaming from some RTSP-enabled video cameras.
-
-2010.06.16a:
-- Made "RTSPClient"s parsing of "Transport:" headers more bullet-proof against those sent by some servers
-  (including, apparently, some recent versions of VLC's built-in RTSP server) that include a "client_port=" field,
-  but no "server_port=" field.  (In this case, we assume that the server port is the same as the client port.)
-
-2010.06.16:
-- Fixed another bug in the new "RTSPClient" implementation of "GET_PARAMETER".
-  (Thanks to Denis Charmet for reporting this.)
-- Made "RTSPServer::RTSPClientSession::handleAlternativeRequestByte1()" more bullet-proof against an alleged bug noted by 
-  Jeremy Noring.  (The actual bug hasn't been located, but this change apparently stops it from causing problems.)
-
-2010.06.15:
-- Removed the "blockUntilReadable()" function, because it's no longer needed, now that all socket reads are asynchronous.
-  This means that "readSocket()" no longer calls "select()", which should improve the performance of applications.
-- Improved the processing of RTP/RTCP/RTSP-over-TCP (possibly fixing some bugs in the process).
-- Fixed bugs in the new "RTSPClient" implementation of "GET_PARAMETER" and "SET_PARAMETER".
-  (Thanks to Denis Charmet for reporting this.)
-
-2010.06.11:
-- Fixed some potential memory access errors in the previous version of "RTSPClient".
-- Removed code from "RTSPClient" that was supposed to deal with buggy (Microsoft?) servers, but which in reality was causing
-  clients to not know the duration of time-bounded streams properly.
-- Modified the new RTSP client implementation of "RTSP-over-HTTP" to make it more consistent with the old implementation.
-  (Doug Porter reported a problem with the implementation in release 2010.05.29.)
-- "AMRAudioSource" (and therefore its subclasses also) were not redefining the "MIMEtype()" virtual function.  Fixed this.
-  (Thanks to Adam Mich for reporting this.)
-- Fixed a minor problem that was causing some "UsageEnvironment"-allocated tables not to get deleted under some circumstances.
-
-2010.05.29:
-- Made a major change to the interface and implementation of "RTSPClient", to make it perform operations asynchronously
-  - i.e., without blocking.  Each operation that performs a RTSP command now takes a 'response handler' function as parameter.
-  The operation returns immediately, but the 'response handler' function will get called later, when a response arrives
-  (or if an error occurs).
-  For backwards compatibility, the old 'synchronous' interface still remains, and is implemented using the new 'asynchronous'
-  interface.  (However, the old 'synchronous' interface should not be used for new applications, and it will likely be removed
-  in a few months.)
-  For now, the demo application "openRTSP" still uses the old interface, but will be rewritten over the next few weeks to use the
-  new "RTSPClient" interface.
-- Modified the "TaskScheduler" definition yet again, because it was too complicated.  There's now just one virtual function
-  for setting/clearing socket handlers:
-  "virtual void setBackgroundHandling(int socketNum, int conditionSet, BackgroundHandlerProc* handlerProc, void* clientData) = 0;"
-  where "conditionSet" is a combination of SOCKET_READABLE, SOCKET_WRITABLE, and SOCKET_EXCEPTION.
-  For backwards compatibility, the existing "turnOnBackgroundReadHandling()" and "turnOffBackgroundReadHandling()" functions
-  are retained, but are now implemented using "setBackgroundHandling()".
-  See "UsageEnvironment/include/UsageEnvironment.hh" for details.
-
-2010.05.28:
-- Updated the previous revision of "TaskScheduler" to add two more new virtual functions
-  "turnOnBackgroundExceptionHandling()" and "turnOffBackgroundExceptionHandling()",
-  because it turns out that Windows needs them for checking on a failed remote "connect()"
-  (behaving differently from Posix, which requires only select()ing the socket for
-  writing, not an error).
-
-2010.05.27:
-- Updated "TaskScheduler" (and our supplied example subclass "BasicTaskScheduler") to include new virtual functions
-  "turnOnBackgroundWriteHandling()" and "turnOffBackgoundWriteHandling()".  These are the same as the "Read" versions,
-  except that they are for checking when a socket becomes writable.  (They will be used to implement the new, upcoming
-  'asynchronous' implementation of "RTSPClient".)
-  We also modified the signature of "setResultErrMsg()" to take an optional "err" parameter.  (If  non-zero, this will be used
-  instead of "getErrno()".) 
-- Added a "config.iphoneos" (for cross-compiling on a Mac for the iPhone).  (Thanks to Mark Vasilkov.)
-
-2010.04.09:
-- Fixed a bug in the way that "AMRAudioRTPSource" reimplements "hasBeenSynchronizedUsingRTCP()".
-  (Thanks to Ralf Globisch for reporting this bug.)
-- Increased "SegmentQueueSize" in "MP3ADU.cpp" from 10 to 20, to allow for some unusually-VBR MP3 files that neeed this.
-  (Thanks to Dirk Raffel for reporting this problem.)
-- Changed the implementation of "parseRangeHeader()" in "RTSPCommon.cpp", in preparation for upcoming changes to "RTSPClient".
-
-2010.04.01:
-- Fixed the "openRTSP" code so that it no longer restricts the play time duration (using the "-d" option), because there is no
-  no longer any practical limit on the duration that gets passed to "TaskScheduler::scheduleDelayedTask()"
-  (because it is microseconds in 64 bits).
-  (Thanks to Brad Thomas for this suggestion.)
-- Removed some obsolete (and unused) code from the "RTSPClient" implementation, in preparation for a major reworking of this code.
-
-2010.03.16:
-- Made more improvements to "QuickTimeFileSink".  (Thanks to Wolfgang Breyha.)
-
-2010.03.15:
-- Fixed a bug in the Transport Stream file indexing mechanism that was preventing index files from properly being generated
-  for some Transport Stream files.  (We sometimes weren't analyzing Program Association Tables correctly.)
-- Removed the hack that we introduced in version 2009.11.27, because we have now fixed the bug that made that necessary.
-- Removed the "RTPOverTCP_OK" hack from "RTPInterface.cpp", because it's no longer needed.
-
-2010.03.14:
-- Fixed the RTSP server implementation so that - when streaming via RTP-over-TCP - it can now handle RTSP commands after the
-  first "PLAY".  (This fixes a long-standing bug.)
-- Updated "QuickTimeFileSink" to support writing files larger than 2GB.  Also fixed a bug involving "esds" atoms for MPEG-4.
-  (Thanks to Wolfgang Breyha for this patch.)
-- Fixed a bug in the way that RTCP "SDES" items are constructed.  (Thanks to Jeremy Norling for bringing this to our attention.)
-- Added a sanity check to the string version of "BasicUsageEnvironment::operator<<()", to check for a NULL string input.
-  (Thanks to Paulo Rogerio Panhoto for this suggestion.)
-
-2010.03.08:
-- Fixed a rare bug that could sometimes cause RTSP clients to reuse the same (ephemeral) port number.
-  (Thanks to Andro Debevere for reporting this.)
-- Made changes to "config.armlinux", suggested by Rafael Carre.
-- Removed a "|| defined(__CYGWIN32__)" test from "groupsock/GroupsockHelper.cpp", because it's no longer needed.
-  (Cygwin has apparently now fixed the bug that made that necessary.)
-  (Thanks to Tatterdemalian Anzulovic for reporting this.)
-
-2010.02.10:
-- Fixed a possible 1-byte overflow in "RTSPClient::setupMediaSubsession()".  (Thanks to Martin Bonnin for reporting this.)
-- Make "parseCLine()" a bit more robust against certain technically illegal, but still parseable SDP "c=" lines.
-  (Thanks to Aurelien Nephtali for this suggestion.)
-
-2010.02.09:
-- Fixed the way that "RTSPClient" operations handle the "timeout" parameter.
-  We now make the socket blocking afterwards (having made it non-blocking beforehand).
-  (Thanks to Jeremy Noring for this patch.)
-
-2010.01.22:
-- Changed the implementation of "Socket::changePort()" once again, beause it was reported that the change made in version
-  2010.01.15 didn't work.  Note, however, that this change also introduces a new function
-	     virtual void moveSocketHandling(int oldSocketNum, int newSocketNum) = 0;
-  to the "TaskScheduler" API.  We have implemented this for "BasicTaskScheduler".  If you implement your own subclass of
-  "TaskScheduler", then you will need to implement this new function as well.
-
-2010.01.16:
-- Added ""#include <stdio.h>" to "groupsock/NetInterface.cpp".  This was tripping up some people.
-  (Thanks to Ben Hutchings for noticing this.)
-
-2010.01.15:
-- Changed the implementation of "Socket::changePort()" to call "bind()" directly, rather than closing the socket and reopening a
-  new one.  That old implementation sometimes caused the socket number to change, which messed up our event loop.
-  (Thanks to Rob Krakora for noticing this.)
-- Improved the implementation of DV video streaming (introduced in the previous release) - in particular,
-  to implement "DVVideoRTPSource".
-
-2010.01.13:
-- Added support for streaming/receiving DV video via RTP (using the RTP payload format defined in RFC 3189.
-  (Thanks to Ben Hutchings for his help.) 
-
-2010.01.11:
-- Increased the default "FileSink" buffer size in "openRTSP" from 20000 to 100000, because the previous limit was being bumped into
-  too many times.
-- Added #include "GroupsockHelper.hh" to "DVVideoStreamFramer.cpp", because it defines "gettimeofday()".
-
-2010.01.09:
-- In the various demo applications (in "testProgs/"), we changed the calls to "abort()" back to "exit(1)", because we want
-  "abort()" to be used only for serious (unexpected) errors; not things like bad command-line arguments.
-- Updated the RTSP server implementation to make session ids random (and 8 (hex) digits long), to conform to the RTSP specification.
-  (Thanks to Guy Bonneau for this suggestion.)
-
-2010.01.07:
-- Fixed a bug in "parseGeneralConfigStr()" (it was mistakenly returning an extra byte).
-- A few places in the code we called "exit()" if we encountered an unexpected error.  By request, these have now been changed to
-  "abort()". 
-- Made the "fSDPLines" member variable (in both "OnDemandServerMediaSubsession" and "PassiveServerMediaSubsession") "protected"
-  rather than "private".  This allows subclasses to - if they wish - delete and NULL "fSDPLines" each time a client connects, in
-  case the stream's SDP parameters have changed.
-
-2009.11.27:
-- Temporarily hacked the RTSP server code to not include "GET_PARAMETER" as an available option in the response to the "OPTIONS"
-  command.  This will stop VLC from using "GET_PARAMETER" as a client 'liveness' indicator.  This is something that we don't
-  need, because we already use clients' RTCP "RR" packets as a 'liveness' indicator, and because sending "GET_PARAMETER" over a
-  RTP-over-TCP session causes problems with our current implementation.  (This hack will be removed when we fix the problem with
-  RTP-over-TCP.)
-
-2009.11.12:
-- Made "BasicTaskScheduler::DelayQueue.cpp" more robust against an apparent compiler error on some platforms (e.g., Mac OS X)
-  that was leading to "select() fails: Invalid argument" errors.
-- Added a new compilation configuration file: "config.avr32-linux".  (Thanks to Jorge Munoz Castiner.)
-- Made some minor changes to "groupsock/GroupsockHelper.cpp", "liveMedia/InputFile.cpp" and "liveMedia/OutputFile.cpp"
-  to make these files compile (or compile better) for WinCE.  (Thanks to Pierre Ynard for these fixes.)
-
-2009.09.28:
-- Added an optional "timeout" parameter to "DarwinInjector::setDestination()".  (Suggested by Jeremy Noring.)
-- Added support for receiving the "text/T140" RTP payload format.  (Suggested by Pierre Ynard.)
-
-2009.09.21:
-- Added patches proposed by Ben Hutchings to (i) improve the top-level Makefile; (ii) build better static libraries (on
-  Linux, FreeBSD, and Mac OS X); (iii) have RTSP servers set "b=AS:" lines in their SDP (and set an appropriate socket send buffer
-  size), and (iv) have RTSP (and other SDP) clients interpret the "b=AS:" line (if present) to set the socket receive buffer.
-- Changed two source files in the "groupsock" project to use the (current standard) <sstream> #include file.
-- Increased RTSP_PARAM_STRING_MAX to 200 (request by Stuart Rawling)
-
-2009.09.04:
-- Fixed "BasicTaskScheduler"s workaround to a Windows bug (thanks to Vityusha Vinokurov).
-- Fixed "DelayQueue::synchronize()" to allow for the possibility of the system clock being reset back in time.
-  (Thanks to Sebastien Escudier for pointing out this issue.)
-- Made "H264VideoRTPSink::auxSDPLine()" "protected:" rather than "private:" (following a request from Stuart Rawling)
-
-2009.07.28:
-- Updated "QuickTimeFileSink" to add a "stss" atom for video streams, following a suggestion by Gerardo Ares.
-  (At present we just 'guess' which video 'samples' (frames) are 'key frames', so this might not work properly on some
-  video streams.)
-- Modified the "config.uClinux" configuration file, following a suggestion by Chetan Raj.
-- Changed "RTSPClient"s implementation of the RTSP "TEARDOWN" command to always act as if the command succeeded, regardless of
-  the actual response from the server (because, from the client's point of view, the session has ended).
-  (This overcomes a potential memory leak, pointer out by Stuart Rawling.)
-
-2009.07.09:
-- Modified the RTSP server implementation to - for streams where there is a known duration - always include a range end time
-  in the RTSP "PLAY" response, even if the client did not specify one in the "PLAY" request.  This allows VLC's client
-  'trick play' to (mostly) work.
-- Updated "MediaSession::initiate()" to eliminate a possible memory leak if we get an error in socket creation.
-  (Thanks to Denis Charmet.)
-- Made a minor change to "MultiFramedRTPSink" to make monitoring/debugging easier.  (Thanks to Guy Bonneau.)
-- Begun adding support for DV video.  However, this implementation is still incomplete.  DO NOT USE IT!
-
-2009.06.02:
-- Updated the MPEG Transport Stream multiplexor implementation to allow for H.264 video.  (Thanks to Massimo Zito.)
-- Updated "MultiFramedRTPSink" to allow for subclasses for RTP payload formats (such as DV, coming soon) that impose
-  a granularity on RTP fragment sizes.
-
-2009.04.20:
-- Fixed "BasicUsageEnvironment::getErrno()" to always (under Windows) return 
-  "WSAGetLastError()" (and to just ignore the "errno" variable>.
-  Also fixed a few places in the code where we were still using "errno"
-  instead of calling "getErrno()"
-
-2009.04.07:
-- Changed many "char*" variables to "char const*" to eliminate possible compiler warnings.
-  (Thanks to Sebastien Escudier for pointing out this issue.)
-
-2009.04.06:
-- Modified our Windows-only version of "gettimeofday()" so that it now returns times based on the proper epoch.
-  (Thanks to Patrick White for this suggestion.)
-- Created a new config file for 64-bit Solaris, and renamed the old "config.solaris" file to make it
-  clear that it's for 32-bit Solaris only.  (Thanks to Michael Skaastrup.)
-- Modified "config.mingw" to add "-DLOCALE_NOT_USED" to the "COMPILE_OPTS =" line.  (The VLC folks seem to want
-  this.)
-- Made a minor change to some win32-specific code in "RTSPClient.cpp" that the VLC folks seem to like.
-  (However, "RTSPClient" is about to undergo a major overhaul (for asynchronous I/O) anyway...)
-- Made a small change to "mediaServer/DynamicRTSPServer.cpp" to eliminate compiler warnings on some platforms.
-
-2009.03.22:
-- Updated "MediaSession::initiate()" to make the selection of ephemeral client
-  port numbers (for RTP and RTCP) more robust, and to eliminate the possibility of
-  the same port numbers accidentally getting chosen more than once by different
-  clients running on the same host.  (Thanks to Guido Marelli and others for helping
-  track down this issue.)
-
-2009.02.23:
-- Changed the way in which 'trick mode' transport streams are generated, so that each
-  video I-frame is included in the output Transport Stream no more than once.
-  This means that now - for low scale values - the output frame rate, and bit rate,
-  will be les than that of the original file.  (Beforehand, we maintained the same
-  frame rate, which meant that - because each output frame is an I-frame - the output
-  stream's bit rate was always significantly larger than the original.  This caused
-  problems for some clients.)
-- Changed the 'client liveness' checking code in the "RTSPServer" implementation so that it deletes the
-  "RTSPClientSession" object even for multicast streams.  
-- Made a minor fix to an error report in "RTSPClient".  (Thanks to Igor Milavec.)
-
-2009.02.13:
-- Changed calls to the "Locale()" constructor to use an explicit variable name (rather than an anonymous
-  declaration), because some compilers weren't handling the anonymous declaration properly.
-  (Thanks to Steven Kramer for noticing this.)
-- Improved the "RTSPServer" definition and implementation to make it easier to subclass the
-  "RTSPServer::RTSPClientSession" class (e.g., to add a custom implementation of the "SET_PARAMETER" command).
-  Also added an iterator class for iterating over the "RTSPClientSession" objects within a "RTSPServer".
-- Make "MediaSubsession::parseSDPAttribute_framerate()" a little more robust.
-  (Thanks to Shawn Van Every for the suggestion.)
-- Improved "BasicUsageEnvironment0::reportBackgroundError()" (thanks to Matt Schuckmann)
-- Fixed a bug in the "AVIFileSink" code (thanks to Pramod Bhadwat for reporting this).
-
-2009.01.26:
-- Updated the header file for "rtcp_from_spec.c" to make the call to "exit()" a noop.
-  (Thanks to Chris Silvers for raising this issue.)
-- Changed the definition of "RTSPClientSession" (in "RTSPServer") to make it protected (and also to make its
-  command handler functions protected and virtual), to allow developers to subclass it (to change the
-  implementation of some commands).
-  (Thanks to Yedidia Amit for suggesting this.)
-- Fixed a minor bug in "scheduleNextQOSMeasurement()" (in the "openRTSP" implementation).
-  (Thanks to Gabriele De Luca for noticing this.)
-
-2008.12.20:
-- Removed - from "MultiFramedRTPSource.cpp" - the historical sanity check for bizarrely delayed packets.
-  Accepting such bizarro packets causes problems in the code; it's best not to accept them at all.
-- Added to "FramedFilter" a new public function "detachInputSource()" that sets the filter's input source
-  to NULL.  This is useful if you want to close the filter independently of closing its input source.
-  (Thanks to Alex Cichowski for this suggestion.)
-- Modified the header file for "MultiFramedRTPSink" to make its implementation of the "stopPlaying()" virtual
-  function public.  (Thanks to Guy Bonneau for this suggestion.)
-- Changed "MediaSession::initiate()" to make the port number selection mechanism (for unicast streams) more robust.
-  (Thanks to Pierre Ynard for this suggestion.0
-
-2008.11.13:
-- Fixed an obscure bug in "BasicTaskScheduler::SingleStep()" in which the call to "handleAlarm()" would
-  (on rare occasions) modify the set of read handlers in such a way as to be inconsistent with the result of
-  the earlier call to "select()".  We fixed the bug by moving the call to "handleAlarm()" after the socket
-  handler call.  (Thanks to Sigismondo Boschi for tracking down this bug.)
-- Fixed a bug in "parseRTSPRequestString()" that could cause a crash when parsing certain weird, non-compliant
-  requests.  (Thanks to Sebastien Escudier for reporting this.)
-
-2008.11.04:
-- Fixed a bug in "RTPInterface" that was sometimes causing sockets not to be reclaimed properly by a
-  RTSP server when streaming RTP/RTCP-over-TCP.  (Thanks to Ralf Globisch for tracking this down.)
-- Changed the RTSP 'start time' parameter from "float" to "double", to allow for
-  accurate 'start times' that are very large - e.g., Unix 'epoch' times.
-  (Thanks to Morgan Toervolt for the suggestion and patch.)
-- Made some simplifications to the 'reception stats' code in "RTPSource".
-  (Thanks to Guy Bonneau for this suggestion.)
-- Fixed a minor bug in "QuickTimeFileSink". (Thanks to Pramod Bhagwat.)
-
-2008.10.07:
-- Added an optional "timeout" parameter (in seconds) to the 'connecting' RTSP
-  client commands.  (Thanks to Sebastien Escudier for this patch.)
-- Increased the size of a "DummySink"s buffer in "MPEG1or2FileServerDemux", to make
-  it large enough for any PES packet.
-- Fixed a minor memory leak in the "createNew()" functions for
-  "AVIFileSink" and "QuickTimeFileSink" if the output fid did not get created.
-  (Thanks to Mehmet Ozgul for noting this.)
-- Fixed a couple of spelling erros, removed some unnecessary whitespace,
-  and updated the address of the FSF in the LGPL preamble (thanks to Erik Hovland).
-
-2008.09.02:
-- Fixed a minor bug in "RTSPServer".  (Thanks to Renato Mauro.)
-- Minor improvements fo "FileSink" and "MP3FileSource".  (Thanks to Pramod Bhagwat.)
-- Changed the default "reclamationTestSeconds" parameter (in "RTSPServer" and "DynamicRTSPServer") from 45 seconds
-  to 65 seconds, because 60 seconds is the default timeout value expected by (broken) clients that send
-  RTSP commands rather than RTCP "RR" reports to indicate liveness.
-
-2008.07.25:
-- Minor bug fix to "MPEG2TransportStreamFramer" (reset "fTSPCRCount" in "doStopGettingFrames()").
-  (Thanks to Qiujian Shu for reporting this bug.)
-- Modified the previous changes to "QuickTimeFileSink" and "AVIFileSink" so that the
-  "createNew()" functions return NULL if the output file cannot be opened.
-
-2008.07.24:
-- Changed "MultiFramedRTPSource" to handle the very first packet that we receive as
-  if there were packet loss beforehand.  This ensures that we correctly discard any
-  initial packets that we receive that occur after the start of a (multi-packet) frame.
-- Fixed "QuickTimeFileSink" and "AVIFileSink" to close the output file (if it's not stdout or stderr) in the destructor.
-
-2008.07.22:
-- Fixed "MPEG2TransportStreamMultiplexor" to use an appropriate stream for our SCR, even if the input contained
-  its own Program Stream Map.
-- More minor changes to the code to make Erik Hovland's code-checking tools happy.
-
-2008.07.06:
-- Corrected one of Erik Hovland's memory leak fixes made to the previous revision.
-
-2008.07.05:
-- Fixed some memory leaks - and several other mostly cosmetic fixes.
-  (Thanks to Erik Hovland for noticing these.)
-
-2008.06.26:
-- Fixed a bug in "openRTSP" that was sometimes causing an incorrect "Range:" header
-  to be sent in "PLAY" requests.
-
-2008.06.25:
-- Fixed a bug in the headers sent for the RTSP "GET_PARAMETER" and "SET_PARAMETER" commands.
-  (Thanks to "beilyzhang (at) hotmail" for this report.)
-
-2008.06.05:
-- Renamed the "ourSourceAddressForMulticast()" function to the less confusing and more explanatory
-  "ourIPAddress()".
-- The "RTSPClient" change that was made in 2008.04.09 to accommodate multicast
-  streams apparently broke (some?) unicast streams.  This has now been fixed.
-- Updated "RTSPClient" to handle weird servers that include a "Content-Length:" header
-  in the response to the RTSP "SETUP" command.  (If we see such a header, we skip over
-  the data referred to in the header.)  (Thanks to Kristian Soerensen for this suggestion.)
-- Changed the parsing of lines in "RTSPClient" so that it now accepts \r or \n alone
-  at the end of each line.  (\r\n is preferred, but the standard also allows \r or \n)
-  (Thanks to David Schueler for this suggestion.)
-
-2008.05.12:
-- Made a change to "RTCPInterface" to ensure that "turnOffBackgroundReadHandling()" is called on a socket
-  as many times as "turnOnBackgroundReadHandling()".  Apparently some versions of Windows get upset if this
-  doesn't happen.  (Thanks to Ken Seo for the suggested fix.)
-- Fixed a bug in "H263plusVideoStreamParser".  (Thanks to Andrey Latin.)
-- Added more sanity checking to "JPEGVideoRTPSink".
-
-2008.04.09:
-- Corrected a type-related bug in "RTPInterface::handleRead()".  (Thanks to Brain Lai for noting this.)
-- Fixed a bug in "RTSPClient" that would prevent RTCP "RR" reports from being sent to
-  the correct multicast address when we are receiving a multicast stream. (Thanks to Changjin Liu for noticing this.)
-
-2008.04.03:
-- Fixed a bug that was introduced in the "2007.12.27" release.  The "timeout" parameter to the call to
-  "readSocket" in "SocketDescriptor::tcpReadHandler()" in "RTPInterface.cpp" needed to be initialized
-  (to zero) first.  (Thanks to Lodewijk Loos for alerting us to this problem.)
-- Added a new config file "config.bfin-linux-uclibc", and renamed "config.bfin_uclinux" as "config.bfin-uclinux".
-  (Thanks to Mike Frysinger.)
-
-2008.02.08:
-- Added a hack (suggested by "Romain") to "MPEG2TransportStreamFramer" to (perhaps)
-  produce more accurate per-transport-packet duration estimates for wildly VBR streams.
-- Updated "MPEG2TransportStreamMultiplexor" to support the addition of MPEG-4 Audio or Video Elementary Streams.
-- Updated "RTSPOverHTTPServer.cpp" (a work in progress) so that it complies properly for some versions of
-  Visual Studio on Windows.  (Thanks to Eric Flickner for noting this.)
-
-2008.01.19:
-- Corrected the "getNormalPlayTime()" function - introduced in the previous release - to allow for 'trick play'
-  scale factors other than 1.
-
-2008.01.18:
-- Added a new member function
-    float MediaSubsession::getNormalPlayTime()
-  which - given a stream's current presentation time - returns the "Normal Play Time".
-  This function is useful for RTSP streams.
-- Added support for a "a=control:" URL specified in the SDP description at the session level. 
-
-2008.01.04:
-- Changed the "RTSPClient" timeout - introduced in the previous release - from
-  5s to 30s.
-- Added support for setting and returning the RTSP session start time (as well as the end time).
-  (This eliminates the need for the "live-starttime.patch" file that VLC was using.)
-- Updated some of the system-specific configuration files, to eliminate the need for many of the patches that
-  the VLC developers added to their code.
-
-2007.12.27:
-- Added a 5s timeout to the "RTSPClient" code that checks for RTSP responses.
-  This mirrors a change that was already being done to VLC's copy of the code.
-  (This is still a short-term fix, until the "RTSPClient" code is rewritten to
-  properly use asynchronous I/O, using the event loop.)
-- Added a timeout to the "readSocket()" call in "SocketDescriptor::tcpReadHandler()" in "RTPInterface.cpp",
-  to handle reading RTP-over-TCP data.  This allows for the possibility of non-cooperative RTSP clients.
-  (Thanks to Peter Leese for this suggestion.)  This is probably not a complete solution;
-  more thought is needed...
-
-2007.12.07:
-- Fixed "H2633plusVideoFileServerMediaSubsession" to properly use a dynamic RTP payload type, rather than the
-  static type 34 (which is reserved for the now-obsolete old "video/H263" RTP payload format).
-
-2007.12.06:
-- Updated "JPEGVideoRTPSource" to take optional 'default width' and 'default height' parameters.
-  These parameters can be set by fields in the SDP description, and can be used to specifiy unusually
-  large frame widths and/or heights.  (Thanks to Andrey Filippov.)
-
-2007.11.18:
-- Fixed a couple of memory leaks in "DarwinInjector".  (Thanks to Eyal Beit-Halachmi for noting these.)
-- Removed old 'backwards compatibility' stuff from "FramedSource".  (Noone should be relying upon this any more.)
-- Fixed a bounds-checking error in "parseRTSPRequestString()" caused by an int vs. unsigned problem.
-  (Thanks to Luigi Auriemma for noting this.)  
-- In "RTSPClient.cpp", fixed a couple of "unsigned" vs. "int" nits.  (Thanks for Brain Lai for noting this.)
-
-2007.11.01:
-- Several of the options to "openRTSP" have now been changed, with two new options added:
-	  -s <initial-seek-time>
-	  -z <scale>
-  See the "openRTSP" documentation <http://www.live555.com/openRTSP/> for details.
-- Fixed a bug in the way that "MPEG4VideoStreamDiscreteFramer" parses 'config' information (for inclusion in
-  the stream's SDP description).  (Thanks to Nicola Bova for helping to identify this bug.)
-- Eliminated a potential memory (and socket) leak when allocating server RTP,RTCP socket pairs.
-  (Thanks to David Pan for reporting this.)
-- Updated "ByteStreamFileSource" to treat a 0-byte file read the same as EOF.
-- Ensure that we have reasonable OS buffering for writes on non-blocking sockets.
-
-2007.08.03a:
-- Removed a debugging printf() that had been left in by mistake.  (Thanks to Massimo Zito for noticing this.)
-
-2007.08.03:
-- Updated the "RTSPServer" implementation to work better on systems with more than one IP address.
-  The server will now include - in its RTSP responses - the IP address on which the corresponding incoming request
-  was received.
-
-2007.07.25:
-- Added some sanity checks to various "MediaSink" subclasses, in case "fSource" is NULL.
-  (Thanks to Andrey Kaminsky for noting one of these.)
-
-2007.07.10:
-- Made sure that "MPEG2TransportStreamFramer"s estimate of the average duration of each Transport Packet
-  gets updated correctly after each 'seek' operation.  (Thanks to Massimo Zito for suggesting this.)
-- Fixed a bug in "MPEG2TransportStreamFromESSource" that was causing presentation
-  timestamps to not be generated correctly.  (Thanks to Massimo Zito for noticing this.)
-
-2007.07.01:
-- Fixed a bug in "RTSPServer" and "RTSPClient" that would cause problems when streaming
-  files whose names have spaces in them.
-- Fixed a bug in "OnDemandServerMediaSubsession::deleteStream".  (Thanks to Igor Bukanov.)
-- Make the sockets for "RTPSource", "RTCPInstance" and "BasicUDPSource" non-blocking, even though they will be read
-  from only asynchronously, when packets arrive.  The reason for this is that, in some OSs, reads on a blocking
-  socket can (allegedly) sometimes block, even if the socket was previously reported (e.g., by "select()") as
-  having data available.  (This can supposedly happen if the UDP checksum fails, for example.)
-  (Thanks to Marc Neuberger for pointing this out.)
-- Fixed a bug in "MPEG2TransportFileServerMediaSubsession.cpp" that was causing 2x
-  fast-forward to fail.  (Some debugging code had been left in by mistake.)
-
-2007.05.24:
-- Modified "setupDatagramSocket()" to better handle setting "ReceivingInterfaceAddr" when creating a socket
-  to be used to send/receive multicast.
-- Made a couple of minor changes to overcome some compilation errors that some people were apparently seeing.
-
-2007.05.23:
-- The RTSP server now includes the "source=" parameter in the response to a RTSP "SETUP" command.
-  This works around a bug in QuickTime Player that would cause it to not send RTCP "RR" packets
-  (when playing a unicast stream, and running on Mac OS X).  (Thanks to Dave Singer et al at Apple for tracking
-  down this problem.)
-- The RTSP server implementation no longer terminates the session if it returns 400 or 405 errors.
-
-2007.04.24a:
-- Fixed a problem in the new "RTSPOverHTTPServer" code that was causing some people compilation problems.
-
-2007.04.24:
-- Fixed a typo in "testOnDemandRTSPServer.cpp".  (Thanks to Nils Grundback for noticing this.)
-- Modified the signature of "RTSPServer::specialClientAccessCheck()" (defined in the previous revision) to add
-  a new "clientAddr" parameter (a "struct sockaddr_in"), to allow special access checking based on clients' IP
-  address.
-- Make sure that the locale is set to "POSIX" when calling "toupper()" or "tolower()" on human-supplied strings.
-  (Thanks to Ismail Doenmez for noting this.)
-
-2007.04.20:
-- Modified "MPEG2TransportStreamMultiplexor" to set the "discontinuity_indicator" flag for the first
-  "adaptation_field" in the output Transport Stream.
-- Changed "AMRAudioRTPSource" to more accurately report whether/when an interleaved frame's timestamp has
-  been synchronized using RTCP.
-  (Thanks to David Bertrand for this patch.)
-- Made to a small fix to the previous revision's support for multicast streaming of raw UDP (nonstandard)
-- Added a virtual function to "OnDemandServerMediaSubsession" for closing the stream source.
-  Subclasses can redefine this, if they wish, to do something smarter.  (Thanks to Igor Bukanov for this patch.)
-- Added support to "RTSPServer" for optionally performing special per-client access control, beyond the
-  standard Digest Authentication method.  (Thanks to Igor Bukanov for this patch.)
-- Made a minor optimization to "Groupsock.cpp".  (Thanks to Maxim Petrov for this suggestion.)
-- Added an initial implementation of RTSP-over-HTTP at the server level (it was already supported at the client level).
-  (Note: This code has not yet been completed, and doesn't yet work, so don't try to use it.)
-
-2007.02.20:
-- Updated "RTSPServer" to support multicast streaming of raw UDP streams (nonstandard).
-  (Thanks to Aesmund Grammeltvedt for this modification.)
-- Made "RTSPClient" a little more robust in case the TCP connection fails.
-- Made "RTPSink::rtpmapLine()" virtual (as requested by Andrew Voznytsa).
-- Removed an archaic (no longer used) declaration in "groupsock/include/Groupsock.hh".
-- Added an optional "allowKasennaProtocol" parameter to "RTSPClient::describeWithPassword()"
-  (similar to "RTSPClient::describeURL()").  (Thanks to Igor Bukanov for this suggestion.)s
-
-2007.01.17:
-- Fixed a bug that would cause the "MPEG2TransportStreamIndexer" application to fail when run on a big-endian
-  architecture.
-- Added a new class "H264VideoFileSink", that prepends each incoming H.264 NAL unit with the prefix 0x000001,
-  before writing it to the file.  Also updated the "openRTSP" code to use this, when receiving H.264/RTP streams.
-  (Thanks to Chris Kuiper for contributing this.)
-- Added a temporary #ifdef to "GroupsockHelper.cpp" to work around a compliation problem when building
-  for Cygwin.
-
-2007.01.11:
-- Improved the "MPEG2IndexFromTransportStream" class to recogize Transport Stream
-  PAT and PMT (tables).  This in turn makes the "MPEG2TransportStreamIndexer"
-  utility more robust.
-- Fixed a minor bug in "MPEG2TransportStreamFromESSource".
-
-2007.01.09:
-- Added RTSP server support for 'trick play' operations on MPEG-2 Transport Stream
-  files.  This requires the presence of a ".tsx" index file for each ".ts" file.
-  (This functionality will shortly be documented on the LIVE555 web site,
-  and announced on the "live-devel" mailing list.) 
-- Improved the performance of asynchronous file reading in "ByteStreamFileSource".
-  (Thanks to Aesmund Grammeltvedt for this suggestion.)
-- Added "-D_FILE_OFFSET_BITS=64" to the "COMPILE_OPTS" line for each of the Linux config files, in order to
-  alleviate possible problems with I/O on large files.
-
-2006.12.31:
-- We now implement "ByteStreamFileSource" on Windows using synchronous file reads,
-  by default.  I had thought that Windows XP had fixed the problem - present in
-  earlier versions of Windows - whereby open files are not treated as select()able
-  sockets.  But apparently the problem is still there.
-- Added code that will - probably in the next release, very soon - support server
-  'trick mode' operations on MPEG-2 Transport Stream files.  At present, we have two
-  new applications - in the "testProgs" directory - that help support this:
-  "MPEG2TransportStreamIndexer" (to create a special index file for a Transport Stream
-  file), and "testMPEG2TransportStreamTrickPlay" (to generate a new Transport Stream
-  file that simulates a 'trick play' operation performed on the original Transport
-  Stream file).  See my forthcoming post to the "live-devel" mailing list for more
-  details.
-- Fixed a bug in the Base64 encoding routine.  (Thanks to Sebastian Gracias for reporting this.)
-
-2006.12.08:
-- Made sure that each TCP socket used by a "RTSPserver" is non-blocking, so that a slow or hanging client
-  cannot hang a server.  (Thanks to "jers (at) inwind.it" for this suggestion.)
-
-2006.11.16a:
-- Oops - fixed a problem with the packaging of the new "mediaServer" code.
-
-2006.11.16:
-- Included the code for the new "LIVE555 Media Server" application
-  (in the "mediaServer" subdirectory).  This is a complete RTSP/RTP server, that
-  will serve any appropriately-formatted file that resides in the current directory.
-  (More documentation will follow.)
-- Updated "QuickTimeFileSink" to support H.264 video in ".mov" or ".mp4" output files.
-  (Thanks to David Arnold for this.)
-- Fixed a potential reference-count related bug in "OnDemandServerMediaSubsession".  (Thanks to Jers.)
-- Changed the "RTSPClient" constructor from "private:" to "protected:".
-
-2006.10.27:
-- "RTSPClient" now recognizes the "Content-Base:" header in RTSP "DESCRIBE" responses.
-  (Thanks to Derk-Jan Hartman for this suggestion.)
-- Updated "MultiFramedRTPSource" to avoid excessive recursion (and thus potential
-  stack overflow) in some cases when receiving streams that have packet loss.
-  (Thanks to Erwin Beckers for raising this as an issue.)
-- Updated "RTPSink" and "MultiFramedRTPSink" to ensure that a proper RTP timestamp
-  is set in the RTSP "RTP-Info" header that follows a "PAUSE", and that this timestamp
-  gets used in the next outgoing RTP packet.  (Thanks to David Bertrand for this suggestion.)
-- Changed the special implementation of "gettimeofday()" for Windows to return
-  more accurate results.  (Thanks to David Arnold for this change.)
-
-2006.10.18a:
-- A minor update to the "MultiFramedRTPSink" change made in the previous release.
-
-2006.10.18:
-- Added support for adding optional RTP padding bytes to "MultiFramedRTPSink".
-  (Thanks to Victor Kozhuhov for this suggestion.)
-
-2006.10.12a:
-- Backed out the change that we made in the 2006.09.18 release: We now don't attempt
-  to setsockopt() SO_REUSEPORT and IP_MULTICAST_LOOP on Windows. (Dave Arnold reports
-  that doing so leads to UDP packets with TTL=1.)
-
-2006.10.12:
-- Fixed a rare memory leak in "MultiFramedRTPSource".  (Thanks to David Bertrand for this fix.)
-- Made "RTSPServer::lookupServerMediaSession()" virtual, to allow for future
-  subclasses of "RTSPServer" that - for example - create and add "ServerMediaSession"s
-  dynamically (depending on whether or not the named file exists).
-- Added a "rtspURLPrefix()" member function to "RTSPServer".  This returns the
-  "rtsp://" URL prefix that's common to all of the server's "rtsp://" URLs.
-
-2006.10.07:
-- The demo applications (in the "testProgs" directory) that stream MPEG-4 
-  Elementary Stream video files now use a file name "test.m4e" rather than "test.m4v".
-  This is to avoid confusion, because Apple has coopted the ".m4v" suffix for
-  MPEG-4 (audio+video) files, which are different.
-- Made "MPEG4VideoStreamFramer" more bullet proof against some non-standard MPEG-4 video data.
-  (Thanks to Maxim Petrov for this suggestion.)
-
-2006.10.05:
-- Fixed a minor bug in "MPEG2TransportStreamFromESSource" (thanks to "jeremy at electrosilk.net")
-- Changed some class member function and variables from "private" to "protected", in response to a request
-  from David Bertrand.
-- Made "DarwinInjector::createNew()" more bullet proof, by giving the "applicationName" parameter
-  a default value.
-
-2006.09.20:
-- Corrected the bug fix to "H264VideoRTPSink" that was made two revisions ago.
-
-2006.09.18:
-- Fixed a bug in the way that "RTPSource" records the maximum sequence number seen so far.
-  (The bug could be triggered by packets arriving out of order.)  Thanks to Mallikharjuna Reddy
-  for pointing this out. 
-- When creating new datagram sockets, we now attempt to setsockopt() SO_REUSEPORT and IP_MULTICAST_LOOP,
-  even on Windows.  (A version of Windows prior to XP had problems with this, but it's apparently no longer
-  a problem.)
-
-2006.09.12:
-- Fixed a minor bug in "H264VideoRTPSink".  (Thanks to Emiliano Parasassi for noting this.)
-- If the "totSessionBW" parameter to "RTCPInstance::RTCPInstance()" is zero, print out an error message,
-  and use a value of 1 (kbps) instead.
-
-2006.09.09:
-- Reenabled asynchronous file reading in "ByteStreamFileSource", after fixing a bug
-  that could lead to a 'race condition' in some circumstances.  (The fix was to call
-  "FramedSource::afterGetting()" directly - rather than via the event loop - after
-  delivering data to the downstream object.)
-- Updated "MPEG2TransportStreamFromESSource" again.  Now, we set the
-  "PES_packet_length" field to zero if the input data was larger than 2^16 bytes
-  long.  (This is in accordance with the MPEG specifications; thanks to "jeremy at electrosilk.net"
-  for noticing this..)
-
-2006.09.08:
-- Temporarily disabled asynchronous file reading in "ByteStreamFileSource" until we
-  fix an apparent bug that is causing MPEG streaming to fail.
-- Updated "MPEG2TransportStreamFromESSource" to print a warning message if the input source delivers
-  data in chunks that are too big to make up a PES packet.
-
-2006.09.07:
-- Fixed a bug that was preventing the RTCP "RR" packet handler from being called
-  when we were streaming RTP/RTCP-over-TCP.  (Thanks to "zhangzx at rcs-9000.com"
-  for noticing this.)
-
-2006.08.26:
-- Changed the implementation of "ByteStreamFileSource" so that reads from the
-  open file are now done asynchronously, when data becomes available.  This matches
-  the code's event-driven execution model better than the previous implementation,
-  which read from files synchronously.  It should also perform better in systems
-  that read from more than one file concurrently.
-- Added Victor Kozhuhov's modifications to the WAV file support code, to allow for WAV files that contain
-  u-law or a-law content (instead of the usual raw PCM).
-
-2006.08.24:
-- Fixed the way in which "RTSPServer" handles requests that span more than one
-  TCP socket read.  These reads are now all handled asynchronously, in accordance
-  with the library's event-driven execution model.  (Thanks to Marc Neuberger for noting this.)
-- Fixed a memory leak in "MultiFramedRTPSource" that would occur if we received
-  packets with duplicate sequence numbers, or if we received excessively delayed
-  packets.  (Thanks to David Bertrand for noticing this.)
-- Changed the order of statements in "~RTSPClient()" to fix a bug (noted by Brain Lai).
-- Changed "base64Encode()" to take a 'length' parameter, so that it will work with input data that
-  contains '\0' characters.  (Thanks to Derk-Jan Hartman for this suggestion.)
-- Added support - in "RTSPServer" - for the (non-standard) "x-playNow:" header in RTSP requests.
-  (Thanks to Rob Casey for this patch.)
-- Updated "MediaSession" to parse the (standard) SDP "framerate" attribute (in addition to "x-framerate", which
-  is non-standard).
-- Changed the parent class of "H264VideoStreamFramer" to be "FramedFilter" (to be consistent with other
-  'Framer' classes) instead of "FramedSource".  (Thanks to Jinfeng Zhang for noticing this.)
-- Made the "FramedFilter" implementation more robust, in case the supplied input source parameter is NULL.
-
-2006.08.07:
-- Changed the way that "OnDemandServerMediaSubsession" creates server ports.
-  It now chooses server port numbers starting with a specific port number
-  (which is now an optional parameter to the "OnDemandServerMediaSubsession"
-  constructor).  The default value of this initial port number parameter is 6970.
-  This matches the port number range used by other common RTSP server implementations,
-  including Darwin Streaming Server and Helix.
-- Changed the criterion for whether to send out a RTCP "SR".  (Thanks to David Bertrand.)
-- Fixed an obscure bug in "OnDemandServerMediaSubsession::deleteStream()"
-  (reported by Scott Hayes)
-- Removed some archaic code that was developed for a customer several years ago, but
-  which is no longer used.
-
-2006.07.04:
-- Another update to "H264VideoRTPSink" (requested by David Bertrand)
-
-2006.06.28:
-- Another update to "H264VideoRTPSink".  (Thanks to David Bertrand.)
-
-2006.06.27:
-- Updated "H364VideoRTPSink"
-- Corrected the definition of MAX_PES_PACKET_SIZE in MPEG2TransportStreamFromPESSource.cpp.
-  (Thanks to Jiri Pinkava for this fix.)
-
-2006.06.23:
-- Fixed some minor issues with the previous addition of "H264VideoRTPSink"
-
-2006.06.22:
-- Added "H264VideoRTPSink", for transmitting H.264/RTP streams.  (Thanks to
-  Benoit Quirynen and David Bertrand for funding this work.)
-- Changed the default definitions of IP_ADD_SOURCE_MEMBERSHIP and
-  IP_DROP_SOURCE_MEMBERSHIP (for use if they're not already defined in header files),
-  to make it more likely that SSM joins will properly fail if SSM is not actually
-  implemented on the host OS.
-- Changed some "delete"s into "delete[]".  (Thanks to Wojciech Matyjewicz
-  and Mathur for reporting these bugs.)
-- Made "sapWatch a bit more robust.  (Thanks to Jiri Pinkava for this fix.)
-
-2006.05.17:
-- Fixed "OnDemandRTSPServer" so that it sets a RTCP "RR" handler,
-  even if "reuseFirstStream" is True.
-- Changed "RTSPServer" (and the "testOnDemandRTSPServer" demo application)
-  to use a 45-second client liveness timeout, by default.  (Previously,
-  no client liveness checking was being done by default.)
-  (Note that client liveness timeouts are done only for unicast streams, not multicast.)
-- Fixed a bug in the implementation of "BasicHashTable" that arose when
-  we were using hash tables with multi-word-sized keys.
-
-2006.05.15:
-- No change from the previous release, but the installed ".tar.gz" file had
-  accidentally been deleted.
-
-2006.05.11:
-- Cleaned up some code in "BasicTaskScheduler" that was allegedly causing
-  problems on a Zaurus.
-- Changed "TaskScheduler::rescheduleDelayedTask()" so that its "microseconds"
-  parameter is a "int64_t" (to match "scheduleDelayedTask").
-  (Thanks to David Bertrand for suggesting this.)
-- Updated "ServerMediaSession:::generateSDPDescription()" to change
-  "a=rtcp: unicast-reflection" to "a=rtcp-unicast: reflection", to
-  reflect the latest version of the IETF's "draft-ietf-avt-rtcpssm"
-  Internet-Draft.  (This is for Source-Specific Multicast sessions only.)
-- Cleaned up "H263plusVideoRTPSink" slightly, to remove an unnecessary
-  member variable.
-- Removed support for the (experimental and non-standard) "X-MCT-TEXT"
-  payload type.
-
-2006.03.17:
-- Fixed a bug in "RTSPClient" (that had been introduced in the 2006.02.15
-  release) that was stopping RTP-over-TCP reception from working.
-
-2006.03.15:
-- Updated "MediaSession" to parse the "s=" and "i=" lines of input SDP
-  descriptions, and added member functions for returning these string values.
-  (Thanks to Scott Hays or this.)
-- Updated "MPEG2TransportStreamMultiplexor" to use the audio track for PCR
-  iff there is no video track present.
-- Made a change to "liveMedia/include/H263plusVideoStreamFramer.hh" to overcome
-  an error reported by some nit-picking compilers.
-- Fixed a minor bug in "MPEG2TransportStreamFromESSource" (in the way that it
-  handles EOF on input).
-
-2006.03.03:
-- Updated "MPEG4LATMAudioRTPSource" to allow the LATM data length field to
-  be omitted from the start of each returned audio frame.  (The "faad" decoder
-  (used by VLC, for example) needed this.)
-- Renamed "SECOND" in the "BasicUsageEnvironment" library to "DELAY_SECOND"
-  (and similarly for "ZERO", "MINUTE", "HOUR", "DAY"), to avoid an alleged
-  name conflict with some other code used by VLC.  (Thanks to
-  Derk-Jan Hartman for this suggestion.)
-- Removed some unnecessary code from "testProgs/playCommon.cpp".
-
-2006.02.25:
-- Updated the previous change to "MultiFramedRTPSource::doStopGettingFrames()",
-  to also reset the object's fields.  (Thanks to David Bertrand.)
-
-2006.02.15:
-- Changed "GetFileSize()" (defined in "liveMedia/include/InputFile.hh") and
-  "ByteStreamFileSource::fileSize()" to return a "u_int64_t", to allow for
-  (potentially) large files.
-- Changed the "microseconds" parameter to "TaskScheduler::scheduleDelayedTask()"
-  from "int" to "int64_t".  This allows for durations greater than the previous
-  ~2000 second limit.
-- Updated "RTSPClient" to support handling RTSP requests sent by the server.
-  (Some servers send periodic requests back to the client as a keep-alive test.)
-  At present, we just respond to such requests with a "not allowed" error.
-  (Thanks to Khanh Mai for this change.)
-- Updated "MultiFramedRTPSource::doStopGettingFrames()" to reset the
-  "ReorderingPacketBuffer".  (Thanks to David Bertrand for this fix.)
-- Corrected a small bug in the previous "RTSPClient" modification
-  (noticed by Glen Gray).
-- Fixed a bug in "ADTSAudioFileSource" when parsing the optional "crc_check"
-  field.  (Thanks to Paul Li for noticing this.)
-
-2006.01.27:
-- Updated "RTSPClient" to:
-  - allow the "parameterName" parameter to "getMediaSessionParameter()" to be NULL
-  - add a "setUserAgentString()" member function, to allow clients to
-    specify an alternative string for "User-Agent:" headers
-  - parse the optional "timeout" parameter in response "Session:" headers,
-    and added a "sessionTimeoutParameter()" member function to retrieve it.
-  (Thanks to Glen Gray for proposing these changes.)
-- Fixed "H263plusVideoRTPSource" to properly initialize two member variables
-  in its constructor.  (Thanks to David Bertrand for this fix.)
-- Added Bernhard Feiten's support for H.263plus parsing/framing
-
-2006.01.24:
-- Corrected the maximum PES packet size (in "MPEG1or2DemuxedElementaryStream.cpp")
-  to allow for a 6-byte header.  (Thanks to Jiri Pinkava for this fix.)
-- Fixed "MPEG1or2AudioStreamFramer" to avoid a potential divide-by-zero when
-  it's fed certain malformed MPEG audio data.  (Thanks to Eric Peters for this.)
-- Updated the top-level "Makefile.tail" to make it clear that "testProgs" can't
-  be built until after the 'library' directories are built. This ensures that
-  parallelizing "make"s don't do the wrong thing.
-
-2006.01.05:
-- Updated "MPEG4VideoStreamFramer" to make the parsing of MPEG-4 video a bit
-  more robust.  (Thanks to Khanh Mai for this suggestion.) 
-
-2006.01.04:
-- Updated "OnDemandServerMediaSubsession" to tear down the stream (thus sending
-  a RTCP "BYE") when the input source ends, iff the stream does not have a known
-  duration.  (If the stream has a known duration, then we keep the stream alive,
-  in case a client wants to seek backwards in it.) 
-
-2005.12.30:
-- Extended the previous release's fix to also work with the RTSP
-  "OPTIONS" command.
-
-2005.12.29:
-- Include (if necessary) authentication headers in the initial HTTP
-  "GET" and "POST" commands, if we're setting up RTSP-over-HTTP tunneling.
-  This allows "RTSPClient" to work properly with some Axis cameras, which
-  require authentication on these HTTP commands.
-
-2005.12.23:
-- Fixed the RTCP port number in the RTSP "Transport:" header "port=" part
-  (for multicast streams).
-- Updated the change that we made in version 2005.11.02 so that it also
-  sets the port number correctly.
-
-2005.12.15:
-- Made calls to "select()" more robust, by checking for (and ignoring)
-  EAGAIN or EINTR errors.
-- Fixed a bug in "MPEG4VideoFileServerMediaSubsession" that could occur if a
-  bad MPEG-4 video file (not containing any initial 'config' data) is read.
-  (Thanks to Trevor Pering for noticing this.)
-- Removed an undocumented, experimental and rarely-used option from "openRTSP".
-
-2005.12.09:
-- Updated the RTCP implementation so that reception stats for a SSRC are now kept
-  around even after a RTCP BYE is received, in case we want to use these stats
-  for QOS reports.  (However, if a SSRC is reaped due to inactivity, then the
-  reception stats are deleted.)
-
-2005.12.05:
-- On some systems (notably FreeBSD), "struct sockaddr_in" includes a "sin_len"
-  field, which should be set before the struct is used.  We now replace declarations
-  of "struct sockaddr_in" with a macro MAKE_SOCKADDR_IN() (defined in
-  "groupsock/include/GroupsockHelper.hh").  This macro sets the "sin_len" field
-  iff "HAVE_SOCKADDR_LEN" is defined on the command line.
-  (Thanks to Boris Nikolaus for noting this issue.)
-- Fixed a bug in the timestamp generation for certain rare MPEG-4 video streams.
-  (Thanks to Bernhard Feiten for reporting this.)
-
-2005.11.30a:
-- Improved the calculation of the per-Transport Packet duration in
-  "MPEG2TransportStreamFramer", so that the overall transmit duration
-  tries to match the client playout duration (as determined by PCRs).
-- Minor patch to avoid errors when compiling with GCC 4.1.
-  (Patch contributed by Hanno Boeck.)
-- Patch to the special 'Kasenna'-specific support in "RTSPClient".
-  (Patch contributed by Glen Gray.)
-
-2005.11.11:
-- Modified "MPEG2TransportStreamFramer" to take the PCR "discontinuity_indicator"
-  flag into account when updating the estimated duration of each TS packet.
-
-2005.11.03:
-- Minor bug fix to the previous version's update to "RTSPClient".
-
-2005.11.02a:
-- Updated the previous release to add a new (optional)
-  "forceMulticastOnUnspecified" parameter to "RTSPClient::setupMediaSubsession()".
-  This forces the client to request a multicast stream if the original SDP
-  response address was unspecified (0.0.0.0).  (Note that not all servers
-  will be able to handle this.)  We also handle the "port=" field in RTSP
-  "SETUP" response "Transport:" headers.
-- Fixed "RTSPServer" to include a proper "port=" field in the "SETUP"
-  "Transport:" response when streaming multicast.
-
-2005.11.02:
-- Updated "RTSPClient" to use the "destination=" address in the "SETUP"
-  response's "Transport:" header - for multicast streams.  We do this because
-  some weird servers (e.g., Axis cameras, reportedly) do not specify the
-  multicast address earlier, in the "DESCRIBE" response's SDP.
-
-2005.10.28b:
-- Added a "rtpTimestampFrequency" parameter (with default value 90000)
-  to "H263plusVideoRTPSink", "MPEG4ESVideoRTPSink".
-
-2005.10.28a:
-- Removed some unnecessary "delete"s, and changed some "delete"s to
-  "Medium::close()"s.  (Minor bug noted by Zhixue Zhang.)
-
-2005.10.28:
-- Fixed a potential 'divide by zero' problem in "MP3Internals.cpp".
-  (Thanks to Eric Peters for noting this.)
-
-2005.10.27:
-- Added a "numEntries()" pure virtual function to "HashTable".
-  (Thanks to David Bertrand for this suggestion.)
-
-2005.10.23:
-- When creating a Transport Stream from AC-3 audio input, we now use a stream_id
-  of 0x06 rather than 0x81.
-- Add support for receiving the various G.726 RTP payload formats, described
-  in RFC 3551.
-- Added an implementation of the "doStopGettingFrames()" virtual function to
-  "BasicUDPSource".  (Thanks to Adrian Hornsby for this suggestion.)
-- Changed the reimplemented virtual functions in "BasicUsageEnvironment0" and
-  "BasicTaskScheduler0" from "protected" to "public".  (Thanks to David Bertrand
-  for this suggestion.)
-- Added support to "RTSPClient" for the "GET_PARAMETER" RTSP command.
-  (Thanks to Glen Gray for this.)
-- Added a Windows version of the "genWindowsMakefiles" script.  This should
-  make it easier for Windows users to unpack and build the code.
-  (Thanks to Erwin Herzog for this script.)
-
-2005.10.05:
-- Fixed a couple of bugs noticed by David Bertrand.
-
-2005.09.23:
-- This software is now called "LIVE555 Streaming Media", and our preferred domain name
-  is now "live555.com".
-
-2005.09.20:
-- Updated "MPEG2TransportStreamMultiplexor" to increase the frequency of PMTs
-  and PATs in the output Transport Stream. 
-- More improvements to "MPEG2TransportStreamFromESSource".
-- Updated "RTSPServer" to allow for empty stream names from certain non-standard
-  RTSP clients (such as Amino STBs).
-- Fixed "RTSPClient::tearDownMediaSession()" to delete each subsession's
-  "sessionId" field.
-- Fixed a minor memory leak in "RTSPClient" (when implementing HTTP tunneling)
-
-2005.09.09:
-- Made the destructors for "BasicUsageEnvironment" and "BasicUsageEnvironment0"
-  protected rather than public, to match the base class "UsageEnvironment".
-- More improvements to "MPEG2TransportStreamFromPESSource" and
-  "MPEG2TransportStreamFromESSource".
-
-2005.09.06:
-- Modified "MPEG2TransportStreamMultiplexor", and added
-  "MPEG2TransportStreamFromESSource".
-
-2005.08.26:
-- Updated "MediaSession" to parse the SDP "a=type:" attribute.  (Patch by
-  Derk-Jan Hartman.)
-- Added support to "RTSPClient" for handling Microsoft servers' non-standard use
-  of the RTSP/RTP protocol.  Also, fixed the parsing and generation of floating
-  point numbers in the RTSP "Range:" and "Scale:" headers to work correctly in
-  non-POSIX locales.  (Thanks to Derk-Jan Hartman for this suggestion.)
-- Fixed a memory leak in "MPEG2TransportStreamFromPESSource".
-- Changed "MP3StreamState::readFromStream()" from "private" to "protected", to
-  satisfy a request by Pierre l'Hussiez.
-
-2005.08.09:
-- Improved the Transport Stream generation software to (in the future) allow
-  for generating Transport Streams from Elementary Stream data as well as
-  from PES packet data.
-
-2005.07.23:
-- Improved "H264VideoRTPSource" to properly handle 'aggregate' packets
-  that contain more than one NAL unit.
-
-2005.07.21:
-- We no longer set a RTCP "RR" handler when we're streaming, unicast on-demand,
-  from a shared input source.  (The reason for this is that, in this case,
-  we also share a RTCP instance for all client sessions (streams).
-  A better fix will eventually be needed.)
-
-2005.07.19:
-- Updated H.264/RTP support.
-
-2005.07.15:
-- Oops, DEBUG was not supposed to be defined in "RTSPServer.cpp".
-- Added "-D_LARGEFILE_SOURCE=1" to the "COMPILE_OPTS =" line of the various
-  "config.*linux*" files, to ensure that code that uses "fseeko()" will
-  compile properly for all Linux systems.
-
-2005.07.13:
-- When handling a 'passive' session, we no longer set a RTCP "RR" handler,
-  because (unlike unicast, on-demand sessions) the RTCP instance usually
-  outlives RTSP client sessions.  (Thanks to Jon Sheller for reporting
-  this bug.)
-
-2005.07.12:
-- Minor updates to the Base64 code for H.264/RTP receiving.
-
-2005.07.10:
-- Removed a debugging version of "testOnDemandRTSPServer" that had mistakenly been
-  left in the proevious revision.  If you downloaded the previous revision, then
-  please download this version instead!
-- Fixed "MPEG1or2VideoStreamFramer" to better handle MPEG video streams where the
-  first GOP time code has a non-zero 'pictures' count.
-  (Thanks to Eric Peters for reporting this problem.)
-- Some enhancements to the Base64 code, for eventual use by "H264VideoRTPSource".
-
-2005.07.08:
-- Added - to "RTCPInstance" - the ability to assign 'handler' functions
-  to be called on the arrival of RTCP "SR" or "RR" packets (as well as "BYE").
-  We now use this mechanism (specifically, a RTCP "RR" handler) to improve the
-  optional 'liveness' test for "RTSPServer".  (Liveness is now indicated by
-  either a RTSP command over the TCP connection, or the arrival of a RTCP
-  "RR" packet.)
-- Moved routines for Base64 encoding and decoding into the "liveMedia"
-  library.  (Base64 encoding was already being used by "RTSPClient";
-  Base64 decoding will soon be used by "H264VideoRTPSource".)
-
-2005.07.01:
-- Updated "testOnDemandRTSPServer" to demonstrate AAC audio streaming (from an
-  ADTS-format file)
-- Made some modifications to (supposedly) make the code compile better for
-  WinCE. 
-
-2005.06.30:
-- Added support for reading and streaming from AAC audio files in ADTS format.
-  (Thanks to Manthan Systems for funding this work.)
-- Removed duplicate code in "testOnDemandRTSPServer.cpp".
-- Removed duplication of a common error message from "RTSPClient.cpp".
-
-2005.06.29:
-- Added support for Basic authentication (in addition to Digest authentication)
-  to "RTSPClient".
-- Removed a minor memory leak in "PassiveServerMediaSubsession".
-- Improved "MPEG4ESVideoRTPSource" to better note when received RTP packets
-  begin or end a MPEG-4 'frame'.  (Thanks to Saumya Chandra for noting the
-  limitations of the previous code.)
-- Changed some member functions in "PassiveServerMediaSubsession" from
-  "private" to "protected", to allow subclassing.  (Thanks to
-  Fabrice Aeschbacher for this suggestion.)
-
-2005.06.16:
-- Fixed a bug in the generic MPEG (1, 2 or 4) video parsing code that was causing some
-  MPEG-4 streams not to be parsed correctly.
-- Updated "MPEG4VideoStreamFramer" to better handle MPEG-4 video streams that contain
-  'B' frames.  (Now, more accurate presentation times and frame durations are computed
-  for such streams.)
-
-2005.06.07:
-- Modified the Windows-specific code in "ByteStreamFileSource.cpp" to compile properly
-  under MINGW.
-
-2005.06.04:
-- Updated "MPEG2TransportStreamFramer::doStopGettingFrames()" to clear the PID status
-  table.  This makes it possible to handle PCR discontinuities when seeking (e.g.)
-  within a stream.
-- Updated the "ByteStreamFileSource::seekToByte*()" operations to take 64-bit
-  parameters, to allow for seeking within files that are >4 GB in size.
-
-2005.05.26a:
-- Updated the 'seeking' operations in "ByteStreamFileSource" to handle files
- that are > 2^31 bytes in size.
-
-2005.05.26:
-- Updated "RTCPInstance::setByeHandler()" to (by default) handle only "BYE"s that
-  come from active participants.  This means, for example, that a receiver of a
-  multicast stream can now quit without its RTCP "BYE" being handled by other
-  multicast receivers.  (By default, multicast receivers will now handle only
-  "BYE"s that come from the sender.)
-- "RTSPServer" now includes "rtptime" in the returned "RTPInfo:" header, because
-  the bugfix in the previous release also happened to fix the problem that this was
-  having with QuickTime Player.
-
-2005.05.24:
-- Fixed "RTPSink" so that it now resets "fTimestampBase" only on the first time
-  that a timestamp is ever computed; not on the first time after "startPlaying()"
-  is called.  (Thanks to David Bertrand for noting this.)
-
-2005.05.23:
-- Added support to "RTSPServer" for (optionally) reclaiming client connection
-  state (and stopping the stream) if no command has been received on the
-  RTSP TCP connection within a specified period of time.  This is useful for
-  use in closed systems where it is known that the RTSP client always uses
-  the "GET_PARAMETER" command as a periodic 'keep-alive'.  It stops the
-  stream from continuing indefinitely if the client suddenly dies.
-
-2005.05.12:
-- Removed some unnecessary floating point code from "MP3Internals.cpp".
-  (This was causing unnecessary slowness on some hardware without floating point.)
-
-2005.05.09:
-- Modified "MPEG2TransportStreamFramer" to give greater weight (0.5) to more recent
-  data when computing the estimate of per-transport-packet duration.  (This causes
-  it to respond more accurately to sudden changes in bitrate (i.e., in VBR streams).)
-- Added some (otherwise unnecessary) null destructors to stop gcc 4.0 from printing
-  warning messages.  (Thanks to Emiliano Parasassi for pointing this out.)
-
-2005.05.05:
-- "RTSPServer" now uses separate buffers for requests and responses.  (This fixes
-  an issue that arose in the handling of requests from a set-top box.)  
-
-2005.05.04:
-- Updated "RTSPServer" to make the parsing of "CSeq:" headers in RTSP requests
-  more robust.
-
-2005.04.26:
-- Made sure that "MultiFramedRTPSource"s properly stop receiving incoming RTP
-  packets, when they're asked to stop.  (This fixes a bug that was being triggered
-  by some streams that continued sending RTP packets after a RTCP "BYE".  Thanks to
-  Eberhardt Garner for helping track this down.)
-- Fixed a minor memory leak in "openRTSP".
-- Updated "FramedSource.hh" to no longer (by default) support the old form of
-  the 'after getting' function.
-  
-2005.04.23:
-- Added "H264VideoRTPSource", for receiving H.264/RTP streams.
-  (Thanks to Erik Hellerud for this.)
-- Made some minor modifications to "ServerMediaS(ubs)ession",
-  to support a customer's project.
-
-2005.04.22:
-- Improved "MPEG1or2VideoRTPSink" to allow more than one complete video 'slice'
-  from the same picture to be packed into an outgoing RTP packet.
-- Eliminated a bogus "IP_ADD_MEMBERSHIP" error message that Windows (for some
-  reason) sometimes triggers for no reason.
-
-2005.04.20:
-- Changed the name of the (platform-independent) "_close()" function to
-  "closeSocket()", to prevent an apparent function name conflict in Windows.
-
-2005.04.13:
-- Modified "ourSourceAddressForMulticast()" to try the
-  "gethostname()"/"gethostbyName()" method if the 'multicast loopback' method fails.
-- Made some modifications to "ServerMediaSubsession" to support "SIPServer"
-  (whose implementation is currently in progress).
-
-2005.04.07:
-- Fixed a bug in the "base64Encode()" routine in "RTSPClient.cpp".
-  (Thanks to Raphael Rigo for noticing this.)
-- Updated "MPEG1or2VideoStreamDiscreteFramer" to handle the "iFramesOnly" and
-  "vshPeriod" parameters (just as the original "MPEG1or2VideoStreamFramer"
-  already does).
-
-2005.03.31:
-- Removed some testing code that had accidentally been left in the previous
-  release.  If you use "openRTSP", then please use this release instead of the
-  previous one. 
-- Fixed a bug in "RTPServer" when handling streams without stream names.
-  (The bug had been introduced in version 2005.03.28.)
-
-2005.03.30:
-- Improved the support for seeking within RTSP/RTP-streamed MPEG-1 or 2
-  Program Stream files.  (A/V sync after a seek still isn't perfect, though.)
-
-2005.03.28:
-- The "RTSPServer" implementation now supports raw-UDP streaming, for those
-  clients that request it.  (This is usually requested only by some specialized
-  clients - such as set-top boxes - and only for data such as MPEG Transport
-  Streams where audio/video is muxed together (and no RTP timestamps are needed).)
-- Updated the calculation of MP3 sampling frequencies to allow for 'MPEG2.5'
-  (Thanks to Massimo Buffo for this fix.)
-
-2005.03.23:
-- Changed "BasicTaskScheduler::SingleStep()" to call only one read handler during
-  each iteration of the event loop.  This prevents potential problems if
-  the event loop is called reentrantly from within a read handler.
-- Added a new, alternative version of "ByteStreamFileSource::createNew()" that
-  takes an open file (FILE*) as parameter, instead of a file name.
-  (Thanks to Mike Yan for this suggestion.)
-- Updated the top-level Makefile to build the lower-level directories using
-  "$(MAKE)" rather than "make".  This allows a command other than "make"
-  (e.g., "gmake") to be used.  (Thanks to Sergio.Gelato for this fix.)
-- Minor changes to (apparently) make Sun's C++ compiler happy.
-  (Thanks to Sergio.Gelato for these.) 
-- Some changes to "RTSPServer" to make it more tolerant of some strange, non-standard
-  clients.
-- Support seeking within RTSP/RTP-streamed MPEG-1 or 2 Program Stream files.
-
-2005.03.11:
-  Updated "MPEG2TransportStreamFromPESSource" once again to better handle
-  Program Streams that include a "program_stream_map".
-
-2005.03.10:
-- Modified "BasicUDPSource" to make its OS socket receive buffer at least 50 kBytes
-  (the same as we do for "MultiFramedRTPSource").
-
-2005.03.07:
-- Updated "MPEG2TransportStreamFromPESSource" (and thus also the
-  "testMPEG1or2ProgramToTransportStream" demo application) to handle MPEG
-  Program Streams that include MPEG-4 Elementary Stream data.  (For this to work,
-  the Program Stream must include a "program_stream_map".)
-
-2005.03.05:
-- Modifying "ReceivingInterfaceAddr" now works before receiving
-  unicast streams.  (Previously, it worked only when receiving multicast
-  streams.)  Also, added a new option "-I <interface-ip-address>"
-  to "openRTSP", to allow the user to specify which interface is used.
-  (Thanks to Luca Abeni for this patch.)
-- Fixed a "delete[]" vs "delete" bug in "MPEG4VideoStreamFramer",
-
-2005.02.28:
-- Fixed a bug (that had been introduced in the 2005.01.07 version)
-  in the MP3 frame<->ADU conversion code.
-
-2005.02.25:
-- Fixed some minor memory leaks.
-- Made some more changes to prepare for RTSP server seeking within MPEG-1 or 2
-  Program Stream files.  (This is still not done yet.)
-
-2005.02.14:
-- Changed the generation of "rtptime" in "RTPInfo:" RTSP headers to use 
-  %u instead of %d.  (Thanks to Regis Feneon for noting this.)
-- Made some changes to prepare for RTSP server seeking within MPEG-1 or 2
-  Program Stream files.  (This is still not done yet.)
-
-2005.02.09:
-- Updated "MultiFramedRTPSink" to allow for frame-specific special headers to
-  appear before each frame in RTP packets.  (This in addition to the (possible)
-  special header that may appear at the start of the packet.)  This functionality
-  is added using a new virtual function "frameSpecificHeaderSize()" (that,
-  by default, returns 0.)  Thanks to Matt Romaine for this.
-- Added a new "BufferedPacket" virtual member function
-  "getNextEnclosedFrameParameters()", which will (eventually) replace the existing
-  "nextEnclosedFrameSize()" virtual member function.  This (plus a corresponding
-  change to "MultiFramedRTPSource") now makes it possible to give correct 
-  presentation times to multiple frames within incoming RTP packets.
-
-2005.02.07:
-- The "MultiFramedRTPSink::setPacketSizes()" function now applies just to one
-  specific "MultiFramedRTPSink" object; not to all such objects.
-- Added a new version of "RTSPServer::removeServerMediaSession()" that takes
-  the (string) stream name - rather than the "serverMediaSession" object
-  - as argument.
-
-2005.01.29:
-- We now remove reception and transmission statistics records (from each
-  "RTPSource" and "RTPSink", respectively), whenever each RTCP SSRC membership
-  gets 'reaped'.  We also added more information to "RTPTransmissionStats".
-  (Thanks to WIS Technologies for funding this work.)
-- Some minor fixes to "JPEGVideoRTPSource".  (Thanks to Sergey Khlutchin for
-  reporting this.)
-- Made the "ServerMediaSession" constructor "protected", to allow for
-  subclassing.  (This was requested by Eric Peters.)
-- Updated "win32config.Borland" and modified some header files, so that the
-  code can be built using Borland's "C++ Builder 5.0".
-  (Thanks to David Wu for this suggestion.)
-- Added a "setPacketSizes()" function to "MultiFramedRTPSink" to make it
-  possible to change the 'maximum' and 'preferred' size of outgoing
-  RTP packets.  (Thanks to Christian Gerstner for this suggestion.) 
-
-2005.01.24:
-- Some MIME-type parameters in SDP "a=fmtp:" lines are Boolean, taking only values
-  0 or 1.  Sometimes these parameters are set (to 1), without an explicit "=1"
-  being in the SDP "a=fmtp:" line.  (This is not legal, but it sometimes occurs.)
-  Our SDP parsing code (in "MediaSession.cpp") now checks for this.
-
-2005.01.23:
-- More improvements to "AVIFileSink".  MPEG-1, 2 or 4, JPEG and H.263 video is
-  now supported, along with raw PCM or u-law audio.  (However, audio is not
-  yet working perfectly, and MPEG audio is currently not supported at all.)
-  (Thanks to WIS Technologies for funding this work.)
-- Changed the (many) calls to "gettimeofday()" to pass NULL as the 'timezone'
-  parameter, because this isn't used.
-
-2005.01.13:
-- Fixed a bug in "liveMedia/OnDemandServerMediaSubsession.cpp" that was reportedly
-  causing crashes on some systems.  (Thanks to Brian Wang for finding this.)
-- Updated "MPEG1or2VideoStreamDiscreteFramer" and
-  "MPEG4VideoStreamDiscreteFramer" to set appropriate presentation
-  timestamps for B-frames.  (Unlike I and P-frames, B-frames' timestamps are
-  not monotonically increasing.)  (Thanks to WIS Technologies for funding this work.)
-
-2005.01.07:
-- Fixed a bug in "JPEGVideoRTPSink" that was causing incorrect packets to
-  be generated when streaming using non-standard JPEG quantization tables
-  (which must be included in the RTP packets).
-- Updated the handling of incoming MP3 ADUs to allow for the possibility of
-  receiving ADUs that contain 'ancillary data' at the end.  (For example,
-  ADUs for "mp3Pro" frames are like this.)  Note, however, that our
-  MP3 frame-to-ADU generating code currently doesn't include 'ancillary
-  data' at the end of the generated MP3 ADUs.  This will need to be fixed
-  in order to be able to correctly *transmit* ADUs for "mp3Pro" frames.
-- More work on "AVIFileSink".  Recording of MPEG-4 video-only files now works.
-
-2004.12.29:
-- Added a new liveMedia 'sink' class - "AVIFileSink" - for writing an AVI-format
-  file.  Note: This is not fully working yet, so don't try using it yet!
-  (Thanks to WIS Technologies for funding this work.)
-
-2004.12.23:
-- Fixed a bug in the previous release (when receiving MPEG-2 Transport RTP streams).
-
-2004.12.22:
-- Updated "MPEG4GenericBufferedPacket::nextEnclosedFrameSize() to (i) allow
-  for "generic" mode, and (ii) properly check for the absence of an
-  "AU Header section".  (Thanks to Erick van Rijk for this suggestion.)
-- When receiving a MPEG-2 Transport Stream (either RTP *or* raw-UDP), pass it
-  through a "MPEG2TransportStreamFramer", so that "durationInMicroseconds" is
-  set appropriately, based on the stream's embedded PCR values.
-  (Thanks to Dermot McGahon for this suggestion.)
-- Changed the "num_packets_lost" statistics line (printed by "openRTSP -Q")
-  to format as an int rather than as an unsigned.  This is in case this value
-  is negative (which can happen if duplicate packets are received).
-  (Thanks to Norbert Donath for noting this.)
-
-2004.12.15:
-- Changed the RTSP servers in the various test programs to use port 8554
-  instead of port 7070 for RTSP (as an alternative to the standard port
-  554).  It turns out that port 8554 is the official IANA-reserved port
-  number for RTSP (alternative).
-- Changed "RTSPClient" to include the "Scale:" header if the scale is being changed
-  to 1.0 from something else.  (Thanks to Matt Romaine for this suggestion.)
-
-2004.12.09:
-- Fixed a bug in the handling of "audio/X-MP3-DRAFT-00" RTP streams.
-  (Thanks to Dhananjay Deshpande for noticing this.)
-
-2004.12.07:
-- Updated "RTSPClient" to parse the "Scale:" header (if any) in a response to
-  a "PLAY" command, and set a corresponding field in the "MediaSession" or
-  "MediaSubsession" structure.
-
-2004.12.06:
-- Fixed a minor bug in "BasicTaskScheduler::SingleStep()" that would be triggered
-  if the (optional) "maxDelayTime" parameter were unusually large.
-- The "RTSPServer" implementation of RTP/RTC-over-TCP streaming will now work even
-  if the client's RTSP "SETUP" command doesn't include an "interleaved=" field.
-
-2004.11.30:
-- Added "RTSPServer" support for the RTSP "Scale:" header, which is used to
-  implement 'trick play': fast forward and reverse play.  The actual implementation
-  of these depends on the media type; it is currently implemented for MPEG-1 or 2
-  (including MP3) audio (forward play only), and for WAV (PCM) audio (forward or
-  reverse play).
-  (Thanks to Sony Corporation for funding this work.)
-
-2004.11.26:
-- Improved "H263plusVideoRTPSource" to better recognize which packets begin
-  a frame.  (This should improve its performance on lossy networks.)
-- Improved the parsing of MPEG-1 or 2 audio streams to ignore more bogus
-  'syncwords'.
-- We now look for the 'Xing' VBR Table of Contents, and use this (if present)
-  to implement seeking within VBR files.
-- Updated "ADUFromMP3Source" to allow the internal data buffers to be flushed
-  (e.g., if there is a discontinuity in the MP3 input data).
-- When streaming a seekable MPEG audio stream on demand, insert filters that
-  convert the input stream to ADU format, and then back to MP3.  This allows
-  us to seek within the stream without being tripped up by the MP3
-  'bit reservoir' (back-pointer). 
-
-2004.11.20:
- - Fixed a bug in "MediaSession::initiateByMediaType()".  (It was not allowing
-   for the possibility that a subsession had already been initiated.)
-
-2004.11.19:
-- For consistency (and ease of comparison), the "MIMEtype()"
-  codec name substring for each "MediaSource" subsession is in upper case.
-
-2004.11.18:
-- Added an optional "scale" parameter to the "RTSPClient" "play...()"
-  methods, to allow a client to specify fast forward or rewind 'trick play'.
-  (Thanks to Dermot McGahon for this suggestion.)
-
-2004.11.16:
-- Fixed a bug in the way that "QuickTimeFileSink" records the duration of
-  multi-channel audio tracks in ".mov" or ".mp4"-format files.
-  (Thanks to Orban/CRL Inc. for funding this work.)
-
-2004.11.11a:
-- Another minor update to "RTSPClient".
-
-2004.11.11:
-- Updated the "RTSPServer" implementation to handle the case where a "PLAY"
-  request does not contain a "Range:" header.  (Suggestion by Brian Wang.)
-- Reinstated the "MPEG4LATMAudioRTPSource" fix from version "2004.08.24".
-  (It had accidentally gotten deleted.)
-- Included Dermot McGahon's patch to "RTSPClient" to support the bogus
-  non-standard 'Kasenna' variant of RTSP.
-
-2004.11.09a:
-- Fixed the previous revision (RTSP seeking support) to work properly with VLC.
-- Fixed a bug that was causing receivers of SSM streams to not receive RTCP packets.  (Thanks to Alessandro Gaiarin for reporting this.)
-
-2004.11.09:
-- Added support for seeking within streams.  This currently works only for
-  WAV audio file streams, and MPEG audio (include MP3) file sources.
-  (However, it doesn't yet work properly for VBR MP3 files; this will get fixed.
-  Also, it doesn't yet work properly with VLC.)
-  (Thanks to Sony Corporation for funding this work.)
-
-2004.11.06:
-- Improved the way that we specify output buffers for "RTPSink" objects.
-  We now do this using a "maxSize" static member variable (instead of 
-  using a 'number of packets' variable as we did before).  We also limit
-  the size of the output buffer used for RTCP packets, to save space.
-- When streaming a MPEG Transport Stream, don't set the RTP 'M' bit.
-- When recording a ".mov" or ".mp4" file using "QuickTimeFileSink.cpp",
-  we no longer fill in the "width" and "height" fields for audio tracks.
-
-2004.11.04:
-- When streaming MPEG audio or WAV audio files on demand, we now return the
-  correct file duration (in the RTSP "Range:" header and the SDP "a=range:"
-  attribute), so that media players will report the correct stream duration.
-  (Thanks to Sony Corporation for funding this work.)
-- In "MultiFramedRTPSink", we now wait until we receive the first data before 
-  initializing "fNextSendTime" with the current wall-clock time.
-  (Thanks to Eric Peters for suggesting this.)
-
-2004.11.02:
-- Updated the RTSP "Range:" header (in a "PLAY" response) and the SDP "a=range:"
-  attribute to support streaming from sources with finite durations.
-  (Such sources can support seeking via RTSP.)  The "ServerMediaSubsession"
-  class now has a "duration()" virtual function.  (In the future,
-  "FileServerMediaSubsession" subclasses will redefine this, so that seeking
-  within the file will work.)
-  (Thanks to Sony Corporation for funding this work.)
-
-2004.11.01:
-- Added support to "RTSPClient" for streaming RTSP/RTP over HTTP, using the technique
-  described in Apple's document: <http://developer.apple.com/documentation/QuickTime/
-QTSS/Concepts/chapter_2_section_14.html>.
-  This can be used for streaming from a Darwin Streaming Server from behind a
-  HTTP-only firewall.  (Note that our own RTSP server implementation doesn't yet
-  implement RTSP-over-HTTP, but this is on the 'to do' list.) 
-  (Thanks to Orban/CRL Inc. and WIS Technologies for funding this work.)
-
-2004.10.28a:
-- Fixed "OnDemandServerMediaSubsession" so that "PAUSE"/"PLAY" works properly on
-  unicast streaming from files.
-
-2004.10.28:
-- Removed (perhaps temporarily) the "rtptime=" parameter from the "RTP-Info:" header
-  that's returned in response to the RTSP "PLAY" command.  It appears that this may
-  be messing up A/V sync in QuickTime Player.
-
-2004.10.26:
-- Updated "JPEGVideoRTPSink" (and "JPEGVideoSource") to allow for the
-  possibility of sending custom quantiziation tables in JPEG/RTP packets.
-- Fixed some compile warnings about unused named parameters.  (Thanks to
-  Thiago Correa for these suggestions.)
-
-2004.10.22:
-- Added a new "MPEG1or2VideoStreamDiscreteFramer" class, similar to the existing
-  "MPEG4VideoStreamDiscreteFramer".
-
-2004.10.21:
-- Modified the order of SDP lines generated by a RTSP server
-  (in "ServerMediaSession.cpp") to correspond to the exact order specified by
-  the SDP RFC.  JMIF clients are supposedly anal retentive about this.
-  (Thanks to Fabrice Aeschbacher for noticing this.)
-
-2004.10.19:
-- Updated "MPEG2TransportStreamFramer" to properly handle input data that
-  doesn't begin with a 'sync' byte (0x47).
-
-2004.10.18:
-- Added a new "removeServerMediaSession()" member function to "RTSPServer".
-- Updated the implementation of the RTSPServer "RTPInfo:" header to include a
-  "rtptime=" field.
-- Improved the "WindowsAudioInputDevice" trick for making the microphone the
-  first-listed device.  (Thanks to Syncanph Xie for this suggestion.)
-
-2004.10.14:
-- Added a new argument "-4" to "openRTSP" (with corresponding updates to
-  "QuickTimeFileSink"), to generate a "MP4"-format file.  (Currently, this
-  works for MPEG-4 audio only.)
-  (Thanks to Orban/CRL Inc. for funding this work.)
-
-2004.10.13:
-- Fixed a typo that was causing the Windows version not to build.
-  (Thanks to Thiago Correa for noticing this.)
-
-2004.10.11:
-- Updates to "RTSPServer":
-  - Include a "Date:" header in each response
-  - Include a "Range:" header in each "PLAY" response.
-  - Include "RTP-Info:" header in each "PLAY" response.
-- Made "SimpleRTPSink" more idiot-proof.
-
-2004.10.07:
-- Improved the parser in "MPEG4VideoStreamFramer" to be more tolerant of
-  bad/unexpected data.
-- Moved the code for opening input files by name (which includes a special-case
-  hack for "stdin") to a single common file - "InputFile.cpp" - to get rid of
-  duplicated code.
-
-2004.10.04:
-- Fixed "UserAuthenticationDatabase::addUserRecord()" (in "RTSPServer.cpp") to
-  make a copy of the "password" string, before adding it to the hash table.
-  (The hash table already makes a copy of the "username" (key) string.)
-
-2004.10.03:
-- Added support for receiving raw UDP streams (in addition to normal RTP/UDP streams)
-  (Thanks to Derk-Jan Hartman)
-
-2004.09.30:
-- Updated the RTSP server "UserAuthenticationDatabase" to (i) allow for it to
-  be subclassed, and (ii) allow it to store passwords that are really
-  md5(<username>:<realm>:<password>)
-
-2004.09.24:
-  Added support for access control (using digest authentication) to "RTSPServer".
-  Also, added example code to the "testOnDemandRTSPServer" test program to illustrate
-  how to use this. (Thanks to Orban/CRL Inc. and WIS Technologies for
-  funding this work.)
-
-2004.09.22:
-- Moved the digest authentication support out of "RTSPClient.cpp"
-  (and "SIPClient.cpp") into a new file: "DigestAuthentication.cpp".  There's also
-  a corresponding new header file: "DigestAuthentication.hh".  This is in preparation
-  for adding digest authentication support to our RTSP server implementation also.
-
-2004.09.20:
-- More improvements to the multi-unicast streaming support (from a single input
-  source).  RTP-over-TCP streaming is now supported in this case.  Updated
-  "testOnDemandRTSPServer" to add a variable "reuseFirstSource" (default: False)
-  that can be used to implement this.
-
-2004.09.09:
-- Made a minor improvement to the multi-unicast streaming support.
-
-2004.09.08:
-- Added optional "author" and "copyright" parameters to "DarwinInjector::setDestination()".
-- Added an optional "miscSDPLines" parameter to "ServerMediaSession::createNew()",
-  to allow the caller to add extra SDP lines to the session description.
-- Fixed a minor bug in the media tables reclamation code.
-- Added still more support for multi-unicast RTSP/RTP streaming from a
-  single input source.  (Thanks to Orban/CRL, Inc. and WIS Technologies for funding
-  this work.)
-
-2004.09.05:
-- We now more gracefully handle malformed "m=" SDP lines.  (Thanks to
-  Derk-Jan Hartman for noticing this problem.)
-- In "RTSPClient", we now make the "CSeq" number a static variable, to avoid
-  potential problems if we connect to the same server with the same URL
-  more than once.  (Thanks to Keith Gurganus for the suggestion.)
-- Modified "RTSPServer" to use the destination interface IP address in
-  its "rtsp://" URL.
-
-2004.09.02:
-- Modified "GroupsockHelper.cpp" to allegedly support building for WinCE.
-
-2004.08.26:
-- Fixed a bug that could cause "AMRAudioRTPSource"s to not get reclaimed.
-  (Thanks to Chenglim Ear for reporting this.)
-- More support for multi-unicast RTSP/RTP streaming from a single input source.
-
-2004.08.24:
-- Modified "LATMAudioRTPSource" to include the initial data length field
-  in the data that's delivered to a client.  (A decoder was needing to see this.)
-- Added a new "MPEG4VideoStreamDiscreteFramer" class, as a (more efficient)
-  alternative to "MPEG4VideoStreamFramer" when the input source is a sequence of
-  discrete MPEG-4 frames, rather than a byte stream.
-- Fixed a minor bug in "Media.cpp". (Thanks to Thiago Correa.)
-- Added more support for multi-unicast RTSP/RTP streaming from a single input
-  source.  (This now working, except for TCP connections - to be completed.)
-
-2004.08.17:
-- Made the parsing of MPEG-1 or 2 video more robust, in case a Video Sequence Header
-  doesn't appear exactly where it should.
-- Added initial support for multi-unicast RTSP/RTP streaming from a single input
-  source.  (This isn't fully working yet - more support needs to be added.)
-
-2004.08.13:
-- Added a "numChannels" parameter to "MPEG4GenericRTPSink" (optional)
-  and "MPEG4LATMAudioRTPSink".
-
-2004.08.12:
-- Fixed a couple of small memory leaks (noticed by Gabriel Bouvigne).
-
-2004.07.31:
-- Added support for MPEG-4 LATM audio RTP streaming.  (MPEG-4 LATM audio RTP
-  *receiving* had already been implemented.)  (Thanks to Orban/CRL, Inc. for
-  funding this work.)
-
-2004.07.27:
-- Updated the MPEG Program-to-Transport Stream conversion mechanism to set the
-  correct stream tags depending on whether the input data is MPEG-1 or 2.
-
-2004.07.23:
-- Added a "-O" (upper-case letter 'oh') option to "openRTSP".  This tells the
-  program to not send an initial "OPTIONS" request prior to "DESCRIBE".
-- Modified "BasicTaskScheduler" to better allow subclassing.
-- Added an optional "maximum delay time" option to
-  "BasicTaskScheduler0::SingleStep()".  This allows subclasses to impose a
-  limit on how long "select()" can delay, in case it wants to also do polling.
-
-2004.07.22:
-- Fixed a serious bug that was causing some MPEG Program Stream files to be parsed
-  incorrectly - especially if they have non-MPEG header data at the front.
-- Modified the way in which "Medium" objects are reclaimed, to overcome an
-  obscure bug.
-
-2004.07.20:
-- Added a comment to "DeviceSource.cpp" to clarify the purpose of "fTo", because
-  several people have gotten this wrong.
-- Made ~BasicUsageEnvironment protected (just like ~UsageEnvironment)
-- Fixed "samplingFrequencyFromAudioSpecificConfig()" to remove a memory leak.
-
-2004.07.16:
-- Fixed a bug in "AMRAudioRTPSource", in the way that it handled input RTP packets
-  that contained more than one AMR frame.
-  (Thanks to Gabriel Bouvigne for reporting this problem.)
-- We now automatically reclaim the memory that was allocated for the "UsageEnvironment"
-  "liveMediaPriv" and "groupsockPriv" structures, once their tables become empty.
-
-2004.07.14:
-- Updated "QuickTimeFileSink's" MPEG-4 audio recording mechanism again, this time
-  to support aacPlus as well as regular AAC.
-
-2004.07.13:
-- Updated "QuickTimeFileSink" to support recording MPEG-4 audio (including
-  hint tracks).
-- Modified "MPEG4VideoStreamFramer" to allow simplified subclasses that take
-  discrete frames as input (and therefore don't need a full parser).
-
-2004.07.07:
-- Added the (rather bogus) "a=x-qt-text-nam:" and "a=x-qt-text-inf:" attributes
-  to the SDP descriptions delivered by "RTSPServer" (in response to a "DESCRIBE"
-  operation).  These attributes get the same strings as the "s=" and "i=" lines
-  (respectively).  However, QuickTime Player doesn't do anything with those lines,
-  but does recognize the "a=x-qt-*" lines.
-
-2004.07.06:
-- Modified the code so that it will build for WinCE.
-  (Thanks to Gabriel Bouvigne for these changes.)
-
-2004.07.02:
-- Fixed a bug in HashTable::RemoveNext() (noted by Greg Bothe)
-- Added partial support for recording MPEG-4 audio in "QuickTimeFileSink".
-  (Hinting is not yet working properly for this media type.)
-- Added an option to "MPEG1or2AudioStreamFramer" to allow its presentation times
-  to be resynchronized by its input source.
-
-2004.06.18:
-- Fixed a bug in "MPEG1or2AudioStreamFramer" (in the way it was checking for
-  syncwords at the start of each frame).
-- Updated the "MPEGVideoStreamFramer" (base) class to report "fNumTruncatedBytes".
-- Increased "OutPacketBuffer::numPacketsLimit" from 20 to 30.
-
-2004.06.17:
-- Another improvement to the "MPEG1or2Demux" parsing code.
-- Updated "QuickTimeFileSink" to support recording MPEG-4 video tracks into
-  ".mov" files.  (There's also basic support for recording MPEG-4 audio, but
-  this isn't quite working yet.)
-
-2004.06.14:
-- Updated "MPEG1or2Demux" to make the checking for a PACK_START_CODE more
-  robust if it's not immediately present where we expect to see it.
-- Fixed a bug in "JPEGVideoRTPSource" that could cause a problem on
-  64-bit architectures.
-  (Thanks to Andrey Filippov for noticing this.)
-
-2004.06.11:
-- Removed an error from a error message in StreamParser.
-
-2004.06.09:
-- Updated the implementation of the aggregate and non-aggregate RTSP "PLAY"
-  operations to not include a "Range:" header if the 'start' parameter is < 0.
-  (This is used when resuming from a "PAUSE", for example.)
-  Also, removed an unnecessary "Range:" header from the "PAUSE" command.
-  (Thanks to Gabriel Bouvigne for this suggestion.)
-- Reimplemented "MultiFramedRTPSource::doGetNextFrame1()" to use iteration
-  rather than recursion, in the case where a large frame is fragmented over
-  multiple incoming RTP packets.  This avoids the possibility of stack overflow
-  occurring if there are very large fragmented frames in the input data.
-
-2004.06.07:
-- Added optional "start" and "end" parameters to the aggregate "PLAY" operation
-  in "RTSPClient".  (We had already done this for the non-aggregate "PLAY" operation.)
-- Made the input banks buffers in "StreamParser" heap-allocated, rather than making
-  them member variables.  This avoids any potential compiler problems with having
-  such large structures as member variables.
-
-2004.06.03:
-- Added the new 'liveMedia' class "MPEG2TransportFileServerMediaSubsession", for
-  unicast on-demand streaming of MPEG-2 Transport Stream files.
-- Added the new test programs "testMPEG2TransportStreamer" and
-  "testMPEG1or2ProgramToTransportStream", and added support for Transport File
-  streaming to "testOnDemandRTSPServer".
-  (Thanks to DVAgroup Inc. for funding this work.)
-
-2004.06.02:
-- Fixed "MediaSession" to no longer apply the normal RTP 'M' bit rule
-  when processing incoming "video/MP2T" (or "video/MP1S" or "video/MP2P")
-  streams.  (For such streams, the 'M' bit does not mean 'end of frame'.)
-
-2004.06.01:
-- Updated "RTSPClient" to handle "Session:" headers that have a trailing
-  ";timeout=" part.  (Thanks to Gabriel Bouvigne for suggesting this.)
-
-2004.05.31:
-- We now handle SDP "m=" lines with an optional <number-or-ports> field
-  (although we don't actually do anything with this value).  Thanks to
-  Derk-Jan Hartman for this suggestion. 
-
-2004.05.29a:
-- Made a correction to the previous change.
-
-2004.05.29:
-- Added a call to "DarwinInjector" to set the TCP socket's send buffer to 100 kBytes.
-
-2004.05.28:
-- Renamed some variables in "MP3Internals.cpp" (and made them static) to
-  overcome a name conflict seen by the VLC developers.  (Thanks to
-  Derk-Jan Hartman for pointing this out.)
-
-2004.05.26:
-- Fixed a bug (apparently introduced with recent header file changes) that
-  could cause MP3 files to not be read correctly on Windows.  (In particular,
-  this could cause "testMP3Streamer" to not work correctly on Windows.)
-  Thanks to David Skiba for the bug report.
-
-2004.05.24:
-- Added a new member function "lastReceivedSSRC()" to "RTPSource".  This makes it
-  possible for a receiver to demultiplex incoming RTP data based on SSRC.
-  (Later this functionality should perhaps be added to "(MultiFramed)RTPSource"
-  instead.)
-- More updates to "DarwinInjector".
-
-2004.05.19:
-- Another update to "openRTSP" for a customer job.
-
-2004.05.17:
-- Added a new test program "testMPEG4VideoToDarwin.cpp" that is similar
-  to "testMPEG4VideoStreamer", except that instead of transmitting the
-  video RTP/RTCP packets via multicast, it transmits them - via a RTSP TCP
-  connection - to a remote Darwin Streaming Server.
-
-2004.05.12:
-- Added a new "liveMedia" class - "DarwinInjector" - that can be used to send an
-  audio and/or video RTP/RTCP stream to a remote Apple 'Darwin' (aka. QuickTime)
-  Streaming Server, for playing by (potentially multiple) RTSP clients.
-- Added a new test program "testMPEG1or2AudioVideoToDarwin.cpp" that is similar
-  to "testMPEG1or2AudioVideoStreamer", except that instead of transmitting the
-  audio/video RTP/RTCP packets via multicast, it transmits them - via a RTSP TCP
-  connection - to a remote Darwin Streaming Server.
-
-2004.05.09:
-- Removed a line of junk that had erroneously been left at the start of Makefile.tail.
-- The "testRelay" test program has been reprogrammed in the usual liveMedia
-  'source->sink' style.
-
-2004.05.07:
-- Another update to RTSPClient for a customer job.
-
-2004.05.04:
-- Added an #include to "BasicUDPSink.cpp" to prevent a compilation problem on
-  some platforms.
-
-2004.05.02:
-- Some updates to RTSPClient and openRTSP for a customer job.
-
-2004.04.27:
-- Fixed the round-trip time estimation routine in "RTPSink" to allow for
-  the possibility of the computed round-trip time being negative.  This can
-  happen if there is clock drift between the sender and receiver, and if the
-  actual round-trip time was quite small.  If this happens, the returned
-  round-trip time value is zero.
-  (Thanks to Dixon Siu for alerting us to this issue.)
-
-2004.04.23:
-- Updated some #ifdef's so that the code will compile with "mingw" on Windows.
-  (Thanks to Joey Parrish for this.)
-- Added a "BasicUDPSink" class to "liveMedia", for UDP streaming without RTP.
-- Added new 'filter' classes to "liveMedia" for
-  - converting MPEG Program Streams to Transport Streams.
-  - 'framing' MPEG Transport Streams to return the 'duration' of each Transport
-  packet (i.e., the inter-packet time gap).
-
-2004.04.09:
-- Fixed a byte-ordering bug in the code for streaming from WAV audio files
-  (used in "testWAVAudioStreamer" and "testOnDemandRTSPServer").  We were converting
-  16-bit samples from host to network order before streaming them.  That was wrong,
-  because audio samples are always stored in WAV files in little-endian order.
-  The correct thing to do was to convert from little-endian to big-endian order. 
-
-2004.03.27:
-- Fixed a minor bug in the top-level Makefile.  (Thanks to Matteo Nastasi for
-  noting this.)
-
-2004.03.27:
-- Modified "H261VideoRTPSource" so that it returns individual packet payloads to
-  the caller, rather than waiting to form complete frames.  Also, added a member
-  function "lastSpecialHeader()" that returns the 4-byte special header for the
-  most recently-read payload.
-
-2004.03.23:
-- Added support for unicast RTSP/RTP streaming from VOB files, and added an example
-  of this to "testOnDemandRTSPServer".
-
-2004.03.17:
-- Made a series of minor bug fixes and improvements suggested by Sony.
-
-2004.03.15:
-- Fixed a bug in "OnDemandServerMediaSubsession" (the RTCP instance was being
-  deleted at the wrong time).  (Thanks to Clark Taylor for noticing this.)
-- Minor modifications to the 2004.02.26 "RTPSink" changes.
-- Updated the "AMRAudioRTPSource" implementation to support 'bandwidth-efficient'
-  mode.  (Warning: This has not yet been tested.)
-
-2004.03.12:
-- Updated the "RTSPClient" class to support an aggregate "PAUSE" operation.
-
-2004.03.11:
-- Added an implementation of AMR audio RTP receiving ("AMRAudioRTPSource"), to
-  match the existing"AMRAudioRTPSink".  Also, added a new class "AMRAudioFileSink"
-  (a subclass of "FileSink") that outputs an AMR audio input stream to a file,
-  including the file 'magic number' and frame headers.  "openRTSP" was also updated
-  to output received AMR audio streams using "AMRAudioFileSink"s.
-  (Thanks to SIGOS Systemintegration GmbH for funding this work.)
-- Cleaned up the "RTPSource" changes that were made in version 2004.02.26.
-
-2004.03.05:
-- Updated the "RTSPServer" implementation to properly handle aggregate
-  operations for which the URL ends with a "/".  Some clients, such as
-  "gmp4player" do this.
-
-2004.03.03a:
-- Fixed a bug in "MultiFramedRTPSource.cpp" where we were not properly
-  skipping over "contributing source" fields, if they were present in the
-  RTP header.  (Thanks to Phillip Bruce for noticing this.)
-
-2004.03.03:
-- Fixed the "testMP3Streamer" test program to keep the RTP sink, RTCP instance,
-  Groupsocks, and RTSP server (if used) open across all iterations of the loop.
-  (Thanks to Frank Xia for noticing this problem.)
-
-2004.03.02a:
-- The previous version accidentally had the built-in RTSP server enabled in
-  "testMP3Streamer". It should be disabled by default.
-
-2004.03.02:
-- Fixed a few potential errors that were found by running "valgrind" on some of
-  the test programs (on Linux).
-
-2004.03.01:
-- Added two new options to "openRTSP" (and "playSIP"):
-  "-E <max-inter-packet-gap-time>"
-      Tells the program to close the stream if no new packets have been
-      received in at least <max-inter-packet-gap-time> seconds.
-  "-B <input-socket-buffer-size>"
-      Tells the program to set the network socket input buffer (for each
-      input stream) to <input-socket-buffer-size> bytes.  (This can be useful
-      when testing QOS for different input buffer sizes.)
-  (Thanks to SIGOS Systemintegration GmbH for funding this work.)
-
-2004.02.26:
-- Added - to "RTPSink" - a database of statistics from incoming RTCP
-  "Reception Report" (RR) packets.  (This mirrors the similar database
-  for RTCP SR packets that was already part of "RTPSource".)  (Thanks to
-  Clark Taylor for contributing this code.)
-
-2004.02.23:
-- Fixed a bug in "MP3ADUinterleaving.cpp" that was causing frame durations
-  to not be set properly when handling interleaved MP3 ADUs.
-
-2004.02.20a:
-- Corrected a typo in the previous "#ifdef"s
-
-2004.02.20:
-- Added "#ifdef"s to the two files that #include <strstream.h>, so that they
-  will compile OK with GCC v3.*.  (Thanks to Goetz Waschk for this.)
-- Changed the stream parser debugging statements to make it clear that the
-  use of C++ language exceptions by the stream parsing code is normal, and
-  is not an error. 
-
-2004.02.19:
-- Updated the "RTSPServer" implementation to support RTP-over-TCP streaming
-  (if requested by the client).
-
-2004.02.13:
-- Changed the implementation of the "BasicUsageEnvironment" "operator<<" 
-  member functions so that they use "fprintf(stderr, ..." rather than
-  "cerr << ...".  People compiling in some environments were getting
-  complaints about "cerr" being undefined (presumably because the right
-  #include files weren't being found).  However, everyone should have
-  "stdio.h".  (Thanks to Clark Taylor for this suggestion.)
-- Changed the "genMakefiles" script to complain if the user tries to
-  run it without an "<os-target"> parameter.
-
-2004.02.09:
-- Updated "RTSPServer" once again - this time to ensure that each incoming request
-  is read completely (i.e., up until the trailing <CR><LF><CR><LF>).
-  (Thanks to Regis Feneon for helping to fix this.)
-- Added a new "WAVAudioFileServerMediaSubsession" class to support on-demand
-  streaming from WAV audio files.  Also, updated the "testOnDemandRTSPServer"
-  test program to illustrate this.
-
-2004.02.05:
-- Updated the "WindowsAudioInputDevice" project to build two different versions
-  of the library: One that uses Windows' built-in mixer; another that doesn't.
-
-2004.02.04:
-- Fixed an obscure bug in "MPEG4ESVideoRTPSink" that could (very rarely)
-  cause incorrect RTP timestamps to be set for the last fragmented packet
-  of large MPEG-4 frames.  This could cause QuickTime Player's video playback
-  to freeze.
-
-2004.02.03:
-- Added new "liveMedia" classes "MPEG1or2FileServerDemux" and
-  "MPEG1or2DemuxedServerMediaSubsession" for supporting on-demand RTSP/RTP
-  streaming of MPEG-1 or 2 Program Stream files.  Also, updated the
-  "testOnDemandRTSPServer" test program to support streaming of such
-  a file.
-- We no longer set SO_REUSEPORT for stream (TCP) sockets, because it usually
-  doesn't make sense to share TCP ports.  (As a side effect, this means that it
-  will no longer be possible to run more than one RTSP server (using the same
-  TCP port) simultaneously on the same computer - something that should never have
-  been possible in the first place.)
-- Fixed a minor RTSP server bug that was causing incorrect "destination"s to be set
-  (for multicast streams) in the "SETUP" response "Transport:" header.
-
-2004.01.28:
-- Yet another bug fix to "MPEG4VideoStreamFramer", to properly handle the
-  case where MPEG-4 "GOV" headers don't occur on exact 'second' boundaries.
-  (Thanks to Michael Niedermayer (via Michael Hess) for clarifying this.)
-
-2004.01.27:
-- Fixed a bug in the previously added (but normally "#ifdef"d out)
-  debugging code in "MultiFramedRTPSource.cpp".
-- Made a fix to the (normally "#ifdef"d out) debugging code in
-  "AC3AudioStreamFramer.cpp".  (Thanks to Yigal for noticing this.)
-
-2004.01.24:
-- Changed "openRTSP" to use 20 kByte "FileSink" receive buffers by default,
-  instead of 10 kBytes.  (Some frames in MPEG-4 streams were exceeding the
-  previous limit.)
-- Added code to "MultiFramedRTPSource.cpp" to easily let the developer
-  simulate packet loss.
-
-2004.01.23:
-- Changed "RTSPServer" to include a "Content-Base:" header in "DESCRIBE"
-  responses.  This overcomes a bug in QuickTime Player, which sends incorrect
-  "SETUP" URLs otherwise.
-- Fixed a bug in "MPEG4VideoStreamFramer" that was causing some frames
-  to erroneously be given a duration of 0. 
-
-2004.01.22:
-- Made another improvement to the "RTSPServer" implementation.  It once again
-  properly handles streams without a stream name (i.e., where the "streamName"
-  parameter to "ServerMediaSession::createNew()" was NULL.
-- Updated the (little-used) "ByteStreamMultiFileSource" class to take
-  "preferredFrameSize" and "playTimePerFrame" parameters, just like
-  "ByteStreamFileSource".  Also added a member function to ask whether
-  a new file has just been read from.
-
-2004.01.21:
-- Made several improvements/bugfixes to the "RTSPServer" implementation:
-  - Worked around an apparent bug in QuickTime Player: It sometimes
-  doesn't include a proper URL in RTSP "SETUP" requests.
-  - Corrected the 'frame' (really tick) rate and frame duration that
-  are computed for 'fixed_vop_rate' MPEG-4 video streams.
-  - Compensated for some buggy MPEG-4 video streams that don't set
-  timestamp information properly.
-- MPEG-4 video end codes will now be included in the outgoing RTP stream,
-  and received properly by RTSP clients.
-- Fixed "RTSPClient" to be more tolerant of RTSP "Transport:" headers that
-  contain more than one successive ';' character.  (Darwin Streaming Server
-  sometimes does this.)
-
-2004.01.19:
-- Changed "RTSPServer" to not create per-session state when handling
-  "DESCRIBE", but instead to wait until "SETUP".  This fixes a problem
-  that was causing the "VLC" media player to fail to work with our
-  "RTSPServer" implementation, because VLC uses one RTSP TCP connection
-  to do the "DESCRIBE", and then another to do "SETUP" and "PLAY".
-  (Thanks to Emmanuel Dufour for pointing this out.)
-- Updated "MPEG4VideoStreamFramer" to include the VIDEO_SEQUENCE_END_CODE
-  in the output stream if it sees it in the input.
-
-2004.01.10:
-- Fixed the "RTSPServer" implementation to properly return a "server_port" field
-  in the RTSP "SETUP" response for unicast streams.  Also, the server ports
-  (RTP and RTCP) are now chosen separately, and will no longer be the same
-  as the client ports if the client and server are running on the same machine.
-  (That did not work on some Linux systems.)
-- Fixed a bug in "MP3ADU" that was causing frame durations to not be set properly
-  when translating between MP3 frames and ADU frames.
-
-2004.01.09:
-- Modified "RTSPClient" to handle embedded NULL characters in a SDP
-  description.  (These are not legal, but they have been seen in some cases.)
-
-2004.01.06:
-- Modified the FramedSource 'after getting' function signature to take two new
-  parameters: (1) The number of bytes (if any) that were truncated from the
-  delivered data, and (2) The duration (in microseconds) of the delivered frame.
-  For backwards compatibility with old code, the old 'after getting' function
-  signature is still supported, but will be removed in some future version of
-  the code.  (The "getPlayTime()" function was also removed.)
-
-2003.12.26:
-- Made "FramedFilter" objects implement the "stopPlaying()" function by
-  also calling "stopPlaying()" on their source object.
-- Fixed an obscure bug in "RTSPClient".
-
-2003.12.20:
-- Made the "video/H263-2000" MIME type use the same RTP payload format as
-  "video/H263-1998".  (Thanks to Norbert Doneth for suggesting this.)
-
-2003.12.19:
-- Fixed a minor bug in "RTSPServer" (some allocated memory wasn't being
-  freed properly).  (Thanks to Konstantin Lunin for finding this.)
-
-2003.12.16:
-- Added "-DSOCKLEN_T=socklen_t" to the "COMPILE_OPTS =" line in
-  the file "config.solaris", so that the code will compile
-  correctly for 64-bit Solaris systems.
-
-2003.11.25:
-- Put some error checks back into "WindowsAudioInputDevice".
-
-2003.11.21:
-- Some case-insensitive string comparisons weren't working properly in Windows; fixed.
-
-2003.11.19:
-- Added a global Boolean variable to flag when RTP I/O over a TCP connection fails.
-  This hack allows higher-level code to check for this.
-
-2003.11.16:
-- Fixed "RTPInterface" to not infinite loop when trying to read from a TCP
-  connection that has closed.
-- Modified "BasicTaskScheduler" to overcome a bug in Windows that sometimes
-  causes "select()" to fail.
-
-2003.11.13:
-- Made "WindowsAudioInputDevice" a bit more robust against broken audio drivers.
-
-2003.11.06:
-- Modified "groupsock/inet.c" to allow the system-supplied "random()" and "srandom()"
-  functions to be used instead of our own "our_..." implementation.
-  This is done if USE_SYSTEM_RANDOM is defined (e.g., in the "config.*" file).
-
-2003.11.06:
-- Modified the "MPEGVideoStreamParser" constructor, in response to a complaint
-that some compilers would choke on the old code.
-
-2003.10.30:
-- Added a warning output message to "MultiFramedRTPSink::afterGettingFrame1()"
-  whenever the input frame appears to exceed the maximum buffer size.  This
-  maximum buffer size can be increased by changing
-  "OutPacketBuffer::numPacketsLimit".
-
-2003.10.27:
-- Changed the "MultiFramedRTPSource" error message (added in 2003.10.04) to apply
-only to frame sizes > 1000, so that (e.g.) QCELP RTP sources don't trigger it.
-
-2003.10.24:
-- Fixed the RTSP server implementation to put SDP lines in the correct order
-(as defined by the SDP speecification).  Also, added "Cseq:" lines that were
-missing from "404" error responses.  (Thanks to Bill May for noting these bugs.)
-- Improved the implementation of MPEG-4 video framing and streaming.
-
-2003.10.08:
-- Fixed a bug in the previous "FileSink" update that was causing "openRTSP"
-to crash when recording a MPEG-4 video stream (using the "-m" option).
-(Thanks to Jiangzhou Scu for noticing this bug.)
-
-2003.10.07:
-- Updated the "FileSink" class to take an optional Boolean parameter
-"oneFilePerFrame".  If set, a separate file will be output for each
-incoming frame.  The frame's presentation time is used as a
-file name suffix, to distinguish the files.
-- Added a new option "-m" to "openRTSP" (and "playSIP").  This option
-causes a separate file to be written for each frame (using the
-above-mentioned new feature of "FileSink").
-
-2003.10.05:
-- Renamed the new openRTSP/playSIP "-S" option to "-b".
-
-2003.10.04:
-- Added an error message to "MultiFramedRTPSource" to report when
-the client's receive buffer is too small for an incoming frame.
-(This could happen with large JPEG frames, for example.)
-- Updated the signature to "FileSink" to take an optional 'buffer size'
-parameter as argument.  (The default value is 10000.)
-- Added a "-S <file-sink-buffer-size>" option to "openRTSP" and "playSIP". 
-
-2003.09.30:
-Improved the default implementation of
-"RTPSink::hasBeenSynchronizedUsingRTCP()" to more accurately report
-whether or not the most recently-delivered packet's presentation time
-was synchronized using RTCP SRs.  (Thanks to Luca Abeni for pointing
-out the possibility of a problem with the old implementation.)
-
-2003.09.25:
-Improved the support for unicast RTSP/RTP streaming.  Also, added a new
-test program "testOnDemandRTSPServer" that demonstrates how to use this.
-
-2003.09.19:
-- Added support for unicast streaming from a "RTSPServer".
-  (A test program that demonstrates this will be available shortly.)
-  (Thanks to TNO Fysisch en Elektronisch Laboratorium (Netherlands)
-  for funding this work.)
-- Modified the "strDup()" function to return NULL (instead of crashing)
-  if passed a NULL parameter.
-
-2003.09.11:
-- Another improvement/bugfix to the "MultiFramedRTPSink"
-  implementation.
-- Changed the implementation of "RTSPServer" and "ServerMediaSession"
-  in preparation for implementing unicast streaming from RTSP servers.
-  (This is something that's not ready yet, but close...)
-
-2003.09.05:
-Fixed the implementation of "JPEGVideoRTPSource" so that it prepends
-a proper JFIF JPEG header to the start of each incoming JPEG frame.
-This means that programs such as "openRTSP" and "MPlayer" will now
-receive/play JPEG/RTP streams correctly.
-
-2003.09.03:
-Improved the implementation of "MultiFramedRTPSink" to more efficiently
-handle the case where input frames get broken up into multiple outgoing
-RTP packets.  We now eliminate an uncessary "memmove()" for each
-fragment.  In particular, this should make MPEG-1 or 2 and motion-JPEG
-video streaming more efficient.
-
-2003.09.01:
-- Added support for reading and streaming AMR audio files (as defined in
-RFC 3267).  Also added a new test program "testAMRAudioStreamer".
-(Thanks to TNO Fysisch en Elektronisch Laboratorium (Netherlands) for
-funding this work.)
-
-2003.08.28a:
-- When "openRTSP" writes out a recorded MPEG-4 Elementary Stream video file,
-it now writes SDP 'config' information to the front of the file beforehand.
-This 'config' information contains VOL etc. headers that can be useful
-for playback. 
-
-2003.08.28:
-- Added 'framer' and RTP sink classes for MPEG-4 Elementary Stream video.
-(Thanks to TNO Fysisch en Elektronisch Laboratorium (Netherlands) for
-funding this work.)
-- Added a new test program "testMPEG4VideoStreamer".
-- Fixed a bug with RTP-over-TCP reading that could cause a crash if the
-same TCP socket number gets reused for a later stream.  Also, made this
-code more thread-safe.
-
-2003.08.21:
-Renamed all of the MPEG-1 or 2 class and program names from "MPEG*" to
-"MPEG1or2*".  This is to distinguish these from the classes and programs
-that use MPEG-4.
-
-2003.08.19:
-Made the maximum buffer size in "MediaSink.cpp" a parameter that can be 
-set (changed) at runtime.  (Reset the default back to 20* packet size)
-
-2003.08.18:
-- Fixed "JPEGVideoRTPSink" to use the standard RTP payload format code
-(26) for JPEG RTP streams.
-- Updated "MediaSink.cpp" to increase the maximum buffer size for incoming
-data.  This makes it possible to stream large JPEG frames (which are
-fragmented over multiple outgoing RTP packets).
-
-2003.08.16:
-- Added new classes "AudioRTPSink" and "VideoRTPSink" as parent classes
-of the various audio and video RTP sink classes, respectively.
-- Added a new "JPEGVideoRTPSink" class, and a "JPEGVideoSource" class
-that can be used as an abstract base class for particular JPEG sources.
-
-2003.08.07:
-Minor change to "MediaSink".
-
-2003.07.29:
-Updated "RTSPClient" to include a "tearDownMediaSession()" operation,
-in addition to "tearDownMediaSubsession().  "openRTSP" now uses just
-the "tearDownMediaSession()" operation.  (Darwin Streaming Server was
-barfing with "tearDownMediaSubsession()").  Thanks to Edward Estabrook
-for suggesting this.
-
-2003.07.27:
-Added a new "-F <fileName-prefix>" option to "openRTSP" (and "playSIP").
-This can be useful if you are running "openRTSP" several times,
-in the same directory, to play several different RTSP streams
-(e.g., from a script).  (Thanks to Norbert Donath for this suggestion.)
-
-2003.07.14:
-Updated the "WAVAudioFileSource" implementation (and the
-"testWAVAudioStreamer" test program) to better report any reason for
-a WAV file to be invalid.
-
-2003.07.13:
-- Added new filter classes for converting between 16-bit PCM and
-8-bit u-law audio, and between host and network order for 16-bit values.
-(See "liveMedia/include/uLawAudioFilter.hh" for details.)
-- Added a new class "WAVAudioFileSource" for reading/processing
-WAV audio files.
-- Added a new test program "testWAVAudioStreamer" that reads a WAV
-audio file - "test.wav" - and streams it via multicast (using a built-in
-RTSP server).
-- Updated "MediaSession" to recognize "L8" and "L16" RTP audio streams
-(to be handled by "SimpleRTPSource").
-
-2003.07.07:
-- Fixed a bug that would cause "vobStreamer" to crash if (incorrectly)
-run with no arguments.
-- Updated the "test*Streamer" test programs to print out the "rtsp://"
-URL of the built-in RTSP server (if it's enabled).
-
-2003.07.01a:
-Updated the "WindowsAudioInputDevice" subdirectory to:
-- Change the name of the library from "WindowsAudioInputDevice.lib" to
-"libWindowsAudioInputDevice.lib".
-- Added a console test program - "showAudioInputPorts" - that lists
-the audio input ports that are currently available.
-
-2003.07.01:
-Added a new subdirectory "WindowsAudioInputDevice", which is a
-Windows-specific implementation of the "AudioInputDevice" class.
-This can be used by Windows applications to read PCM audio from
-a sound card.
-
-2003.06.28:
-Added an optional parameter (default, True) to "SimpleRTPSource"
-that says whether to use the RTP "M" (marker) bit to indicate the
-last (or only) fragment of a video frame.  (Suggested by
-Cezar Plesca.)
-
-2003.06.27:
-Added a "AudioDeviceSource" class to the "liveMedia" library.
-This class is a generic audio input device (such as a microphone
-or a sound card) - to be subclassed for specific OS platforms. 
-
-2003.06.26:
-- Updated the "RTSPServer" implementation to respond to "PAUSE"
-requests.  (It doesnt actually pause the stream; just returns "OK".
-This makes QuickTime Player happier.)
-- Added a "-o" option to "openRTSP" (and modified "RTSPClient"
-accordingly).  This option causes openRTSP to send an "OPTIONS" command
-to the server, and prints out the response.
-
-2003.06.17:
-Added support for MPEG-4 generic RTP sinks.  (Currently, only the
-"AAC-hbr" audio mode is supported, and only one AAC frame is packed
-into each outgoing RTP packet.)
-
-2003.06.13:
-- Fixed a bug in "ServerMediaSubsession" that could cause a memory leak.
-(Thanks to Frederik Bonte for finding this.)
-
-2003.06.07:
-- Fixed a minor bug in "MPEGVideoRTPSink": The RTP "M" bit is now set
-only on the last fragment, if a frame is fragmented.  (Thanks to
-Tym Altman for pointing this out.)
-- Improved support for AudioRTPSinks that have more than one audio channel.
-
-2003.05.31:
-Fixed a bug in "SimpleRTPSink" that would cause it to not generate correct
-RTP timestamps on outgoing packets.
-
-2003.05.29:
-Fixed a bug in "RTSPServer" that would cause it to get into an infinite
-loop if a client's connection was terminated unexpectedly.
-
-2003.05.28:
-Fixed some typos in comments.
-
-2003.05.23:
-Some minor changes to reduce the number of bogus warning messages
-displayed when compiling using Visual C++.
-
-2003.05.22b:
-Fixed a bug in "SIPClient" (thanks to Reini Urban for helping track this
-down).
-
-2003.05.22a:
-Fixed a couple more minor bugs that were causing "valgrind" to complain.
-
-2003.05.22:
-Fixed a bug in "SIPClient" (a field was not getting initialized properly)
-
-2003.05.21:
-- Because not all platforms define 'errno' the same way, 'errno' is now
-implemented as a pure virtual function "getErrno()" in
-"UsageEnvironment".  "BasicUsageEnvironment" defines this function to
-just return "errno", but other subclasses could implement it in other
-ways.
-- Added support for setting and reading information in "RTP-Info:"
-headers in RTSP "PLAY" response. (Thanks to Romulus Grigoras for
-contributing this.)
-
-2003.05.19:
-Fixed a bug in "SIPClient" that could cause a crash.  (Thanks to
-Reini Urban for finding this.)
-
-2003.05.16:
-- Removed all calls to "fprintf(stderr, ...)" and "cerr << ..." from
-the library code.  Instead, we now use "operator<<" virtual functions
-that are defined on the "UsageEnvironment".  "BasicUsageEnvironment"
-defines these by outputting to "cerr", but other subclasses of
-"UsageEnvironment" can define them to do console output whichever
-way they wish.
-
-2003.05.15:
-- Moved the "select()" call in "readSocket()" (GroupsockHelper.cpp) into
-  a separate function, to allow it to be easily reimplemented
-  if desired.
-- More minor changes to "RTPSource" stats handling, and the "-Q" option
-  to "openRTSP"/"playSIP".
-
-2003.05.12:
-- Restructured "BasicTaskScheduler" as two hierarchical classes:
-  "BasicTaskScheduler0" (an abstract base class), and
-  "BasicTaskScheduler".
-  This makes it easier to subclass (e.g., to reimplement "SingleStep").
-  A subclass reimplementation would use "BasicTaskScheduler0".
-- Removed "our_bcopy()", and use "memmove()" instead, because everyone
-  seems to implement that.
-- Fixed a bug in "RTPSource" that could cause packet loss stats to be
-  reported incorrectly if the first RTP sequence number received was 0.
-
-2003.05.06:
-Minor changes to the "openRTSP" QOS stats reports.
-
-2003.05.05:
-Changed the "start" and "end" parameters to
-"RTSPClient::playMediaSubsession()" from int to float, for increased
-granularity.  (Suggestion by Cezar Plesca.)
-
-2003.05.03:
-- Added support for pausing/resuming to "RTSPClient".
-(Thanks to Romulus Grigoras for contributing this.)
-- Fixed a couple of bugs in "SIPClient".
-
-2003.04.28:
-- Cleaned up and improved the "DelayQueue" implementation.
-(This time it works properly, I hope.)
-
-2003.04.27:
-- Temporarily backed out the previous change to "DelayQueue", because it
-broke MPEG video streaming (causing it to play too slowly). 
-
-2003.04.26:
-- Made "DelayQueue" a little more accurate, by adjusting for the time
-that has elapsed since the last alarm, when adding a new entry to the queue.
-- Fixed a bug in "RTPSource" that could cause packet loss statistics to not
-be reported accurately (in RTCP) if incoming packets were misordered.
-- Updated "openRTSP" and "playSIP" to take a new "-Q" option, which
-prints out QOS data at the end of the session.
-
-2003.04.24:
-- Added a mechanism for registering an optional, auxilliary read handler
-with a "RTPSource" or "RTCPInstance".  Such a handler would get called
-after each new packet is read.
-- Changed "SimpleRTPSink" to (by default) set the RTP "M" bit on
-video streams iff the packet contains the last (or only) fragment of
-a frame.
-
-2003.04.23:
-- More improvements/fixes to the handling of SSM sessions.
-- Fixed a bug in RTSPServer that could cause a crash if the client
-quit suddenly.
-
-2003.04.20:
-- Updated "MediaSession" to recognize
-  a=source-filter: incl ...
-lines in SDP descriptions (for SSM sessions), and to do the appropriate
-SSM-style multicast joins in this case (and also to send back RTCP via
-unicast).
-- Updated the RTCP implementation to reflect incoming unicast RTCP packets
-back to the multicast group in the case where we're a SSM source.
-- Update "vobStreamer" and the various "test*Streamer" test programs to
-properly behave as SSM sources, when we have specified this.
-
-2003.04.18:
-- Updated the "*ServerMediaSession" classes to (optionally) output
-SSM-specific information in SDP descriptions.
-- Updated "vobStreamer" to choose a random multicast address in the SSM
-range.
-
-2003.04.12:
-- Fixed "MPEGVideoStreamFramer" to allow for the possibility of
-the GOP "time_code" field remaining unchanged in the source stream.
-- Elimination of more unnecessary global variables.
-
-2003.04.11:
-- Added support for an optional user name and password inside a RTSP
-or SIP URL.
-- The media lookup table (used in "Media.cpp") is now allocated
-dynamically, and stored in the "UsageEnvironment", rather than
-being a global variable.
-This makes it possible to have different threads, within the same
-address spaces, accessing the library code.
-(Each thread would need to have its own "UsageEnvironment" and
-"TaskScheduler", though.)
-
-2003.04.09:
-Changed "BasicTaskScheduler::SingleStep()" to execute only one delay
-queue task (along with any data input events) during each iteration.
-This prevents a possible livelock if the delay queue always has events
-outstanding.  (Thanks to Ruth Sadler for pointing this out.)
-
-2003.04.04:
-- More improvements to "vobStreamer" (which has also been renamed
-from "VOBStreamer".
-
-2003.04.02:
-- Made another change to the order that things are closed when exiting
-"openRTSP", to help avoid a potential race condition that can occur
-when using the "-t" option.  (Thanks to Romulus Grigoras for reporting
-this.)
-- Updated "MPEGDemux" to properly handle the case where someone tries
-to read from it after its input source has already closed.
-- Several improvements to "VOBStreamer".
-- Added "ByteStreamMultiFileSource" to the "liveMedia" library.
-This generalizes "ByteStreamFileSource" to allow more than one input
-file to be read, in sequence.
-
-2003.04.01:
-Fixed a bug in "openRTSP" that could cause it to crash when exiting
-(if the "-t" option was used).
-
-2003.03.31:
-Added a new test program "VOBStreamer" to "testProgs".
-This program reads a "VOB" file (e.g., from a non-encrypted DVD),
-and streams the component video (MPEG) and audio (AC3) component streams
-using RTP multicast.
-(Online documentation to follow...)
-
-2003.03.30:
-Added "AC3AudioRTPSource" and "AC3AudioRTPSink".
-
-2003.03.28:
-- Fixed a bug in "MPEGVideoStreamFramer" that would cause it to generate
-incorrect presentation times if the MPEG video stream started out with
-a non-zero 'time_code'.
-- Updated "AC3AudioStreamFramer" to allow clients to get the stream's
-sampling rate before it reads the first frame.
-
-2003.03.25:
-Began adding support for AC3 audio/RTP streaming.
-
-2003.03.22:
-Added support for receiving H.261/RTP streams
-
-2003.03.14:
-- Removed calls to "strdup()", because that's a C-library function whose
-result should not be deleted using "delete" (or "delete[]").  Instead,
-we now provide our own C++ equvalent, called "strDup()".
-- Also, changed several "delete"s to "delete[]".
-(Thanks to Bill Kain for noting the need for this fix.)
-
-2003:03;11:
-Updated SIPClient to allow it to use an arbitrary source port number.
-This makes it possible to use it on the same host on which a SIP server
-is already running.
-
-2003.03.09:
-- Made "MediaSession"s parsing of SDP descriptions more robust, to allow for
-blank lines in the SDP description.  ("Be liberal in what you accept...")
-
-2003.03.07:
-- Added an optional "MIME subtype" parameter to "SIPClient", to allow
-SIP "INVITE"s to use a dynamic RTP payload format.  Updated "playSIP"
-accordingly, to add an optional "-D <mime-subtype-name>" argument.
-- Modified "FileSink" to close the source (and stop playing) if it gets
-an EOF when writing to the output file.  (Thanks to Ruud Schramp.)
-
-2003.03.03:
-Improved the implementation of "MPEG4GenericRTPSource".
-
-2003.02.28:
-- Fixed a bug that would cause RTSP clients to not set the server port
-number (for RTCP) correctly in some situations.  (Thanks to Alex Pollard.)
-- Fixed a bug in "RTSPServer" that would cause "Transport:" headers to not
-get generated correctly.
-
-2003.02.27:
-- Improved the "MultiFramedRTPSource" implementation to more cleanly handle
-packet loss in the case where frames are split into multiple RTP packets.
-- Parsed the optional "/<num-channels>" parameter that can appear at the
-end of "a=rtpmap:" lines for audio sessions.
-
-2003.02.17:
-More work on the experimental '-R <rtsp-url>' option to "playSIP"
-(and "openRTSP") that allows it to inject the incoming stream into
-a separate RTSP server.  This code is now working, although 
-currently only for a single PCMU or GSM audio stream.  Also, RTCP
-packets are not yet relayed between the source and destination. 
-
-2003.02.16:
-Improved RTSPClient and SIPClient to check for (and discard)
-any '\r' or '\n' that appears at the start of a response message.
-(Some weirdo servers can do this.)
-
-2003.02.10:
-Began adding a new option to "playSIP" (and "openRTSP") to allow the
-incoming media stream to be injected into a separate, destination
-RTSP server.  This still needs lots of work...
-
-2003.02.08:
-Fixed the "JPEGVideoRTPSource" implementation to properly prepend a
-synthesized JPEG header to each received frame of RTP data.  This now
-makes it possible to receive and play motion-JPEG RTP streams.
-
-2003.02.06a:
-- Fixed a bug in the SDP "config" attribute parsing.  (This affected
-the use of "MPEG4LATMAudioRTPSource".
-- Cleaned up the "createNew()" routines in each of the *RTPSource classes.
-- Added two new RTPSource classes - "MPEG4ESVideoRTPSource" and
-"MPEG4GenericRTPSource", for MPEG-4.  However, these have not been
-fully implemented yet.
-
-2003.02.06:
-Fixed some code that was 64-bit-unsafe.  (Thanks to Philipp Thomas for
-noticing this.)
-
-2003.02.05:
-- Cleaned up "RTSPClient", and added a method for doing an aggregate
-"PLAY" operation (in addition to the existing method that does a
-"PLAY" on an individual subsession).
-- Modified the "openRTSP" test program so that it does a single
-aggregate "PLAY", rather than a series of non-aggregate "PLAY"s, one for
-each subsession.  (RealNetworks' server doesn't support the latter.)
-- Added a new routine for parsing "AudioSpecificConfig" strings that
-can appear in SDP descriptions.
-- Added Morgan Multimedia's implementation of "JPEGVideoRTPSource"
-to the "liveMedia" library.  (I haven't yet tested this.)
-
-2003.02.04:
-Removed "-DUSE_OUR_BZERO=1" from "config.linux", because it no longer
-seems to be necessary, and it was breaking compilation for some people.
-
-2003.02.03b:
-Added an #include to "BasicUsageEnvironment/Lock.cpp" to fix a problem
-that someone encountered with NULL not being defined.
-
-2003.02.03a:
-Created a new header file "groupsock/include/NetCommon.h" that contains
-all networking-related #includes.  This also does the correct #includes
-for Windows, allowing Windows code to use Winsock-2 rather than Winsock-1.
-Also, modified "win32config" to use a "TARGETOS" of WINNT rather than
-WIN95, to make this all work.
-
-Thanks to Doug Kosovic for figuring out the magic incantations
-needed to get this all working.
-
-2003.02.03:
-- Improved "SIPClient" (in the "liveMedia") library, so that "INVITE"
-requests are retransmitted, as necessary, for reliability.
-- Added a "-A <rtp-payload-format>" option to "playSIP".  This allows the
-user to specify which audio RTP payload format should be received.
-(At present only static payload formats can be specified, and only
-audio codecs - not video.)
-
-2003.01.28:
-- Added support (in the "liveMedia" library) for a basic SIP client
-- Added a new test program "playSIP", similar to "openRTSP".  These two
-applications are now built from the same code base.
-
-2003.01.17:
-Further improvements to the MPEG-4 audio support.  We can now read
-(from the "MediaSubsession") the StreamMuxConfig "config" stream that
-was present in the SDP description.  Also added a routine that parses
-such a string, producing binary "AudioSpecificConfig" data.
-(See "MPEG4LATMAudioRTPSource.cpp" for details.)
-
-2003.01.16:
-Improved support for receiving MPEG-4 LATM audio.  Note that currently,
-this works only for streams that do not have a StreamMuxConfig present
-in the stream.
-
-2003.01.10:
-Added basic support for MPEG-4 LATM audio.  
-
-2002.12.21:
-Fixed a bug in the previous update to "QuickTimeFileSink"
-
-2002.12.20:
-- Another change to "QuickTimeFileSink", again to change the way that track
-durations are computed for ".mov" files.  Now, each track's duration is
-set to be the maximum of (i) the sum of the sample durations listed
-in the 'stts' atom, and (ii) the the sum of the durations listed in the
-track's 'edit list' (if any).
-- Updated the MP3 file parsing code to check for a 'Xing' VBR header in
-the first frame.  ("liveCaster" can use this information to print more
-sensible information about each file that it streams.)
-
-2002.12.10:
-Yet another change to "QuickTimeFileSink", this time to make sure that
-the duration of video tracks corresponds exactly to the sum of video
-sample durations listed in the 'stts' atom.
-
-2002.11.30:
-Renamed "TaskScheduler::blockMyself()" to "doEventLoop()", to better
-describe what this member function actually does.
-
-2002.11.25:
-Another change to "QuickTimeFileSink".  Now, when synchronzed tracks
-are requested, the durations of video frame samples are adjusted so
-that they correspond to actual RTP presentation times.  (This is not
-done for audio samples, however, because having audio samples vary
-in duration might break audio codecs.)
-
-2002.11.22:
-Updated "QuickTimeFileSink" once again - this time to add more statistics
-to the 'udta'/'hinf' atom for each generated hint track.
-
-2002.11.18:
-Modified the support for creating hint tracks in "QuickTimeFileSink" so
-that it it now works properly for H.263+ video sessions.
-
-2002.11.15:
-- Made a small modification to "groupsock/GroupsockHelper.hh" to ensure that
-it compiles on all platforms.
-- Modified "MP3FileSource" so that it can handle layer I or layer II files,
-as well as layer III (MP3).  
-
-2002.11.14:
-Updated "QuickTimeFileSink" to support (optional) hint tracks in output
-QuickTime files.  Also added a "-H" option to "openRTSP" that
-(when used with "-q") will add hint tracks to the output ".mov" file.
-(Note that the hint tracks currently don't work well for H.263+ video
-tracks, and currently don't work at all for QCELP.)
-
-2002.11.04:
-Updated the expiration date in "openRTSP.cpp"
-
-2002.10.22:
-- Undid the previous change.  The top-level Unix Makefile now does
-      cd <dir> ; make
-once again.  Unfortunately "--directory" doesn't seem to work properly
-with the version of "make" that's installed with FreeBSD.
-- Changed the implementation of the "-n" option in "openRTSP".  If "-y"
-is also specified, then the user will be notified only if (i) data has
-arrived for all subsessions, and (ii) all subsessions have been
-synchronized.
-
-2002.10.21:
-Changed the top-level Unix Makefile to do
-	make --directory=<dir>
-rather than
-       cd <dir>; make
-as the latter apparently didn't work with cygwin.
-(Thanks to "Sycotic" Smith for the tip.)
-
-2002.10.20:
-- Updated "QuickTimeFileSink" once again to improve the implementation of
-synchronized audio/video tracks in output QuickTime files.
-- Added a configuration file for "cygwin".  (Thanks to "Sycotic" Smith
-for working on this.)
-
-2002.10.19:
-Updated "QuickTimeFileSink" to use QuickTime Edit Lists to synchronize
-the media tracks.  (It appears that this does not always produce playable
-QuickTime files, so this implementation may have to be changed later.)
-
-2002.10.11:
-Fixed a bug in "MultiFramedRTPSource" that could cause a RTP receiver to
-hang if it received a malformed RTP packet with no data after a special,
-media-specific header.
-
-2002.10.10:
-Fixed the "RTSPClient" implementation so that it now understands
-"Content-Length" as well as "Content-length".  (This now allows it
-to work with our own RTSP server implementation once again!)
-
-2002.10.07:
-Improved the implementation of RTP (and RTCP) reception to eliminate an
-unnecessary "memmove()" each time a packet is received.
-
-2002.10.04:
-Updated the "liveMedia" library to support optionally sending and receiving
-RTP and RTCP packets over a TCP connection (e.g., the TCP connection used
-for a RTSP session).  Also, updated the "openRTSP" test program to take
-an optional "-t" argument, meaning: stream over TCP. 
-
-2002.10.01:
-Fixed the modification to "MultiFramedRTPSource" that was made in the
-2002.08.29 release, and also made a corresponding change to
-"QuickTimeFileSink", so that it now correctly records H.263+/RTP streams
-once again.
-
-2002.09.30:
-- Removed the "Media::addNew()" member function, because it was always
-  called each time a new Media object was created.  Instead, its
-  function was just moved into the Media::Media() constructor.
-- Made another fix to "testMPEGAudioVideoStreamer".
-
-2002.09.28:
-Fixed a bug in "testMPEGAudioVideoStreamer" that could cause a crash when
-its input file was being read for the 2nd or more time.  (Also updated
-"liveMedia/FramedSource.cpp".)
-
-2002.09.27:
-Updated "QCELPAudioRTPSource" so that "hasBeenSynchronizedUsingRTCP()"
-returns True only after a full interleave cycle of RTP packets has been
-received.  This ensures that when it returns true, the receiver will
-be reading a frame that came from a synchronized RTP packet.
-
-2002.09.26:
-- Fixed QCELPAudioRTPSource so that it now returns correct presentation
-timestamps on each frame that is read from it (even if the input data
-was interleaved).
-- Updated QuickTimeFileSink to correctly write ".mov" files for half-rate
-QCELP audio tracks.
-
-2002.09.25:
-Added a new test program - "sapWatch" - that reads and prints SDP/SAP
-announcements (sent to the default SDP/SAP directory)
-
-2002.09.24:
-- Fixed a bug in "QCELPAudioRTPSource"
-- The RTCP implementation now properly recognizes incoming RTCP
-reports from other processes on the same computer.  (Previously, these
-would be rejected as being loop-back packets.)
-
-2002.09.19:
-- Updated "RTPSource"s so that an accurate "presentationTime" variable
-is now returned whenever a client reads from such a source. These times
-are kept accurate by RTCP "Sender Report" packets sent by the sender.
-
-2002.09.13:
-- Improved the "BasicHashTable" implementation so that it's
-no longer a quick-and-dirty hack.
-- Changed the parameter signature to "ByteStreamFileSource" so that the
-"playTimePerFrame" parameter is now an unsigned (microseconds) instead
-of a float.  This eliminates a round-off problem.
-
-2002.09.11:
-Modified "ByteStreamFileSource::doGetNextFrame()" so that - if the
-"playTimePerFrame" parameter was set - the presentation time gets set
-based on this, rather than the current 'wall clock' time.
-
-2002.09.06:
-Updated "win32config.Borland" based on feedback by Vesselin Kostadinov.
-(Also updated an #ifdef in "liveMedia/include/Media.hh")
-
-2002.09.05:
-Added code to ignore an "EAGAIN" error on a 'groupsock' read.
-(This can happen in Linux.)
-
-2002.09.03:
-Fixed a bug in the RTSP server implementation that could
-have caused a memory smash.
-
-2002.08.30:
-Added header files containing version strings (and corresponding integers)
-for each library.  Client code can use these to print out version
-information, or check for version compatibility.
-
-2002.08.29:
-Modified "MultiFramedRTPSource" and its subclasses to properly handle
-the case where a frame is fragmented over several successive incoming
-RTP packets.  Each subclass's implementation of "processSpecialHeader()"
-can choose between having incomplete fragments returned immediately to
-the client (the default behavior), or waiting until all of the fragments
-have arrived.  The implementation of "H263plusVideoRTPSource" was changed
-to do the latter (because the current "ffmpeg" H.263+ decoder relies upon
-getting complete frames for input).
-
-Added an optional "applicationName" parameter to "RTSPClient::createNew()",
-and updated the RTSP client implementation to add a "User-Agent:" field,
-which will contain this "applicationName" string (if present).
-
-2002.08.27:
-Added an optional Boolean parameter "iFramesOnly" to
-"MPEGVideoStreamFramer::createNew()".  If this parameter is True,
-then the framer object will return only data from "I" frames.
-(By default, this parameter is False, meaning that all frames will
-be returned.)  This parameter can be used to reduce the bandwidth
-of streamed MPEG (1 or 2) video.
-
-2002.08.06:
-Changed "groupsock/GroupsockHelper.cpp" to do a "#include <errno.h>"
-rather than "extern int errno".  The latter was apparently breaking in
-some versions of Linux.
-
-2002.08.05:
-Added support for the video/MP2P MIME type (RFC 2250 MPEG Program Streams)
-
-2002.06.25:
-Source file distribution copied from live.sourceforge.net
+The upstream changelog is only available online:
+http://live555.com/liveMedia/public/changelog.txt

-- 
liblivemedia packaging



More information about the pkg-multimedia-commits mailing list