Logoj0ke.net Open Build Service > Projects > multimedia:SL12 > live > live-CHANGELOG
Sign Up | Log In

File live-CHANGELOG of Package live

 
1
Next version, in progress:
2
- Updated the "WindowsAudioInputDevice" code to make it work better with Unicode.  (Thanks to Jeff Shanab.)
3
4
2011.11.20:
5
- Fixed "RTCP.cpp" to not call a "BYE" handler (if one's set) until the very end of the incoming RTCP report handler member
6
  function.  This is to allow for the (common) possibility of the "BYE" handler causing "this" to get deleted.
7
  (Thanks to Jeff Shanab for noticing this.)
8
- Updated some counters used by "MPEG2TransportStreamFramer" from "unsigned long" to "u_int64_t", to better support streams
9
  that last for several days.  (Thanks to Tim Shackleton for this fix.)
10
- Modified the "RTSPServer" code to properly handle weird RTSP clients that ask for RAW UDP streaming, but also specify two
11
  port numbers in the "client_port=" part of the "Transport:" header.
12
  (Thanks to "homepuh(at)yandex.ru" for this suggestion.)
13
- Made a small change to the "VP8VideoRTPSource" implementation to reflect a minor change (the addition of the "K" header flag)
14
  in the most recent IETF Internet-Draft (draft-ietf-payload-vp8-02.txt)
15
- Added an #ifndef to "Boolean.hh" to deal with a Windows development environment that already defines (not "#define"s)
16
  "True" and "False".  (Thanks to Jeff Shanab for this suggestion.)
17
18
2011.11.08:
19
- Added "VorbisAudioRTPSink" and "VorbisAudioRTPSource" for sending/receiving Vorbos audio RTP streams (based on RFC 5215).
20
- Added "VP8VideoRTPSink" and "VP8VideoRTPSource" for sending/receiving VP8 video RTP streams.
21
- Added support for extracting and streaming Vorbis audio tracks from Matroska (including WEBM) files.
22
- Added support for extracting and streaming VP8 video tracks from Matroska (including WEBM) files.
23
- Updated the "testOnDemandRTSPServer" and "LIVE555MediaServer" (source-code version only) applications to support streaming
24
  from ".webm' files.
25
- Fixed frame durations for data extracted from Matroska tracks that don't have a 'default duration'.
26
- Fixed a memory leak in "RTSPClient::sendOptionsCmd()".  (Thanks to Gregg Mattinson for reporting this.)
27
  (Note, however, that "sendOptionsCmd()" - and other functions in the synchronous interface - are currently deprecated.
28
  Developers should now be using the asynchronous "RTSPClient" interface instead.)
29
30
2011.11.02:
31
- Updated the Matroska file parsing code to be more tolerant of extremely large frames (larger than the "StreamParser"
32
  "BANK_SIZE"), and bogus data - to avoid tripping into parser 'internal errors'.
33
- Added an #ifndef/#endif around the "NoReuse dummy;" statement in "RTSPServer.cpp".  This allows a developer - at compile time -
34
  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
35
  if you anticipate restarting a server immediately after it exits, when the old server is still in a TIME_WAIT state, and
36
  you're sure that no other server will ever be running with the same port number.)
37
  (Suggestion by Chris Richardson.)
38
39
2011.10.27:
40
- Added support for seeking within streams that are demultiplexed from a Matroska file.
41
- Modified the signatures of the virtual functions "ServerMediaSubsession::seekStream()"
42
  and "OnDemandServerMediaSubsession::seekStreamSource()" to make the "seekNPT" parameter a "double&" rather than a "double".
43
  This makes it possible for subclasses to make slight changes to the specified seek position when they implement seeking.
44
  (This is necessary for seeking within Matroska-demuxed streams, because 'cue points' in Matroska files can be coarse-grain.)
45
- Made a slight modification to "openRTSP" so that it sets the play duration correctly if the RTSP seek position changes as
46
  a result of the RTSP "PLAY" command.
47
- Changed the implementation of "ReorderingPacketBuffer" in "MultiFramedRTPSource" to use a doubly-linked list rather than
48
  a singly-linked list.  This makes it more efficient to add new packets to the list after a packet loss has occurred
49
  (while we wait for the 'reordering threshold' to expire).  (As always, most of the "ReorderingPacketBuffer" code gets called
50
  only if a packet is lost (or reordered) in the input stream; not in the common case where all packets arrive in order.)
51
  (Thanks to Ralf Schroeder for this suggestion.)
52
- Made the implementation of the "our_random()" function more robust in case it's called concurrently by multiple threads.
53
  (Of course, as explained in the FAQ, you should calling LIVE555 code from multiple threads only if each thread uses its own
54
  "UsageEnvironment" and "TaskScheduler" object.)
55
  (Thanks to Michael Margold for raising this issue.)
56
- Fixed the way that you can specify - in the C/C++ preprocessor - that you want to use the system-supplied "random()" and
57
  "srandom()" functions, rather than our own versions.  You can do this by defining USE_SYSTEM_RANDOM (e.g., in a "config." file).
58
59
2011.10.18:
60
- Improved "RTSPServer" support for subdirectories in "rtsp://" URLs (handling this better for non-compliant clients
61
  that try to do a "SETUP" on agrregate URLs - when there is only a single subsession in the stream).
62
63
2011.10.09:
64
- Updated "RTSPServer" to better support multiple "/" characters (i.e., subdirectories) in URL - i.e., improving the modification
65
  that we made back in version 2011.08.13.
66
- Added an #include to "RTSPCommon.hh" to overcome a compilation problem that some
67
  people had when using Borland development tools on Windows.
68
69
2011.10.05:
70
- Added support for RTSP/RTP streaming, on demand, from a Matroska ('.mkv') file.  The video, audio, and subtitle tracks (if any)
71
  within the file are demultiplexed and streamed separately, via RTP.  We currently support H.264 video, AAC, AC3 and MP3 audio,
72
  and text subtitles.  Sometime in the future, we will also support WEBM ('.webm') Matroska files, with VP8 video and Vorbis audio.
73
  (We don't currently support seeking within the underlying  Matroska file (to implement RTSP seeking), but hope to do so
74
  in the future.)
75
  We also updated the "testOnDemandRTSPServer" demo application and the "LIVE555 Media Server" (currently, just the source-code
76
  version - not the prebuilt application binary versions) to support streaming from '.mkv' files.
77
- Added a new "RTPSink" subclass "T140TextRTPSink" to implement the 'text conversation' RTP payload format defined
78
  by RFC 4103.  (Note, however, that the optional support for 'redundancy' - as described in that RFC - is not yet supported.)
79
  We had already implemented the *reception* of this RTP payload format (using "SimpleRTPSource").
80
  We use this payload format to stream 'subtitle' tracks from Matroska files.
81
- Added a new configuration file "config.macosx-32bit" for generating 32-bit-only binaries for Mac OS X.
82
  (Thanks to Robert Wolff for contributing this.)
83
- Added a mechanism for (optionally) setting a callback function on a "RTPSink" - to be called if a send of data over
84
  the sink's socket fails.  (Contributed by Ralf Globisch.)
85
- Made a minor change to "MultiFramedRTPSink" to ensure that the "doSpecialFrameHandling()" virtual function gets called
86
  even when sending RTP packets that contain a 0-length payload.
87
- Fixed a minor memory leak in "H264VideoRTPSink" (the intermediate 'fragmenter' object wasn't getting deleted properly)
88
89
2011.09.19:
90
- We now set RTCP "RR" handlers for "PassiveServerMediaSubsession"s.  As a result, client sessions for multicast streams
91
  will no longer time out - as long as the clients send RTCP "RR" packets which the server can receive.
92
- Added a new public member function "setSPSandPPS()" to "H264VideoStreamFramer".  This lets you initialize a 
93
  "H264VideoStreamFramer" (or a "H264VideoStreamDiscreteFramer") with SPS and PPS NAL units, in case these do not appear
94
  early (or at all) in the input stream.
95
- Made some performance improvements to "H264VideoFileServerMediaSubsession" and "MPEG4VideoFileServerMediaSubsession".
96
- Fixed a bug in "H264VideoRTPSink" that could cause input source processing to not get stopped properly if the sink gets deleted.
97
98
2011.09.02:
99
- Updated "MultiFramedRTPSource" to more cleanly handle the situation where the sender's SSRC changes.  We don't yet support
100
  streams that contain multiple SSRCs, but we can handle streams where the SSRC changes occasionally - e.g., because a multicast
101
  source has been restarted.  (When the SSRC changes, we don't check the RTP sequence number of the first packet.)
102
  (Thanks to Dmitriy Vasil'ev for bringing this issue to our attention.)
103
104
2011.08.22:
105
- Updated the "RTSPServer" code to handle a rare condition whereby "handleRequestBytes()" gets called recursively.
106
  (This can happen only when we handle a "DESCRIBE" by re-calling the event loop (e.g., to wait for SDP parameters to
107
  become available).)  If this happens, we need to make sure that we don't delete the "RTSPClientSession" object until we leave the
108
  outermost call.  (Thanks to Vadim Kosarev for identifying the problem, and proposing the solution.)
109
110
2011.08.20:
111
- Modified the "MediaSession" and "MediaSubsession" classes to make it possible for developers to add support for receiving
112
  new RTP payload formats, without having to modify the "MediaSession" or "MediaSubsession" code itself.  To do this, developers
113
  define their own subclasses of "MediaSession" and "MediaSubsession".  For more details, see the comment near the top of
114
  "liveMedia/include/MediaSession.hh"
115
116
2011.08.13:
117
- Updated the "RTSPServer" implementation to allow multiple "/" characters in the "rtsp://" URL.  This allows the 
118
  "LIVE555 Media Server" to stream from subdirectories.  (Thanks to Mike Williams for this suggestion.)
119
- Updated the "RTSPClient" code to more cleanly handle our server's (empty) responses to RTSP "GET_PARAMETER" commands.
120
  (Thanks to Sebastien Escudier for noting this issue.)
121
- Updated the "StreamParser" code to allow parsers to test whether we've seen EOF on the input stream.  We also modified
122
  the "H264VideoStreamParser" code to use this, and fix a bug which was causing it to omit the last NAL unit in the input file.
123
- Updated "JPEGVideoRTPSource" to generate correct (or at least more correct) JPEG headers when the input stream contains just
124
  one quantization header.
125
- Added a 'cast' to the "RTSPServerSupportingHTTPStreaming" code to overcome a compilation problem that some people may
126
  have been seeing.
127
128
2011.07.21:
129
- Changed some member variables from "private:" to "protected:", to make subclassing easier.
130
  (Requested by Mojtaba Nouri and James Stafford.)
131
- Added a sanity check to the "RTP-over-TCP" handling code in "RTPInterface.cpp" to alleviate a strange condition (perhaps a bug)
132
  that Jeremy Noring saw.
133
134
2011.07.18:
135
- Added a new, optional extension to "RTSPServer" - called "RTSPServerSupportingHTTPStreaming" - that supports streaming
136
  to iPhones and iPads, using Apple's "HTTP Live Streaming" mechanism.  (For this to work, the files being streamed *must* be
137
  MPEG Transport Stream files with H.264 video, and must also be 'indexed' (using the same 'index file' mechanism that we use
138
  for 'trick play').  (The "live555MediaServer" source code has been updated to support this, as an option.)
139
- Fixed a bug in the various "*Streamer" demo applications that stream from the same input file, in a loop.  We weren't calling
140
  "stopPlaying()" on the "RTPSink" object at the end of each loop.  This bug directly affected only "testH264VideoStreamFramer",
141
  but was theoretically an issue for other demo applications as well.  (Thanks to Sergey Kosov for reporting this.)
142
143
2011.07.15a:
144
- Removed some experimental new code that had accidentally been left in the "mediaServer" directory.
145
146
2011.07.15:
147
- Added a new class "ByteStreamMemoryBufferSource" to encapsulate a (static) memory buffer that's used as a byte stream data source.
148
- Added a new class "TCPStreamSink" to encapsulate a writable TCP socket.  Being a "MediaSink", you can call "startPlaying()"
149
  on it, to stream from a "FramedSource" to a TCP socket.  This class could be used to implement a HTTP server, for example.
150
- Changed the signature of "ServerMediaSubsession::seekStream()" to take an additional "numBytes" return parameter.
151
  This parameter is set to the number of bytes that will be streamed (or 0 if unlimited, or unknown).
152
  (This can be used to implement a HTTP server, with a "Content-Length:" response header.)
153
- Added a new virtual function "getStreamSource(streamToken)" to "ServerMediaSubsession".  This provides an easy way for
154
  "RTSPServer" subclasses to access the media source for each stream, if desired.
155
- Removed the classes "HTTPSink" and "MPEG1or2VideoHTTPSink".  They weren't being used anymore.
156
157
2011.07.08:
158
- Updated the RTSP server implementation to check the "Content-Length:" header - if present - in incoming requests.  Most commands
159
  don't include extra data after the <CR><LF><CR><LF>, and thus don't need a "Content-Length:" header.  However, two commands
160
  - GET_PARAMETER and SET_PARAMETER - include extra data, and thus have a "Content-Length:" header.  We now check this value,
161
  to make sure that we've received all of the required data for each request.
162
  (Thanks to Matt Schuckmannn for reporting this issue.)
163
164
2011.07.06:
165
- Modified the change to "ByteStreamFileSource" that we made in version 2011.06.12.  We now call "read()" only if we know that
166
  the underlying file is non-seekable.  Otherwise - if the file is seekable - we call "fread()", as we did prior to 2011.06.12.
167
  (Reading from the file using "read()" doesn't work properly if we're also seeking within the file.
168
  This is why Transport Stream 'trick play' got broken by 2011.06.12, but should be working again now.)
169
170
2011.07.05:
171
- Updated "MPEG2IndexFromTransportStream" to make "MPEG2TransportStreamIndexer" more robust when it sees PCR timestamps decreasing
172
  in time (something that shouldn't happen).  (Thanks to Mojtaba Nouri for providing an example Transport Stream file that
173
  illustrates this.)
174
- Fixed a bug in "MPEG2IndexFromTransportStream" that could cause the "MPEG2TransportStreamIndexer" utility to hang when it
175
  saw bogus data appear before a MPEG system code.  (Thanks to Julian Scheel for reporting this issue.)
176
- Modified the "BasicTaskScheduler" implementation to add "dumySocket" only to "fReadSet", but not to "fWriteSet" or "fExceptionSet".
177
  This should continue to work around the Windows bug (where "select()" returns an error if no sockets are present in "fReadSet"),
178
  but without causing "select()" to keep returning unnecessarily (chewing up CPU).  (Thanks to Matt Schuckmann for reporting this.)
179
- We now make all files in the source code distribution read-only, by default.  Developers can, of course, change the permissions
180
  of any of these files to make them writeable, but having them be read-only by default helps emphasize that modifying the
181
  supplied source code is discouraged.  Instead, developers should - if possible - extend the supplied source code using
182
  C++ subclassing.  For more information, see the FAQ: http://www.live555.com/liveMedia/faq.html#modifying-and-extending
183
  
184
185
2011.06.16:
186
- Updated "AC3AudioRTPSink" and "AC3AudioRTPSource" to conform to RFC 4184, which defines the RTP payload format for AC-3 audio.
187
  Previously, we were using a different, incompatible payload format (that had been defined by an initial draft document, but
188
  which differed from that defined in the final RFC.  Unfortunately, this means that older clients that use our code
189
  - including existing binary versions of VLC and MPlayer - will no longer be able to play AC-3/RTP streams from our server
190
  (until they are rebuilt using this newest version of our library).
191
- Updated "AC3AudioStreamFramer" - and added a new class "AC3AudioFileServerMediaSubsession" - to support streaming from an AC-3
192
  audio file.  We also added this support to the "testOnDemandRTSPServer" demo application, and to the "LIVE555 Media Server"
193
  (currently just the source code; not the prebuilt binary versions).
194
  (Thanks to Ashwani Kathuria for suggesting this.)
195
- Moved the definition of "class StreamState" from "OnDemandServerMediaSubsession.cpp" to "OnDemandServerMediaSubsession.hh".
196
  Even though "class StreamState" is used only internally, in the implementation of "OnDemandServerMediaSubsession", moving its
197
  definition to the header file makes it possible for subclasses of "OnDemandServerMediaSubsession" to access it.
198
199
2011.06.14a:
200
- Removed some junk (debugging) files that had accidentally been left in the "testProgs/" directory.
201
202
2011.06.14:
203
- Fixed a race condition in "H264VideoFileServerMediaSubsession" and "MPEG4VideoFileServerMediaSubsession" that could have been
204
  triggered when two separate clients tried to stream the same file concurrently.  (Thanks to Bruno Abreu for reporting this.)
205
- Fixed a minor bug in "Authenticator::operator=()": we were not freeing the LHS object's memory before doing the
206
  assignment.  (Thanks to Sawan Das for noting this.)
207
- Updated "config.iphoneos" to change LIBRARY_LINK from "ar cr " to "libtool -s -o ", just as we did for "config.macosx" in the
208
  previous release.
209
210
2011.06.12:
211
- Updated the RTCP implementation to (if we're a SSM source) reflect incoming RTCP packets back to the multicast group
212
  *only* if the packet originated from another host.  This means that we won't reflect packets that come from other
213
  processes on our own host.  The reason for this is that we can't reliably distinguish such packets from packets that were
214
  actually looped back from us.  (We must not 'reflect' such packets, otherwise we risk a packet storm.)
215
- Updated the "ByteStreamFileSource" code to make the underlying socket non-blocking.  We also read data using "read()"
216
  rather than "fread()", to eliminate blocking (if READ_FROM_FILES_SYNCHRONOUSLY is not defined).  (This change should
217
  affect only reading from pipes, not regular files.)  (Thanks to Tyson Wiser for noting this issue.) 
218
- Updated the "DelayQueue" destructor to make sure that any remaining delay queue entries are destroyed.
219
  (Thanks to "Mr. Xiao" and Luke Kucalaba for (independently) reporting this issue.)
220
- Updated "config.macosx" to change LIBRARY_LINK from "ar cr " to "libtool -s -o ", because someone reported that "ar"
221
  didn't work for them.
222
- Added support for receiving the "audio/EAC3" RTP payload format (which is handled the same way as "audio/AC3").
223
  (Thanks to Gregory McGarry for the patch.)
224
225
2011.05.25:
226
- Fixed a bug in "RTSPClient" which was causing clients to crash if servers returned a 401 error code, but without a
227
  "WWW-Authenticate:" header.  (Thanks to Sebastien Escudier for reporting this.)
228
229
2011.03.14:
230
- Updated the "MPEG2TransportFileServerMediaSubsession" to use the "streamDuration" parameter (if >0.0) to limit
231
  the number of Transport Packets that are streamed from the source file.  (This happens only if the file is indexed.)
232
  This allows the server to implement finite RTSP ranges for such streams.
233
- Fixed a minor bug in "OnDemandServerMediaSubsession" if "reuseFirstSource" is set.  (Thanks to Andreas Gaer for noting this.)
234
235
2011.03.06:
236
- Changed the implementation of "RTSPClient::teardownMediaSession()" and "RTSPClient::teardownMediaSubsession()"
237
  (i.e., in the old, now-deprecated synchronous "RTSPClient" interface) to not wait for, or handle, a response to the
238
  RTSP "TEARDOWN" command.  This avoids the client blocking indefinitely if the server (or its connection) happens to die before
239
  the RTSP response gets sent.
240
  (Note, however: All RTSP client applications should be updated to use the new, asynchronous interface.  The old synchronous
241
  interface will not be supported indefinitely.)
242
243
2011.03.05:
244
- Changed the signature of the "OnDemandServerMediaSubsession::seekStreamSource()"
245
  virtual function to add a "streamDuration" field.  This field (if >0.0) tells
246
  the implementation how much data to stream before ending with EOF.
247
  Our RTSPServer implementation now uses this to implement finite RTSP ranges
248
  (as specified in the "Range:" header).  As with seeking, only some codecs currently
249
  implement this: MP3 audio, WAV audio, and DV video.
250
- We now support streaming from IMA ADPCM ("DVI4") WAV files.
251
- When streaming MP3 audio files or indexed MPEG Transport Stream Files, we now compute a more accurate bitrate estimate
252
  (for use in computing RTCP packet frequencies).
253
254
2011.01.24:
255
- Fixed a bug that was accidentally introduced in version 2011.01.10, and which crashes VLC (when VLC is used to play a
256
  "rtsp://" URL).  To avoid the bug, VLC should therefore use this version or later.
257
258
2011.01.21:
259
- Fixed a bug in "H264VideoStreamFramer" that was introduced in the last release.
260
  (This affected the "testH264VideoToTransportStream" demo application.)  (Thanks to Dunling Li for reporting this.)
261
- Fixed a minor syntax bug in "H264VideoStreamFramer.cpp" which (fortunately) had not been an actual problem.
262
  (Thanks to Guillaume Le Neindre for the report.)
263
264
2011.01.20:
265
- Added a new demo application "testH264VideoToTransportStream", which takes a H.264 Video input file (named "in.264"),
266
  and converts it to a Transport Stream file (named "out.ts").
267
  (Note that for this conversion to work properly, the input H.264 file must contain sufficient timing information for us to be
268
  able to deduce the frame rate.)
269
  (Thanks to Dunling Li for this suggestion.)
270
- Changed our RTSP server implementation so that the "SET_PARAMETER" command succeeds (but does nothing) by default.
271
  (Subclasses can redefine its behavior, if necessary.)  We also now support the special "*" URL, which designates an
272
  operation on the entire server.  (The only commands for which this is allowed are "OPTIONS", "GET_PARAMETER" and "SET_PARAMETER".)
273
  (Thanks to Jeremy Noring for noting that some clients need this.)
274
275
2011.01.19:
276
- Fixed a bug in "OnDemandServerMediaSubsession" that was causing unicast RTSP/RTP
277
  servers to sometimes omit sending the very first packet of a stream.  (This seemed
278
  to occur only for servers running on Windows.)
279
280
2011.01.10:
281
- Updated "RTSPClient" so that the new asynchronous interface can handle RTSP URLs that contain a "<username>:<password>@"
282
  before the server host name/address.  This had been supported in the old synchronous interface, but when we implemented the
283
  new asynchronous interface, we had forgotten to implement it there as well.
284
- Made a change to the implementation (but not the default behavior) of "RTSPServer" to allow for the possibility of a subclass
285
  implementing HTTP streaming (using the same HTTP port that we use to support RTSP-over-HTTP tunneling).
286
287
2011.01.06:
288
- We added support for receiving the RTP payload formats "audio/L20", "audio/L24" and "audio/DAT12", as defined in RFC 3190.
289
  We also recognize the new "fmtp:"-line parameters "emphasis" and "channel-order" that this RFC also defines.
290
  (Thanks to Maciej Szlapka for noting that these payload formats had not previously been supported.)
291
292
2011.01.05:
293
- Made a small change to the sanity check introduced to "MultiFramedRTPSink" and "BasicUDPSink" in version 2010.12.05 to
294
  eliminate the possibility of small extra delays accumulating over time.  (Thanks to Warren Young for raising this issue.)
295
- Made a small change to the 'magic values' that are used to implement the "esds" atom for MPEG-4 video in "QuickTimeFileSink".
296
  (I have no idea what these values are supposed to do, but Stu Tomlinson reports that the new values work better for him.)
297
298
2010.12.31:
299
- We now support 'trick play' operations (seeking, fast-forward, reverse play) on MPEG Transport Stream files that contain
300
  H.264 video (rather than just MPEG-2 video, as previously).  To support this, the index file format has been extended in a
301
  backwards-compatible way, so that existing index files (for MPEG-2 video Transport Streams) will continue to work as before.
302
  New versions of the "MPEG2TransportStreamIndexer" and "testMPEG2TransportStreamTrickPlay" utilities - and the
303
  "live555MediaServer" - have also been released.
304
- Fixed a bug in the definition of the "profile_level_id" field in "H264VideoRTPSink".  (Thanks to Geoff Cleary for noting this.)
305
- Change the parsing of RTSP "Range:" headers to allow parameters of the form "clock=" or"smtpe=".  (However, we currently don't
306
  interpret parameters of this form; instead, we just ignore them.)
307
  (Thanks to Sebastien Escudier for this suggestion.)
308
- Fixed "openRTSP" to properly reset internal state before repeating the playing of a stream (if the '-c' (play continuously))
309
  option is used.  (Thanks to Anon Sricharoenchai for noting this.)
310
311
2010.12.14:
312
- Oops - there was a serious bug in the 'event trigger' implementation in the previous release.
313
  IMPORTANT: You should upgrade to this new version if you plan to use the 'event trigger' mechanism!
314
  (Thanks to "P.J." for noticing the bug in the previous version.)
315
316
2010.12.11:
317
- Added a new 'event trigger' mechanism to "TaskScheduler".  This makes it possible
318
  to define new events that can be handled within the event loop.  Unlike other
319
  library functions, events can be 'triggered' (i.e., fired) from a separate thread.
320
  This makes it easier to implement input devices than the old 'watchVariable'
321
  mechanism (which remains).
322
  Also, the "DeviceSource" class - which is a model for how to implement an input
323
  device class - has been significantly improved.  It now uses the new 'event trigger'
324
  mechanism.  Also, more of it has been implemented, making it clearer where new code
325
  needs to be written. 
326
327
2010.12.05:
328
- Significantly improved our support for streaming H.264 video.  In particular, "H264VideoStreamFramer"
329
  and "H264VideoStreamDiscreteFramer" (a new class) act like their corresponding MPEG4 versions: "H264VideoStreamFramer" reads
330
  a H.264 Video Elementary Stream byte stream (e.g., from a file), and "H264VideoStreamDiscreteFramer" reads discrete H.264 video
331
  NAL units (i.e., one-at-a-time), e.g., from a H.264 video encoder.  (Note that developers no longer need to subclass
332
  "H264VideoStreamFramer".)  We also added a new demo application - "testH264VideoStreamer" - for streaming from
333
  a H.264 Elementary Stream Video file via multicast.  "testOnDemandRTSPServer" and "live555MediaServer" were also updated to
334
  stream H.264 Video Elementary Stream files.
335
- Added a sanity check to "MultiFramedRTPSink" and "BasicUDPSink" to allow for the possibility of the system clock jumping ahead
336
  in time, and thereby messing up the calculation of how long to wait before sending the next packet.
337
  (Thanks to Anders Chen for noting this issue.)
338
- Fixed bugs in "AMRAudioRTPSource" and "QCELPAudioRTPSource" that might sometimes cause an event handler to try to reference
339
  objects that had already been deleted.  (Thanks to David Cailliere for detecting the problem with "AMRAudioRTPSource";
340
  it turns out that "QCELPAudioRTPSource" had the same problem.)
341
342
2010.11.17:
343
- Added new a member function "setAuthenticationDatabase()" to "RTSPServer".  This allows a server's manager to change
344
  (or disable) authentication at runtime.  (Thanks to Jeremy Norling for suggesting this functionality.)
345
346
2010.11.10:
347
- Fixed "openRTSP" to eliminate a recursive call to "shutdown()" if we receive a RTCP "BYE" while in the middle of doing
348
  a RTSP "TEARDOWN" command.  (Thanks to David Cailliere for noting this issue.)
349
350
2010.11.09:
351
- The previous release had accidentally included some experimental changes to "H264VideoStreamFramer" that were not (yet)
352
  intended to see the light of day.
353
354
2010.11.08:
355
- Fixed a minor problem with RTSP-over-HTTP support in "RTSPClient" that was causing some servers to complain due to the
356
  "CSeq:" header value not being incremented properly.  (Thanks to Kamil Dobkowski for the report.)
357
358
2010.11.04:
359
- Backed out and corrected the change to "RTSPClient" that we made in version 2010.10.22.  It turns out that existing RTSP-over-HTTP
360
  servers that return "401 Unauthorized" in response to the HTTP "GET" *do*, in fact, want clients to resend the "GET" command
361
  (with a filled-in "Authorization:" header).  However, at least one such server out there closes the TCP connection after
362
  sending back the "401 Unauthorized" response, so we need to send the second "GET" command using a new TCP connection.
363
  (Thanks to Kamil Dobkowski for providing access to a server that illustrated this problem.)
364
365
2010.10.28:
366
- Updated "JPEGVideoRTPSource" amd "JPEGVideoRTPSink" to support optional "Restart Marker Headers" in the outgoing RTP packet.
367
  (We already supported such headers in *incoming* JPEG/RTP packets ("JPEGVideoRTPSource").)
368
  If "type()" (defined by the "JPEGVideoSource" subclass) returns a value in [64,127], then the "JPEGVideoSource" subclass must
369
  also redefine "restartInterval()" to return a non-zero value.
370
  (Thanks to Cristiano Belloni for suggesting this addition.)
371
372
2010.10.23a:
373
- Fixed a bug in the way that "RTSPClient" generates ephemeral RTP/RTCP port number pairs for use when receiving unicast
374
  RTSP/RTP streams.  The RTP (even) port was guaranteed not to be in use elsewhere on the same host, but that guarantee was not
375
  necessarily true for the RTCP (next, i.e. odd) port.  This version fixes this.
376
377
2010.10.23:
378
- Our server implementation of "RTSP-over-HTTP tunneling" now allows for the possibility of receiving data from the 
379
  (Base-64-encoded) initial RTSP command at the same time that we receive the HTTP "POST" command.  (This is a possibility because
380
  the client does not wait for a response to the "POST" - because there isn't one.)
381
382
2010.10.22:
383
- Made a minor modification to the way that "RTSPClient" does "RTSP-over-HTTP tunneling".  If the initial "GET" request
384
  returns "401 Unauthorized", then we don't resend it (with an "Authorization:" header).
385
  Instead, we continue, as normal, sending the subsequent HTTP "POST" (with an "Authorization:" header).
386
  It's not clear (from the limited documentation on "RTSP-over-HTTP tunneling") which behavior is 'correct', but at least some
387
  servers seem to handle the new approach better.
388
389
2010.10.20:
390
- Made the implementation of 'RTSP-over-HTTP tunneling' in the RTSP server more tolerant of certain buggy clients.
391
  (Thanks to Cristiano Belloni for this suggestion.)
392
393
2010.10.15:
394
- Added server support for RTSP/RTP-over-HTTP tunneling.  We added a new "RTSPServer" member function
395
      Boolean setUpTunnelingOverHTTP(Port httpPort);
396
  to (attempt to) set up tunneling on the specified HTTP port number.
397
  We also updated the "testOnDemandRTSPServer" and "live555MediaServer" applications to try to set up HTTP tunneling
398
  on port 80, then port 8000, and then finally port 8080.
399
400
2010.10.06:
401
- Made a small change to "RTSPClient" to make it better handle RTSP servers that
402
  erroneously do not include "CSeq:" lines in their responses.
403
  (Thanks to Sebastien Escudier for this suggestion.)
404
- Made a minor update to "RTSPClient" to better handle any error in the HTTP "GET" command (if RTSP-over-HTTP tunneling
405
  is being used).
406
- Updated the "timestampString()" function in "groupsock/GroupsockHelper.cpp" to allow for the possibility of "ctime()" returning NULL.
407
- Removed the (never fully implemented) "RTSPOverHTTPServer" class.
408
  Instead, RTSP-over-HTTP tunneling will be implemented within the existing "RTSPServer"
409
  code, as that seems to be easier than using a separate class.
410
411
2010.09.25:
412
- Disabled the code for "Groupsock::multicastSendOnly()", because it was apparently causing SSM multicast packets to not be
413
  received by other applications on the same host (at least, for some systems).
414
415
2010.09.23a:
416
- Backed out the "RTSPServer" change that was in the previous release, because of a report that it doesn't work.
417
418
2010.09.23:
419
- Updated "H2564VideoFileSink" to take an optional "sprop parameter string" parameter as input.  If present, this string is
420
  decoded, and the resulting data (SPS/PPS NAL units) is prepended to the file.
421
  Also, updated "openRTSP" to call "MediaSubsession::fmtp_spropparametersets()", and pass this string when creating a
422
  "H2564VideoFileSink".
423
- Updated "RTSPServer" to ensure that we transmit RTP and RTCP packets over the same interface that is used by the requesting client
424
  (in case the server is multi-homed).  (Thanks to David Stegbauer for this suggestion.)
425
426
2010.09.22:
427
- Added a new virtual function "internalError()" to "UsageEnvironment" and "TaskScheduler".  This function is called
428
  a small number of times within the library code when an unexepected, 'should not occur'-type error condition occurs.
429
  The default implementation of this function calls "abort()", but subclasses can, of course, redefine this, if desired.
430
- Updated "RTSPClient::parseTransportParams()" to accept either "port=<num1>-<num2>" or "port=<num>".
431
  (The RTSP specification is ambiguous about whether or not both are allowed.)
432
- Made sure that calls to "ntohl()" and "htonl()" take (and return) "u_int32_t" rather than unsigned", for improved portability.
433
  (Thanks to Anon Sricharoenchai for this suggestion.)
434
435
2010.09.10:
436
- Added a sanity check to "MediaSubsession::getNormalPlayTime()" so that we ignore any old packet that might
437
  mess up the initial computation of the presentationTime-to-NPT offset following the arrival of new "RTP-Info" data.
438
  This should never happen with our servers (though John Shao Fa - who proposed this check - claims to be seeing it).
439
  We add the check, however, to protect against other servers that might be messing up.
440
441
2010.09.03:
442
- Made sure that various calls to "TaskScheduler::scheduleDelayedTask()" are called with a "int64_t" 'delay in microseconds'
443
  parameter, to avoid possible integer underflow if the system clock gets set back in time.
444
  (Thanks to Sebastien Escudier for reporting this problem.)
445
446
2010.08.31:
447
- Fixed some problems in the way that we implement RTP/RTCP-over-TCP streams that were showing up when we have more than one
448
  such stream sharing the same input source ("reuseFirstSource" == True).  (Thanks to John Tam for reporting this.)
449
450
2010.08.22:
451
- Updated the "DarwinInjector" class to use the new, asynchronous "RTSPClient" interface.
452
453
2010.07.29:
454
- Fixed a bug in RTP-over-TCP that was sometimes causing a socket to (attempt to be) read after it had already been closed.
455
  (Thanks to Wilton @ Invent Vision for reporting this bug.)
456
- Fixed some bugs in the way that RTP reception statistics were being generated and reported.  (Thanks to David Cailliere.)
457
- Added a new config file "config.linux-64bit" that should work better than "config.linux" for building for 64-bit Linux systems.
458
459
2010.07.13:
460
- Updated the "openRTSP" and "playSIP" applications to use the new asynchronous "RTSPClient" interface.
461
- Made the "readSocket()" routine more bullet-proof against Windows brain damage that was apparently causing problems with
462
  Windows RTSP clients that do RTP-over-TCP.
463
  (Thanks to Kamil Dobkowski for this suggestion.)
464
465
2010.07.07:
466
- Fixed a problem with RTP-over-TCP reception that was causing some RTP-over-TCP streams to not be received properly.
467
  All RTSP client applications that can request/receive RTP-over-TCP should upgrade to this new version.
468
  (Thanks to Kamil Dobkowski for providing a server that we could use to debug the problem.)
469
- Reinstated the functionality of the "forceMulticastOnUnspecified" flag in the "RTSPClient" "SETUP" command.
470
  (This functionality had temporarily been disabled, because I wasn't sure that it was still used by anyone.
471
  But apparently it is.)
472
473
2010.06.22:
474
- Fixed another bug in the new "RTSPClient" implementation (thanks to Sebastien Escudier); we were not recognizing
475
  "npt=now-" in "Range:" headers.
476
- Fixed a bug in "openRTSP" (reported by Kenneth Ljungh).  We were closing output files before issuing a RTSP "TEARDOWN" command.
477
  This problem was exposed only with the new "RTSPClient" implementation, because it reenters the event loop (thereby possibly
478
  handling incoming RTP packets) after the sending of the "TEARDOWN", before it gets handled and responded to.
479
  We have now fixed the "openRTSP" code to not close output files until after the RTSP "TEARDOWN" has been completed.
480
481
2010.06.18:
482
- Fixed a bug in the new "RTSPClient" implementation (reported by Sebastien Escudier) - that was causing problems
483
  when streaming from some RTSP-enabled video cameras.
484
485
2010.06.16a:
486
- Made "RTSPClient"s parsing of "Transport:" headers more bullet-proof against those sent by some servers
487
  (including, apparently, some recent versions of VLC's built-in RTSP server) that include a "client_port=" field,
488
  but no "server_port=" field.  (In this case, we assume that the server port is the same as the client port.)
489
490
2010.06.16:
491
- Fixed another bug in the new "RTSPClient" implementation of "GET_PARAMETER".
492
  (Thanks to Denis Charmet for reporting this.)
493
- Made "RTSPServer::RTSPClientSession::handleAlternativeRequestByte1()" more bullet-proof against an alleged bug noted by 
494
  Jeremy Noring.  (The actual bug hasn't been located, but this change apparently stops it from causing problems.)
495
496
2010.06.15:
497
- Removed the "blockUntilReadable()" function, because it's no longer needed, now that all socket reads are asynchronous.
498
  This means that "readSocket()" no longer calls "select()", which should improve the performance of applications.
499
- Improved the processing of RTP/RTCP/RTSP-over-TCP (possibly fixing some bugs in the process).
500
- Fixed bugs in the new "RTSPClient" implementation of "GET_PARAMETER" and "SET_PARAMETER".
501
  (Thanks to Denis Charmet for reporting this.)
502
503
2010.06.11:
504
- Fixed some potential memory access errors in the previous version of "RTSPClient".
505
- Removed code from "RTSPClient" that was supposed to deal with buggy (Microsoft?) servers, but which in reality was causing
506
  clients to not know the duration of time-bounded streams properly.
507
- Modified the new RTSP client implementation of "RTSP-over-HTTP" to make it more consistent with the old implementation.
508
  (Doug Porter reported a problem with the implementation in release 2010.05.29.)
509
- "AMRAudioSource" (and therefore its subclasses also) were not redefining the "MIMEtype()" virtual function.  Fixed this.
510
  (Thanks to Adam Mich for reporting this.)
511
- Fixed a minor problem that was causing some "UsageEnvironment"-allocated tables not to get deleted under some circumstances.
512
513
2010.05.29:
514
- Made a major change to the interface and implementation of "RTSPClient", to make it perform operations asynchronously
515
  - i.e., without blocking.  Each operation that performs a RTSP command now takes a 'response handler' function as parameter.
516
  The operation returns immediately, but the 'response handler' function will get called later, when a response arrives
517
  (or if an error occurs).
518
  For backwards compatibility, the old 'synchronous' interface still remains, and is implemented using the new 'asynchronous'
519
  interface.  (However, the old 'synchronous' interface should not be used for new applications, and it will likely be removed
520
  in a few months.)
521
  For now, the demo application "openRTSP" still uses the old interface, but will be rewritten over the next few weeks to use the
522
  new "RTSPClient" interface.
523
- Modified the "TaskScheduler" definition yet again, because it was too complicated.  There's now just one virtual function
524
  for setting/clearing socket handlers:
525
  "virtual void setBackgroundHandling(int socketNum, int conditionSet, BackgroundHandlerProc* handlerProc, void* clientData) = 0;"
526
  where "conditionSet" is a combination of SOCKET_READABLE, SOCKET_WRITABLE, and SOCKET_EXCEPTION.
527
  For backwards compatibility, the existing "turnOnBackgroundReadHandling()" and "turnOffBackgroundReadHandling()" functions
528
  are retained, but are now implemented using "setBackgroundHandling()".
529
  See "UsageEnvironment/include/UsageEnvironment.hh" for details.
530
531
2010.05.28:
532
- Updated the previous revision of "TaskScheduler" to add two more new virtual functions
533
  "turnOnBackgroundExceptionHandling()" and "turnOffBackgroundExceptionHandling()",
534
  because it turns out that Windows needs them for checking on a failed remote "connect()"
535
  (behaving differently from Posix, which requires only select()ing the socket for
536
  writing, not an error).
537
538
2010.05.27:
539
- Updated "TaskScheduler" (and our supplied example subclass "BasicTaskScheduler") to include new virtual functions
540
  "turnOnBackgroundWriteHandling()" and "turnOffBackgoundWriteHandling()".  These are the same as the "Read" versions,
541
  except that they are for checking when a socket becomes writable.  (They will be used to implement the new, upcoming
542
  'asynchronous' implementation of "RTSPClient".)
543
  We also modified the signature of "setResultErrMsg()" to take an optional "err" parameter.  (If  non-zero, this will be used
544
  instead of "getErrno()".) 
545
- Added a "config.iphoneos" (for cross-compiling on a Mac for the iPhone).  (Thanks to Mark Vasilkov.)
546
547
2010.04.09:
548
- Fixed a bug in the way that "AMRAudioRTPSource" reimplements "hasBeenSynchronizedUsingRTCP()".
549
  (Thanks to Ralf Globisch for reporting this bug.)
550
- Increased "SegmentQueueSize" in "MP3ADU.cpp" from 10 to 20, to allow for some unusually-VBR MP3 files that neeed this.
551
  (Thanks to Dirk Raffel for reporting this problem.)
552
- Changed the implementation of "parseRangeHeader()" in "RTSPCommon.cpp", in preparation for upcoming changes to "RTSPClient".
553
554
2010.04.01:
555
- Fixed the "openRTSP" code so that it no longer restricts the play time duration (using the "-d" option), because there is no
556
  no longer any practical limit on the duration that gets passed to "TaskScheduler::scheduleDelayedTask()"
557
  (because it is microseconds in 64 bits).
558
  (Thanks to Brad Thomas for this suggestion.)
559
- Removed some obsolete (and unused) code from the "RTSPClient" implementation, in preparation for a major reworking of this code.
560
561
2010.03.16:
562
- Made more improvements to "QuickTimeFileSink".  (Thanks to Wolfgang Breyha.)
563
564
2010.03.15:
565
- Fixed a bug in the Transport Stream file indexing mechanism that was preventing index files from properly being generated
566
  for some Transport Stream files.  (We sometimes weren't analyzing Program Association Tables correctly.)
567
- Removed the hack that we introduced in version 2009.11.27, because we have now fixed the bug that made that necessary.
568
- Removed the "RTPOverTCP_OK" hack from "RTPInterface.cpp", because it's no longer needed.
569
570
2010.03.14:
571
- Fixed the RTSP server implementation so that - when streaming via RTP-over-TCP - it can now handle RTSP commands after the
572
  first "PLAY".  (This fixes a long-standing bug.)
573
- Updated "QuickTimeFileSink" to support writing files larger than 2GB.  Also fixed a bug involving "esds" atoms for MPEG-4.
574
  (Thanks to Wolfgang Breyha for this patch.)
575
- Fixed a bug in the way that RTCP "SDES" items are constructed.  (Thanks to Jeremy Norling for bringing this to our attention.)
576
- Added a sanity check to the string version of "BasicUsageEnvironment::operator<<()", to check for a NULL string input.
577
  (Thanks to Paulo Rogerio Panhoto for this suggestion.)
578
579
2010.03.08:
580
- Fixed a rare bug that could sometimes cause RTSP clients to reuse the same (ephemeral) port number.
581
  (Thanks to Andro Debevere for reporting this.)
582
- Made changes to "config.armlinux", suggested by Rafael Carre.
583
- Removed a "|| defined(__CYGWIN32__)" test from "groupsock/GroupsockHelper.cpp", because it's no longer needed.
584
  (Cygwin has apparently now fixed the bug that made that necessary.)
585
  (Thanks to Tatterdemalian Anzulovic for reporting this.)
586
587
2010.02.10:
588
- Fixed a possible 1-byte overflow in "RTSPClient::setupMediaSubsession()".  (Thanks to Martin Bonnin for reporting this.)
589
- Make "parseCLine()" a bit more robust against certain technically illegal, but still parseable SDP "c=" lines.
590
  (Thanks to Aurelien Nephtali for this suggestion.)
591
592
2010.02.09:
593
- Fixed the way that "RTSPClient" operations handle the "timeout" parameter.
594
  We now make the socket blocking afterwards (having made it non-blocking beforehand).
595
  (Thanks to Jeremy Noring for this patch.)
596
597
2010.01.22:
598
- Changed the implementation of "Socket::changePort()" once again, beause it was reported that the change made in version
599
  2010.01.15 didn't work.  Note, however, that this change also introduces a new function
600
         virtual void moveSocketHandling(int oldSocketNum, int newSocketNum) = 0;
601
  to the "TaskScheduler" API.  We have implemented this for "BasicTaskScheduler".  If you implement your own subclass of
602
  "TaskScheduler", then you will need to implement this new function as well.
603
604
2010.01.16:
605
- Added ""#include <stdio.h>" to "groupsock/NetInterface.cpp".  This was tripping up some people.
606
  (Thanks to Ben Hutchings for noticing this.)
607
608
2010.01.15:
609
- Changed the implementation of "Socket::changePort()" to call "bind()" directly, rather than closing the socket and reopening a
610
  new one.  That old implementation sometimes caused the socket number to change, which messed up our event loop.
611
  (Thanks to Rob Krakora for noticing this.)
612
- Improved the implementation of DV video streaming (introduced in the previous release) - in particular,
613
  to implement "DVVideoRTPSource".
614
615
2010.01.13:
616
- Added support for streaming/receiving DV video via RTP (using the RTP payload format defined in RFC 3189.
617
  (Thanks to Ben Hutchings for his help.) 
618
619
2010.01.11:
620
- Increased the default "FileSink" buffer size in "openRTSP" from 20000 to 100000, because the previous limit was being bumped into
621
  too many times.
622
- Added #include "GroupsockHelper.hh" to "DVVideoStreamFramer.cpp", because it defines "gettimeofday()".
623
624
2010.01.09:
625
- In the various demo applications (in "testProgs/"), we changed the calls to "abort()" back to "exit(1)", because we want
626
  "abort()" to be used only for serious (unexpected) errors; not things like bad command-line arguments.
627
- Updated the RTSP server implementation to make session ids random (and 8 (hex) digits long), to conform to the RTSP specification.
628
  (Thanks to Guy Bonneau for this suggestion.)
629
630
2010.01.07:
631
- Fixed a bug in "parseGeneralConfigStr()" (it was mistakenly returning an extra byte).
632
- A few places in the code we called "exit()" if we encountered an unexpected error.  By request, these have now been changed to
633
  "abort()". 
634
- Made the "fSDPLines" member variable (in both "OnDemandServerMediaSubsession" and "PassiveServerMediaSubsession") "protected"
635
  rather than "private".  This allows subclasses to - if they wish - delete and NULL "fSDPLines" each time a client connects, in
636
  case the stream's SDP parameters have changed.
637
638
2009.11.27:
639
- Temporarily hacked the RTSP server code to not include "GET_PARAMETER" as an available option in the response to the "OPTIONS"
640
  command.  This will stop VLC from using "GET_PARAMETER" as a client 'liveness' indicator.  This is something that we don't
641
  need, because we already use clients' RTCP "RR" packets as a 'liveness' indicator, and because sending "GET_PARAMETER" over a
642
  RTP-over-TCP session causes problems with our current implementation.  (This hack will be removed when we fix the problem with
643
  RTP-over-TCP.)
644
645
2009.11.12:
646
- Made "BasicTaskScheduler::DelayQueue.cpp" more robust against an apparent compiler error on some platforms (e.g., Mac OS X)
647
  that was leading to "select() fails: Invalid argument" errors.
648
- Added a new compilation configuration file: "config.avr32-linux".  (Thanks to Jorge Munoz Castiner.)
649
- Made some minor changes to "groupsock/GroupsockHelper.cpp", "liveMedia/InputFile.cpp" and "liveMedia/OutputFile.cpp"
650
  to make these files compile (or compile better) for WinCE.  (Thanks to Pierre Ynard for these fixes.)
651
652
2009.09.28:
653
- Added an optional "timeout" parameter to "DarwinInjector::setDestination()".  (Suggested by Jeremy Noring.)
654
- Added support for receiving the "text/T140" RTP payload format.  (Suggested by Pierre Ynard.)
655
656
2009.09.21:
657
- Added patches proposed by Ben Hutchings to (i) improve the top-level Makefile; (ii) build better static libraries (on
658
  Linux, FreeBSD, and Mac OS X); (iii) have RTSP servers set "b=AS:" lines in their SDP (and set an appropriate socket send buffer
659
  size), and (iv) have RTSP (and other SDP) clients interpret the "b=AS:" line (if present) to set the socket receive buffer.
660
- Changed two source files in the "groupsock" project to use the (current standard) <sstream> #include file.
661
- Increased RTSP_PARAM_STRING_MAX to 200 (request by Stuart Rawling)
662
663
2009.09.04:
664
- Fixed "BasicTaskScheduler"s workaround to a Windows bug (thanks to Vityusha Vinokurov).
665
- Fixed "DelayQueue::synchronize()" to allow for the possibility of the system clock being reset back in time.
666
  (Thanks to Sebastien Escudier for pointing out this issue.)
667
- Made "H264VideoRTPSink::auxSDPLine()" "protected:" rather than "private:" (following a request from Stuart Rawling)
668
669
2009.07.28:
670
- Updated "QuickTimeFileSink" to add a "stss" atom for video streams, following a suggestion by Gerardo Ares.
671
  (At present we just 'guess' which video 'samples' (frames) are 'key frames', so this might not work properly on some
672
  video streams.)
673
- Modified the "config.uClinux" configuration file, following a suggestion by Chetan Raj.
674
- Changed "RTSPClient"s implementation of the RTSP "TEARDOWN" command to always act as if the command succeeded, regardless of
675
  the actual response from the server (because, from the client's point of view, the session has ended).
676
  (This overcomes a potential memory leak, pointer out by Stuart Rawling.)
677
678
2009.07.09:
679
- Modified the RTSP server implementation to - for streams where there is a known duration - always include a range end time
680
  in the RTSP "PLAY" response, even if the client did not specify one in the "PLAY" request.  This allows VLC's client
681
  'trick play' to (mostly) work.
682
- Updated "MediaSession::initiate()" to eliminate a possible memory leak if we get an error in socket creation.
683
  (Thanks to Denis Charmet.)
684
- Made a minor change to "MultiFramedRTPSink" to make monitoring/debugging easier.  (Thanks to Guy Bonneau.)
685
- Begun adding support for DV video.  However, this implementation is still incomplete.  DO NOT USE IT!
686
687
2009.06.02:
688
- Updated the MPEG Transport Stream multiplexor implementation to allow for H.264 video.  (Thanks to Massimo Zito.)
689
- Updated "MultiFramedRTPSink" to allow for subclasses for RTP payload formats (such as DV, coming soon) that impose
690
  a granularity on RTP fragment sizes.
691
692
2009.04.20:
693
- Fixed "BasicUsageEnvironment::getErrno()" to always (under Windows) return 
694
  "WSAGetLastError()" (and to just ignore the "errno" variable>.
695
  Also fixed a few places in the code where we were still using "errno"
696
  instead of calling "getErrno()"
697
698
2009.04.07:
699
- Changed many "char*" variables to "char const*" to eliminate possible compiler warnings.
700
  (Thanks to Sebastien Escudier for pointing out this issue.)
701
702
2009.04.06:
703
- Modified our Windows-only version of "gettimeofday()" so that it now returns times based on the proper epoch.
704
  (Thanks to Patrick White for this suggestion.)
705
- Created a new config file for 64-bit Solaris, and renamed the old "config.solaris" file to make it
706
  clear that it's for 32-bit Solaris only.  (Thanks to Michael Skaastrup.)
707
- Modified "config.mingw" to add "-DLOCALE_NOT_USED" to the "COMPILE_OPTS =" line.  (The VLC folks seem to want
708
  this.)
709
- Made a minor change to some win32-specific code in "RTSPClient.cpp" that the VLC folks seem to like.
710
  (However, "RTSPClient" is about to undergo a major overhaul (for asynchronous I/O) anyway...)
711
- Made a small change to "mediaServer/DynamicRTSPServer.cpp" to eliminate compiler warnings on some platforms.
712
713
2009.03.22:
714
- Updated "MediaSession::initiate()" to make the selection of ephemeral client
715
  port numbers (for RTP and RTCP) more robust, and to eliminate the possibility of
716
  the same port numbers accidentally getting chosen more than once by different
717
  clients running on the same host.  (Thanks to Guido Marelli and others for helping
718
  track down this issue.)
719
720
2009.02.23:
721
- Changed the way in which 'trick mode' transport streams are generated, so that each
722
  video I-frame is included in the output Transport Stream no more than once.
723
  This means that now - for low scale values - the output frame rate, and bit rate,
724
  will be les than that of the original file.  (Beforehand, we maintained the same
725
  frame rate, which meant that - because each output frame is an I-frame - the output
726
  stream's bit rate was always significantly larger than the original.  This caused
727
  problems for some clients.)
728
- Changed the 'client liveness' checking code in the "RTSPServer" implementation so that it deletes the
729
  "RTSPClientSession" object even for multicast streams.  
730
- Made a minor fix to an error report in "RTSPClient".  (Thanks to Igor Milavec.)
731
732
2009.02.13:
733
- Changed calls to the "Locale()" constructor to use an explicit variable name (rather than an anonymous
734
  declaration), because some compilers weren't handling the anonymous declaration properly.
735
  (Thanks to Steven Kramer for noticing this.)
736
- Improved the "RTSPServer" definition and implementation to make it easier to subclass the
737
  "RTSPServer::RTSPClientSession" class (e.g., to add a custom implementation of the "SET_PARAMETER" command).
738
  Also added an iterator class for iterating over the "RTSPClientSession" objects within a "RTSPServer".
739
- Make "MediaSubsession::parseSDPAttribute_framerate()" a little more robust.
740
  (Thanks to Shawn Van Every for the suggestion.)
741
- Improved "BasicUsageEnvironment0::reportBackgroundError()" (thanks to Matt Schuckmann)
742
- Fixed a bug in the "AVIFileSink" code (thanks to Pramod Bhadwat for reporting this).
743
744
2009.01.26:
745
- Updated the header file for "rtcp_from_spec.c" to make the call to "exit()" a noop.
746
  (Thanks to Chris Silvers for raising this issue.)
747
- Changed the definition of "RTSPClientSession" (in "RTSPServer") to make it protected (and also to make its
748
  command handler functions protected and virtual), to allow developers to subclass it (to change the
749
  implementation of some commands).
750
  (Thanks to Yedidia Amit for suggesting this.)
751
- Fixed a minor bug in "scheduleNextQOSMeasurement()" (in the "openRTSP" implementation).
752
  (Thanks to Gabriele De Luca for noticing this.)
753
754
2008.12.20:
755
- Removed - from "MultiFramedRTPSource.cpp" - the historical sanity check for bizarrely delayed packets.
756
  Accepting such bizarro packets causes problems in the code; it's best not to accept them at all.
757
- Added to "FramedFilter" a new public function "detachInputSource()" that sets the filter's input source
758
  to NULL.  This is useful if you want to close the filter independently of closing its input source.
759
  (Thanks to Alex Cichowski for this suggestion.)
760
- Modified the header file for "MultiFramedRTPSink" to make its implementation of the "stopPlaying()" virtual
761
  function public.  (Thanks to Guy Bonneau for this suggestion.)
762
- Changed "MediaSession::initiate()" to make the port number selection mechanism (for unicast streams) more robust.
763
  (Thanks to Pierre Ynard for this suggestion.0
764
765
2008.11.13:
766
- Fixed an obscure bug in "BasicTaskScheduler::SingleStep()" in which the call to "handleAlarm()" would
767
  (on rare occasions) modify the set of read handlers in such a way as to be inconsistent with the result of
768
  the earlier call to "select()".  We fixed the bug by moving the call to "handleAlarm()" after the socket
769
  handler call.  (Thanks to Sigismondo Boschi for tracking down this bug.)
770
- Fixed a bug in "parseRTSPRequestString()" that could cause a crash when parsing certain weird, non-compliant
771
  requests.  (Thanks to Sebastien Escudier for reporting this.)
772
773
2008.11.04:
774
- Fixed a bug in "RTPInterface" that was sometimes causing sockets not to be reclaimed properly by a
775
  RTSP server when streaming RTP/RTCP-over-TCP.  (Thanks to Ralf Globisch for tracking this down.)
776
- Changed the RTSP 'start time' parameter from "float" to "double", to allow for
777
  accurate 'start times' that are very large - e.g., Unix 'epoch' times.
778
  (Thanks to Morgan Toervolt for the suggestion and patch.)
779
- Made some simplifications to the 'reception stats' code in "RTPSource".
780
  (Thanks to Guy Bonneau for this suggestion.)
781
- Fixed a minor bug in "QuickTimeFileSink". (Thanks to Pramod Bhagwat.)
782
783
2008.10.07:
784
- Added an optional "timeout" parameter (in seconds) to the 'connecting' RTSP
785
  client commands.  (Thanks to Sebastien Escudier for this patch.)
786
- Increased the size of a "DummySink"s buffer in "MPEG1or2FileServerDemux", to make
787
  it large enough for any PES packet.
788
- Fixed a minor memory leak in the "createNew()" functions for
789
  "AVIFileSink" and "QuickTimeFileSink" if the output fid did not get created.
790
  (Thanks to Mehmet Ozgul for noting this.)
791
- Fixed a couple of spelling erros, removed some unnecessary whitespace,
792
  and updated the address of the FSF in the LGPL preamble (thanks to Erik Hovland).
793
794
2008.09.02:
795
- Fixed a minor bug in "RTSPServer".  (Thanks to Renato Mauro.)
796
- Minor improvements fo "FileSink" and "MP3FileSource".  (Thanks to Pramod Bhagwat.)
797
- Changed the default "reclamationTestSeconds" parameter (in "RTSPServer" and "DynamicRTSPServer") from 45 seconds
798
  to 65 seconds, because 60 seconds is the default timeout value expected by (broken) clients that send
799
  RTSP commands rather than RTCP "RR" reports to indicate liveness.
800
801
2008.07.25:
802
- Minor bug fix to "MPEG2TransportStreamFramer" (reset "fTSPCRCount" in "doStopGettingFrames()").
803
  (Thanks to Qiujian Shu for reporting this bug.)
804
- Modified the previous changes to "QuickTimeFileSink" and "AVIFileSink" so that the
805
  "createNew()" functions return NULL if the output file cannot be opened.
806
807
2008.07.24:
808
- Changed "MultiFramedRTPSource" to handle the very first packet that we receive as
809
  if there were packet loss beforehand.  This ensures that we correctly discard any
810
  initial packets that we receive that occur after the start of a (multi-packet) frame.
811
- Fixed "QuickTimeFileSink" and "AVIFileSink" to close the output file (if it's not stdout or stderr) in the destructor.
812
813
2008.07.22:
814
- Fixed "MPEG2TransportStreamMultiplexor" to use an appropriate stream for our SCR, even if the input contained
815
  its own Program Stream Map.
816
- More minor changes to the code to make Erik Hovland's code-checking tools happy.
817
818
2008.07.06:
819
- Corrected one of Erik Hovland's memory leak fixes made to the previous revision.
820
821
2008.07.05:
822
- Fixed some memory leaks - and several other mostly cosmetic fixes.
823
  (Thanks to Erik Hovland for noticing these.)
824
825
2008.06.26:
826
- Fixed a bug in "openRTSP" that was sometimes causing an incorrect "Range:" header
827
  to be sent in "PLAY" requests.
828
829
2008.06.25:
830
- Fixed a bug in the headers sent for the RTSP "GET_PARAMETER" and "SET_PARAMETER" commands.
831
  (Thanks to "beilyzhang (at) hotmail" for this report.)
832
833
2008.06.05:
834
- Renamed the "ourSourceAddressForMulticast()" function to the less confusing and more explanatory
835
  "ourIPAddress()".
836
- The "RTSPClient" change that was made in 2008.04.09 to accommodate multicast
837
  streams apparently broke (some?) unicast streams.  This has now been fixed.
838
- Updated "RTSPClient" to handle weird servers that include a "Content-Length:" header
839
  in the response to the RTSP "SETUP" command.  (If we see such a header, we skip over
840
  the data referred to in the header.)  (Thanks to Kristian Soerensen for this suggestion.)
841
- Changed the parsing of lines in "RTSPClient" so that it now accepts \r or \n alone
842
  at the end of each line.  (\r\n is preferred, but the standard also allows \r or \n)
843
  (Thanks to David Schueler for this suggestion.)
844
845
2008.05.12:
846
- Made a change to "RTCPInterface" to ensure that "turnOffBackgroundReadHandling()" is called on a socket
847
  as many times as "turnOnBackgroundReadHandling()".  Apparently some versions of Windows get upset if this
848
  doesn't happen.  (Thanks to Ken Seo for the suggested fix.)
849
- Fixed a bug in "H263plusVideoStreamParser".  (Thanks to Andrey Latin.)
850
- Added more sanity checking to "JPEGVideoRTPSink".
851
852
2008.04.09:
853
- Corrected a type-related bug in "RTPInterface::handleRead()".  (Thanks to Brain Lai for noting this.)
854
- Fixed a bug in "RTSPClient" that would prevent RTCP "RR" reports from being sent to
855
  the correct multicast address when we are receiving a multicast stream. (Thanks to Changjin Liu for noticing this.)
856
857
2008.04.03:
858
- Fixed a bug that was introduced in the "2007.12.27" release.  The "timeout" parameter to the call to
859
  "readSocket" in "SocketDescriptor::tcpReadHandler()" in "RTPInterface.cpp" needed to be initialized
860
  (to zero) first.  (Thanks to Lodewijk Loos for alerting us to this problem.)
861
- Added a new config file "config.bfin-linux-uclibc", and renamed "config.bfin_uclinux" as "config.bfin-uclinux".
862
  (Thanks to Mike Frysinger.)
863
864
2008.02.08:
865
- Added a hack (suggested by "Romain") to "MPEG2TransportStreamFramer" to (perhaps)
866
  produce more accurate per-transport-packet duration estimates for wildly VBR streams.
867
- Updated "MPEG2TransportStreamMultiplexor" to support the addition of MPEG-4 Audio or Video Elementary Streams.
868
- Updated "RTSPOverHTTPServer.cpp" (a work in progress) so that it complies properly for some versions of
869
  Visual Studio on Windows.  (Thanks to Eric Flickner for noting this.)
870
871
2008.01.19:
872
- Corrected the "getNormalPlayTime()" function - introduced in the previous release - to allow for 'trick play'
873
  scale factors other than 1.
874
875
2008.01.18:
876
- Added a new member function
877
    float MediaSubsession::getNormalPlayTime()
878
  which - given a stream's current presentation time - returns the "Normal Play Time".
879
  This function is useful for RTSP streams.
880
- Added support for a "a=control:" URL specified in the SDP description at the session level. 
881
882
2008.01.04:
883
- Changed the "RTSPClient" timeout - introduced in the previous release - from
884
  5s to 30s.
885
- Added support for setting and returning the RTSP session start time (as well as the end time).
886
  (This eliminates the need for the "live-starttime.patch" file that VLC was using.)
887
- Updated some of the system-specific configuration files, to eliminate the need for many of the patches that
888
  the VLC developers added to their code.
889
890
2007.12.27:
891
- Added a 5s timeout to the "RTSPClient" code that checks for RTSP responses.
892
  This mirrors a change that was already being done to VLC's copy of the code.
893
  (This is still a short-term fix, until the "RTSPClient" code is rewritten to
894
  properly use asynchronous I/O, using the event loop.)
895
- Added a timeout to the "readSocket()" call in "SocketDescriptor::tcpReadHandler()" in "RTPInterface.cpp",
896
  to handle reading RTP-over-TCP data.  This allows for the possibility of non-cooperative RTSP clients.
897
  (Thanks to Peter Leese for this suggestion.)  This is probably not a complete solution;
898
  more thought is needed...
899
900
2007.12.07:
901
- Fixed "H2633plusVideoFileServerMediaSubsession" to properly use a dynamic RTP payload type, rather than the
902
  static type 34 (which is reserved for the now-obsolete old "video/H263" RTP payload format).
903
904
2007.12.06:
905
- Updated "JPEGVideoRTPSource" to take optional 'default width' and 'default height' parameters.
906
  These parameters can be set by fields in the SDP description, and can be used to specifiy unusually
907
  large frame widths and/or heights.  (Thanks to Andrey Filippov.)
908
909
2007.11.18:
910
- Fixed a couple of memory leaks in "DarwinInjector".  (Thanks to Eyal Beit-Halachmi for noting these.)
911
- Removed old 'backwards compatibility' stuff from "FramedSource".  (Noone should be relying upon this any more.)
912
- Fixed a bounds-checking error in "parseRTSPRequestString()" caused by an int vs. unsigned problem.
913
  (Thanks to Luigi Auriemma for noting this.)  
914
- In "RTSPClient.cpp", fixed a couple of "unsigned" vs. "int" nits.  (Thanks for Brain Lai for noting this.)
915
916
2007.11.01:
917
- Several of the options to "openRTSP" have now been changed, with two new options added:
918
      -s <initial-seek-time>
919
      -z <scale>
920
  See the "openRTSP" documentation <http://www.live555.com/openRTSP/> for details.
921
- Fixed a bug in the way that "MPEG4VideoStreamDiscreteFramer" parses 'config' information (for inclusion in
922
  the stream's SDP description).  (Thanks to Nicola Bova for helping to identify this bug.)
923
- Eliminated a potential memory (and socket) leak when allocating server RTP,RTCP socket pairs.
924
  (Thanks to David Pan for reporting this.)
925
- Updated "ByteStreamFileSource" to treat a 0-byte file read the same as EOF.
926
- Ensure that we have reasonable OS buffering for writes on non-blocking sockets.
927
928
2007.08.03a:
929
- Removed a debugging printf() that had been left in by mistake.  (Thanks to Massimo Zito for noticing this.)
930
931
2007.08.03:
932
- Updated the "RTSPServer" implementation to work better on systems with more than one IP address.
933
  The server will now include - in its RTSP responses - the IP address on which the corresponding incoming request
934
  was received.
935
936
2007.07.25:
937
- Added some sanity checks to various "MediaSink" subclasses, in case "fSource" is NULL.
938
  (Thanks to Andrey Kaminsky for noting one of these.)
939
940
2007.07.10:
941
- Made sure that "MPEG2TransportStreamFramer"s estimate of the average duration of each Transport Packet
942
  gets updated correctly after each 'seek' operation.  (Thanks to Massimo Zito for suggesting this.)
943
- Fixed a bug in "MPEG2TransportStreamFromESSource" that was causing presentation
944
  timestamps to not be generated correctly.  (Thanks to Massimo Zito for noticing this.)
945
946
2007.07.01:
947
- Fixed a bug in "RTSPServer" and "RTSPClient" that would cause problems when streaming
948
  files whose names have spaces in them.
949
- Fixed a bug in "OnDemandServerMediaSubsession::deleteStream".  (Thanks to Igor Bukanov.)
950
- Make the sockets for "RTPSource", "RTCPInstance" and "BasicUDPSource" non-blocking, even though they will be read
951
  from only asynchronously, when packets arrive.  The reason for this is that, in some OSs, reads on a blocking
952
  socket can (allegedly) sometimes block, even if the socket was previously reported (e.g., by "select()") as
953
  having data available.  (This can supposedly happen if the UDP checksum fails, for example.)
954
  (Thanks to Marc Neuberger for pointing this out.)
955
- Fixed a bug in "MPEG2TransportFileServerMediaSubsession.cpp" that was causing 2x
956
  fast-forward to fail.  (Some debugging code had been left in by mistake.)
957
958
2007.05.24:
959
- Modified "setupDatagramSocket()" to better handle setting "ReceivingInterfaceAddr" when creating a socket
960
  to be used to send/receive multicast.
961
- Made a couple of minor changes to overcome some compilation errors that some people were apparently seeing.
962
963
2007.05.23:
964
- The RTSP server now includes the "source=" parameter in the response to a RTSP "SETUP" command.
965
  This works around a bug in QuickTime Player that would cause it to not send RTCP "RR" packets
966
  (when playing a unicast stream, and running on Mac OS X).  (Thanks to Dave Singer et al at Apple for tracking
967
  down this problem.)
968
- The RTSP server implementation no longer terminates the session if it returns 400 or 405 errors.
969
970
2007.04.24a:
971
- Fixed a problem in the new "RTSPOverHTTPServer" code that was causing some people compilation problems.
972
973
2007.04.24:
974
- Fixed a typo in "testOnDemandRTSPServer.cpp".  (Thanks to Nils Grundback for noticing this.)
975
- Modified the signature of "RTSPServer::specialClientAccessCheck()" (defined in the previous revision) to add
976
  a new "clientAddr" parameter (a "struct sockaddr_in"), to allow special access checking based on clients' IP
977
  address.
978
- Make sure that the locale is set to "POSIX" when calling "toupper()" or "tolower()" on human-supplied strings.
979
  (Thanks to Ismail Doenmez for noting this.)
980
981
2007.04.20:
982
- Modified "MPEG2TransportStreamMultiplexor" to set the "discontinuity_indicator" flag for the first
983
  "adaptation_field" in the output Transport Stream.
984
- Changed "AMRAudioRTPSource" to more accurately report whether/when an interleaved frame's timestamp has
985
  been synchronized using RTCP.
986
  (Thanks to David Bertrand for this patch.)
987
- Made to a small fix to the previous revision's support for multicast streaming of raw UDP (nonstandard)
988
- Added a virtual function to "OnDemandServerMediaSubsession" for closing the stream source.
989
  Subclasses can redefine this, if they wish, to do something smarter.  (Thanks to Igor Bukanov for this patch.)
990
- Added support to "RTSPServer" for optionally performing special per-client access control, beyond the
991
  standard Digest Authentication method.  (Thanks to Igor Bukanov for this patch.)
992
- Made a minor optimization to "Groupsock.cpp".  (Thanks to Maxim Petrov for this suggestion.)
993
- Added an initial implementation of RTSP-over-HTTP at the server level (it was already supported at the client level).
994
  (Note: This code has not yet been completed, and doesn't yet work, so don't try to use it.)
995
996
2007.02.20:
997
- Updated "RTSPServer" to support multicast streaming of raw UDP streams (nonstandard).
998
  (Thanks to Aesmund Grammeltvedt for this modification.)
999
- Made "RTSPClient" a little more robust in case the TCP connection fails.
1000
- Made "RTPSink::rtpmapLine()" virtual (as requested by Andrew Voznytsa).
1001
- Removed an archaic (no longer used) declaration in "groupsock/include/Groupsock.hh".
1002
- Added an optional "allowKasennaProtocol" parameter to "RTSPClient::describeWithPassword()"
1003
  (similar to "RTSPClient::describeURL()").  (Thanks to Igor Bukanov for this suggestion.)s
1004
1005
2007.01.17:
1006
- Fixed a bug that would cause the "MPEG2TransportStreamIndexer" application to fail when run on a big-endian
1007
  architecture.
1008
- Added a new class "H264VideoFileSink", that prepends each incoming H.264 NAL unit with the prefix 0x000001,
1009
  before writing it to the file.  Also updated the "openRTSP" code to use this, when receiving H.264/RTP streams.
1010
  (Thanks to Chris Kuiper for contributing this.)
1011
- Added a temporary #ifdef to "GroupsockHelper.cpp" to work around a compliation problem when building
1012
  for Cygwin.
1013
1014
2007.01.11:
1015
- Improved the "MPEG2IndexFromTransportStream" class to recogize Transport Stream
1016
  PAT and PMT (tables).  This in turn makes the "MPEG2TransportStreamIndexer"
1017
  utility more robust.
1018
- Fixed a minor bug in "MPEG2TransportStreamFromESSource".
1019
1020
2007.01.09:
1021
- Added RTSP server support for 'trick play' operations on MPEG-2 Transport Stream
1022
  files.  This requires the presence of a ".tsx" index file for each ".ts" file.
1023
  (This functionality will shortly be documented on the LIVE555 web site,
1024
  and announced on the "live-devel" mailing list.) 
1025
- Improved the performance of asynchronous file reading in "ByteStreamFileSource".
1026
  (Thanks to Aesmund Grammeltvedt for this suggestion.)
1027
- Added "-D_FILE_OFFSET_BITS=64" to the "COMPILE_OPTS" line for each of the Linux config files, in order to
1028
  alleviate possible problems with I/O on large files.
1029
1030
2006.12.31:
1031
- We now implement "ByteStreamFileSource" on Windows using synchronous file reads,
1032
  by default.  I had thought that Windows XP had fixed the problem - present in
1033
  earlier versions of Windows - whereby open files are not treated as select()able
1034
  sockets.  But apparently the problem is still there.
1035
- Added code that will - probably in the next release, very soon - support server
1036
  'trick mode' operations on MPEG-2 Transport Stream files.  At present, we have two
1037
  new applications - in the "testProgs" directory - that help support this:
1038
  "MPEG2TransportStreamIndexer" (to create a special index file for a Transport Stream
1039
  file), and "testMPEG2TransportStreamTrickPlay" (to generate a new Transport Stream
1040
  file that simulates a 'trick play' operation performed on the original Transport
1041
  Stream file).  See my forthcoming post to the "live-devel" mailing list for more
1042
  details.
1043
- Fixed a bug in the Base64 encoding routine.  (Thanks to Sebastian Gracias for reporting this.)
1044
1045
2006.12.08:
1046
- Made sure that each TCP socket used by a "RTSPserver" is non-blocking, so that a slow or hanging client
1047
  cannot hang a server.  (Thanks to "jers (at) inwind.it" for this suggestion.)
1048
1049
2006.11.16a:
1050
- Oops - fixed a problem with the packaging of the new "mediaServer" code.
1051
1052
2006.11.16:
1053
- Included the code for the new "LIVE555 Media Server" application
1054
  (in the "mediaServer" subdirectory).  This is a complete RTSP/RTP server, that
1055
  will serve any appropriately-formatted file that resides in the current directory.
1056
  (More documentation will follow.)
1057
- Updated "QuickTimeFileSink" to support H.264 video in ".mov" or ".mp4" output files.
1058
  (Thanks to David Arnold for this.)
1059
- Fixed a potential reference-count related bug in "OnDemandServerMediaSubsession".  (Thanks to Jers.)
1060
- Changed the "RTSPClient" constructor from "private:" to "protected:".
1061
1062
2006.10.27:
1063
- "RTSPClient" now recognizes the "Content-Base:" header in RTSP "DESCRIBE" responses.
1064
  (Thanks to Derk-Jan Hartman for this suggestion.)
1065
- Updated "MultiFramedRTPSource" to avoid excessive recursion (and thus potential
1066
  stack overflow) in some cases when receiving streams that have packet loss.
1067
  (Thanks to Erwin Beckers for raising this as an issue.)
1068
- Updated "RTPSink" and "MultiFramedRTPSink" to ensure that a proper RTP timestamp
1069
  is set in the RTSP "RTP-Info" header that follows a "PAUSE", and that this timestamp
1070
  gets used in the next outgoing RTP packet.  (Thanks to David Bertrand for this suggestion.)
1071
- Changed the special implementation of "gettimeofday()" for Windows to return
1072
  more accurate results.  (Thanks to David Arnold for this change.)
1073
1074
2006.10.18a:
1075
- A minor update to the "MultiFramedRTPSink" change made in the previous release.
1076
1077
2006.10.18:
1078
- Added support for adding optional RTP padding bytes to "MultiFramedRTPSink".
1079
  (Thanks to Victor Kozhuhov for this suggestion.)
1080
1081
2006.10.12a:
1082
- Backed out the change that we made in the 2006.09.18 release: We now don't attempt
1083
  to setsockopt() SO_REUSEPORT and IP_MULTICAST_LOOP on Windows. (Dave Arnold reports
1084
  that doing so leads to UDP packets with TTL=1.)
1085
1086
2006.10.12:
1087
- Fixed a rare memory leak in "MultiFramedRTPSource".  (Thanks to David Bertrand for this fix.)
1088
- Made "RTSPServer::lookupServerMediaSession()" virtual, to allow for future
1089
  subclasses of "RTSPServer" that - for example - create and add "ServerMediaSession"s
1090
  dynamically (depending on whether or not the named file exists).
1091
- Added a "rtspURLPrefix()" member function to "RTSPServer".  This returns the
1092
  "rtsp://" URL prefix that's common to all of the server's "rtsp://" URLs.
1093
1094
2006.10.07:
1095
- The demo applications (in the "testProgs" directory) that stream MPEG-4 
1096
  Elementary Stream video files now use a file name "test.m4e" rather than "test.m4v".
1097
  This is to avoid confusion, because Apple has coopted the ".m4v" suffix for
1098
  MPEG-4 (audio+video) files, which are different.
1099
- Made "MPEG4VideoStreamFramer" more bullet proof against some non-standard MPEG-4 video data.
1100
  (Thanks to Maxim Petrov for this suggestion.)
1101
1102
2006.10.05:
1103
- Fixed a minor bug in "MPEG2TransportStreamFromESSource" (thanks to "jeremy at electrosilk.net")
1104
- Changed some class member function and variables from "private" to "protected", in response to a request
1105
  from David Bertrand.
1106
- Made "DarwinInjector::createNew()" more bullet proof, by giving the "applicationName" parameter
1107
  a default value.
1108
1109
2006.09.20:
1110
- Corrected the bug fix to "H264VideoRTPSink" that was made two revisions ago.
1111
1112
2006.09.18:
1113
- Fixed a bug in the way that "RTPSource" records the maximum sequence number seen so far.
1114
  (The bug could be triggered by packets arriving out of order.)  Thanks to Mallikharjuna Reddy
1115
  for pointing this out. 
1116
- When creating new datagram sockets, we now attempt to setsockopt() SO_REUSEPORT and IP_MULTICAST_LOOP,
1117
  even on Windows.  (A version of Windows prior to XP had problems with this, but it's apparently no longer
1118
  a problem.)
1119
1120
2006.09.12:
1121
- Fixed a minor bug in "H264VideoRTPSink".  (Thanks to Emiliano Parasassi for noting this.)
1122
- If the "totSessionBW" parameter to "RTCPInstance::RTCPInstance()" is zero, print out an error message,
1123
  and use a value of 1 (kbps) instead.
1124
1125
2006.09.09:
1126
- Reenabled asynchronous file reading in "ByteStreamFileSource", after fixing a bug
1127
  that could lead to a 'race condition' in some circumstances.  (The fix was to call
1128
  "FramedSource::afterGetting()" directly - rather than via the event loop - after
1129
  delivering data to the downstream object.)
1130
- Updated "MPEG2TransportStreamFromESSource" again.  Now, we set the
1131
  "PES_packet_length" field to zero if the input data was larger than 2^16 bytes
1132
  long.  (This is in accordance with the MPEG specifications; thanks to "jeremy at electrosilk.net"
1133
  for noticing this..)
1134
1135
2006.09.08:
1136
- Temporarily disabled asynchronous file reading in "ByteStreamFileSource" until we
1137
  fix an apparent bug that is causing MPEG streaming to fail.
1138
- Updated "MPEG2TransportStreamFromESSource" to print a warning message if the input source delivers
1139
  data in chunks that are too big to make up a PES packet.
1140
1141
2006.09.07:
1142
- Fixed a bug that was preventing the RTCP "RR" packet handler from being called
1143
  when we were streaming RTP/RTCP-over-TCP.  (Thanks to "zhangzx at rcs-9000.com"
1144
  for noticing this.)
1145
1146
2006.08.26:
1147
- Changed the implementation of "ByteStreamFileSource" so that reads from the
1148
  open file are now done asynchronously, when data becomes available.  This matches
1149
  the code's event-driven execution model better than the previous implementation,
1150
  which read from files synchronously.  It should also perform better in systems
1151
  that read from more than one file concurrently.
1152
- Added Victor Kozhuhov's modifications to the WAV file support code, to allow for WAV files that contain
1153
  u-law or a-law content (instead of the usual raw PCM).
1154
1155
2006.08.24:
1156
- Fixed the way in which "RTSPServer" handles requests that span more than one
1157
  TCP socket read.  These reads are now all handled asynchronously, in accordance
1158
  with the library's event-driven execution model.  (Thanks to Marc Neuberger for noting this.)
1159
- Fixed a memory leak in "MultiFramedRTPSource" that would occur if we received
1160
  packets with duplicate sequence numbers, or if we received excessively delayed
1161
  packets.  (Thanks to David Bertrand for noticing this.)
1162
- Changed the order of statements in "~RTSPClient()" to fix a bug (noted by Brain Lai).
1163
- Changed "base64Encode()" to take a 'length' parameter, so that it will work with input data that
1164
  contains '\0' characters.  (Thanks to Derk-Jan Hartman for this suggestion.)
1165
- Added support - in "RTSPServer" - for the (non-standard) "x-playNow:" header in RTSP requests.
1166
  (Thanks to Rob Casey for this patch.)
1167
- Updated "MediaSession" to parse the (standard) SDP "framerate" attribute (in addition to "x-framerate", which
1168
  is non-standard).
1169
- Changed the parent class of "H264VideoStreamFramer" to be "FramedFilter" (to be consistent with other
1170
  'Framer' classes) instead of "FramedSource".  (Thanks to Jinfeng Zhang for noticing this.)
1171
- Made the "FramedFilter" implementation more robust, in case the supplied input source parameter is NULL.
1172
1173
2006.08.07:
1174
- Changed the way that "OnDemandServerMediaSubsession" creates server ports.
1175
  It now chooses server port numbers starting with a specific port number
1176
  (which is now an optional parameter to the "OnDemandServerMediaSubsession"
1177
  constructor).  The default value of this initial port number parameter is 6970.
1178
  This matches the port number range used by other common RTSP server implementations,
1179
  including Darwin Streaming Server and Helix.
1180
- Changed the criterion for whether to send out a RTCP "SR".  (Thanks to David Bertrand.)
1181
- Fixed an obscure bug in "OnDemandServerMediaSubsession::deleteStream()"
1182
  (reported by Scott Hayes)
1183
- Removed some archaic code that was developed for a customer several years ago, but
1184
  which is no longer used.
1185
1186
2006.07.04:
1187
- Another update to "H264VideoRTPSink" (requested by David Bertrand)
1188
1189
2006.06.28:
1190
- Another update to "H264VideoRTPSink".  (Thanks to David Bertrand.)
1191
1192
2006.06.27:
1193
- Updated "H364VideoRTPSink"
1194
- Corrected the definition of MAX_PES_PACKET_SIZE in MPEG2TransportStreamFromPESSource.cpp.
1195
  (Thanks to Jiri Pinkava for this fix.)
1196
1197
2006.06.23:
1198
- Fixed some minor issues with the previous addition of "H264VideoRTPSink"
1199
1200
2006.06.22:
1201
- Added "H264VideoRTPSink", for transmitting H.264/RTP streams.  (Thanks to
1202
  Benoit Quirynen and David Bertrand for funding this work.)
1203
- Changed the default definitions of IP_ADD_SOURCE_MEMBERSHIP and
1204
  IP_DROP_SOURCE_MEMBERSHIP (for use if they're not already defined in header files),
1205
  to make it more likely that SSM joins will properly fail if SSM is not actually
1206
  implemented on the host OS.
1207
- Changed some "delete"s into "delete[]".  (Thanks to Wojciech Matyjewicz
1208
  and Mathur for reporting these bugs.)
1209
- Made "sapWatch a bit more robust.  (Thanks to Jiri Pinkava for this fix.)
1210
1211
2006.05.17:
1212
- Fixed "OnDemandRTSPServer" so that it sets a RTCP "RR" handler,
1213
  even if "reuseFirstStream" is True.
1214
- Changed "RTSPServer" (and the "testOnDemandRTSPServer" demo application)
1215
  to use a 45-second client liveness timeout, by default.  (Previously,
1216
  no client liveness checking was being done by default.)
1217
  (Note that client liveness timeouts are done only for unicast streams, not multicast.)
1218
- Fixed a bug in the implementation of "BasicHashTable" that arose when
1219
  we were using hash tables with multi-word-sized keys.
1220
1221
2006.05.15:
1222
- No change from the previous release, but the installed ".tar.gz" file had
1223
  accidentally been deleted.
1224
1225
2006.05.11:
1226
- Cleaned up some code in "BasicTaskScheduler" that was allegedly causing
1227
  problems on a Zaurus.
1228
- Changed "TaskScheduler::rescheduleDelayedTask()" so that its "microseconds"
1229
  parameter is a "int64_t" (to match "scheduleDelayedTask").
1230
  (Thanks to David Bertrand for suggesting this.)
1231
- Updated "ServerMediaSession:::generateSDPDescription()" to change
1232
  "a=rtcp: unicast-reflection" to "a=rtcp-unicast: reflection", to
1233
  reflect the latest version of the IETF's "draft-ietf-avt-rtcpssm"
1234
  Internet-Draft.  (This is for Source-Specific Multicast sessions only.)
1235
- Cleaned up "H263plusVideoRTPSink" slightly, to remove an unnecessary
1236
  member variable.
1237
- Removed support for the (experimental and non-standard) "X-MCT-TEXT"
1238
  payload type.
1239
1240
2006.03.17:
1241
- Fixed a bug in "RTSPClient" (that had been introduced in the 2006.02.15
1242
  release) that was stopping RTP-over-TCP reception from working.
1243
1244
2006.03.15:
1245
- Updated "MediaSession" to parse the "s=" and "i=" lines of input SDP
1246
  descriptions, and added member functions for returning these string values.
1247
  (Thanks to Scott Hays or this.)
1248
- Updated "MPEG2TransportStreamMultiplexor" to use the audio track for PCR
1249
  iff there is no video track present.
1250
- Made a change to "liveMedia/include/H263plusVideoStreamFramer.hh" to overcome
1251
  an error reported by some nit-picking compilers.
1252
- Fixed a minor bug in "MPEG2TransportStreamFromESSource" (in the way that it
1253
  handles EOF on input).
1254
1255
2006.03.03:
1256
- Updated "MPEG4LATMAudioRTPSource" to allow the LATM data length field to
1257
  be omitted from the start of each returned audio frame.  (The "faad" decoder
1258
  (used by VLC, for example) needed this.)
1259
- Renamed "SECOND" in the "BasicUsageEnvironment" library to "DELAY_SECOND"
1260
  (and similarly for "ZERO", "MINUTE", "HOUR", "DAY"), to avoid an alleged
1261
  name conflict with some other code used by VLC.  (Thanks to
1262
  Derk-Jan Hartman for this suggestion.)
1263
- Removed some unnecessary code from "testProgs/playCommon.cpp".
1264
1265
2006.02.25:
1266
- Updated the previous change to "MultiFramedRTPSource::doStopGettingFrames()",
1267
  to also reset the object's fields.  (Thanks to David Bertrand.)
1268
1269
2006.02.15:
1270
- Changed "GetFileSize()" (defined in "liveMedia/include/InputFile.hh") and
1271
  "ByteStreamFileSource::fileSize()" to return a "u_int64_t", to allow for
1272
  (potentially) large files.
1273
- Changed the "microseconds" parameter to "TaskScheduler::scheduleDelayedTask()"
1274
  from "int" to "int64_t".  This allows for durations greater than the previous
1275
  ~2000 second limit.
1276
- Updated "RTSPClient" to support handling RTSP requests sent by the server.
1277
  (Some servers send periodic requests back to the client as a keep-alive test.)
1278
  At present, we just respond to such requests with a "not allowed" error.
1279
  (Thanks to Khanh Mai for this change.)
1280
- Updated "MultiFramedRTPSource::doStopGettingFrames()" to reset the
1281
  "ReorderingPacketBuffer".  (Thanks to David Bertrand for this fix.)
1282
- Corrected a small bug in the previous "RTSPClient" modification
1283
  (noticed by Glen Gray).
1284
- Fixed a bug in "ADTSAudioFileSource" when parsing the optional "crc_check"
1285
  field.  (Thanks to Paul Li for noticing this.)
1286
1287
2006.01.27:
1288
- Updated "RTSPClient" to:
1289
  - allow the "parameterName" parameter to "getMediaSessionParameter()" to be NULL
1290
  - add a "setUserAgentString()" member function, to allow clients to
1291
    specify an alternative string for "User-Agent:" headers
1292
  - parse the optional "timeout" parameter in response "Session:" headers,
1293
    and added a "sessionTimeoutParameter()" member function to retrieve it.
1294
  (Thanks to Glen Gray for proposing these changes.)
1295
- Fixed "H263plusVideoRTPSource" to properly initialize two member variables
1296
  in its constructor.  (Thanks to David Bertrand for this fix.)
1297
- Added Bernhard Feiten's support for H.263plus parsing/framing
1298
1299
2006.01.24:
1300
- Corrected the maximum PES packet size (in "MPEG1or2DemuxedElementaryStream.cpp")
1301
  to allow for a 6-byte header.  (Thanks to Jiri Pinkava for this fix.)
1302
- Fixed "MPEG1or2AudioStreamFramer" to avoid a potential divide-by-zero when
1303
  it's fed certain malformed MPEG audio data.  (Thanks to Eric Peters for this.)
1304
- Updated the top-level "Makefile.tail" to make it clear that "testProgs" can't
1305
  be built until after the 'library' directories are built. This ensures that
1306
  parallelizing "make"s don't do the wrong thing.
1307
1308
2006.01.05:
1309
- Updated "MPEG4VideoStreamFramer" to make the parsing of MPEG-4 video a bit
1310
  more robust.  (Thanks to Khanh Mai for this suggestion.) 
1311
1312
2006.01.04:
1313
- Updated "OnDemandServerMediaSubsession" to tear down the stream (thus sending
1314
  a RTCP "BYE") when the input source ends, iff the stream does not have a known
1315
  duration.  (If the stream has a known duration, then we keep the stream alive,
1316
  in case a client wants to seek backwards in it.) 
1317
1318
2005.12.30:
1319
- Extended the previous release's fix to also work with the RTSP
1320
  "OPTIONS" command.
1321
1322
2005.12.29:
1323
- Include (if necessary) authentication headers in the initial HTTP
1324
  "GET" and "POST" commands, if we're setting up RTSP-over-HTTP tunneling.
1325
  This allows "RTSPClient" to work properly with some Axis cameras, which
1326
  require authentication on these HTTP commands.
1327
1328
2005.12.23:
1329
- Fixed the RTCP port number in the RTSP "Transport:" header "port=" part
1330
  (for multicast streams).
1331
- Updated the change that we made in version 2005.11.02 so that it also
1332
  sets the port number correctly.
1333
1334
2005.12.15:
1335
- Made calls to "select()" more robust, by checking for (and ignoring)
1336
  EAGAIN or EINTR errors.
1337
- Fixed a bug in "MPEG4VideoFileServerMediaSubsession" that could occur if a
1338
  bad MPEG-4 video file (not containing any initial 'config' data) is read.
1339
  (Thanks to Trevor Pering for noticing this.)
1340
- Removed an undocumented, experimental and rarely-used option from "openRTSP".
1341
1342
2005.12.09:
1343
- Updated the RTCP implementation so that reception stats for a SSRC are now kept
1344
  around even after a RTCP BYE is received, in case we want to use these stats
1345
  for QOS reports.  (However, if a SSRC is reaped due to inactivity, then the
1346
  reception stats are deleted.)
1347
1348
2005.12.05:
1349
- On some systems (notably FreeBSD), "struct sockaddr_in" includes a "sin_len"
1350
  field, which should be set before the struct is used.  We now replace declarations
1351
  of "struct sockaddr_in" with a macro MAKE_SOCKADDR_IN() (defined in
1352
  "groupsock/include/GroupsockHelper.hh").  This macro sets the "sin_len" field
1353
  iff "HAVE_SOCKADDR_LEN" is defined on the command line.
1354
  (Thanks to Boris Nikolaus for noting this issue.)
1355
- Fixed a bug in the timestamp generation for certain rare MPEG-4 video streams.
1356
  (Thanks to Bernhard Feiten for reporting this.)
1357
1358
2005.11.30a:
1359
- Improved the calculation of the per-Transport Packet duration in
1360
  "MPEG2TransportStreamFramer", so that the overall transmit duration
1361
  tries to match the client playout duration (as determined by PCRs).
1362
- Minor patch to avoid errors when compiling with GCC 4.1.
1363
  (Patch contributed by Hanno Boeck.)
1364
- Patch to the special 'Kasenna'-specific support in "RTSPClient".
1365
  (Patch contributed by Glen Gray.)
1366
1367
2005.11.11:
1368
- Modified "MPEG2TransportStreamFramer" to take the PCR "discontinuity_indicator"
1369
  flag into account when updating the estimated duration of each TS packet.
1370
1371
2005.11.03:
1372
- Minor bug fix to the previous version's update to "RTSPClient".
1373
1374
2005.11.02a:
1375
- Updated the previous release to add a new (optional)
1376
  "forceMulticastOnUnspecified" parameter to "RTSPClient::setupMediaSubsession()".
1377
  This forces the client to request a multicast stream if the original SDP
1378
  response address was unspecified (0.0.0.0).  (Note that not all servers
1379
  will be able to handle this.)  We also handle the "port=" field in RTSP
1380
  "SETUP" response "Transport:" headers.
1381
- Fixed "RTSPServer" to include a proper "port=" field in the "SETUP"
1382
  "Transport:" response when streaming multicast.
1383
1384
2005.11.02:
1385
- Updated "RTSPClient" to use the "destination=" address in the "SETUP"
1386
  response's "Transport:" header - for multicast streams.  We do this because
1387
  some weird servers (e.g., Axis cameras, reportedly) do not specify the
1388
  multicast address earlier, in the "DESCRIBE" response's SDP.
1389
1390
2005.10.28b:
1391
- Added a "rtpTimestampFrequency" parameter (with default value 90000)
1392
  to "H263plusVideoRTPSink", "MPEG4ESVideoRTPSink".
1393
1394
2005.10.28a:
1395
- Removed some unnecessary "delete"s, and changed some "delete"s to
1396
  "Medium::close()"s.  (Minor bug noted by Zhixue Zhang.)
1397
1398
2005.10.28:
1399
- Fixed a potential 'divide by zero' problem in "MP3Internals.cpp".
1400
  (Thanks to Eric Peters for noting this.)
1401
1402
2005.10.27:
1403
- Added a "numEntries()" pure virtual function to "HashTable".
1404
  (Thanks to David Bertrand for this suggestion.)
1405
1406
2005.10.23:
1407
- When creating a Transport Stream from AC-3 audio input, we now use a stream_id
1408
  of 0x06 rather than 0x81.
1409
- Add support for receiving the various G.726 RTP payload formats, described
1410
  in RFC 3551.
1411
- Added an implementation of the "doStopGettingFrames()" virtual function to
1412
  "BasicUDPSource".  (Thanks to Adrian Hornsby for this suggestion.)
1413
- Changed the reimplemented virtual functions in "BasicUsageEnvironment0" and
1414
  "BasicTaskScheduler0" from "protected" to "public".  (Thanks to David Bertrand
1415
  for this suggestion.)
1416
- Added support to "RTSPClient" for the "GET_PARAMETER" RTSP command.
1417
  (Thanks to Glen Gray for this.)
1418
- Added a Windows version of the "genWindowsMakefiles" script.  This should
1419
  make it easier for Windows users to unpack and build the code.
1420
  (Thanks to Erwin Herzog for this script.)
1421
1422
2005.10.05:
1423
- Fixed a couple of bugs noticed by David Bertrand.
1424
1425
2005.09.23:
1426
- This software is now called "LIVE555 Streaming Media", and our preferred domain name
1427
  is now "live555.com".
1428
1429
2005.09.20:
1430
- Updated "MPEG2TransportStreamMultiplexor" to increase the frequency of PMTs
1431
  and PATs in the output Transport Stream. 
1432
- More improvements to "MPEG2TransportStreamFromESSource".
1433
- Updated "RTSPServer" to allow for empty stream names from certain non-standard
1434
  RTSP clients (such as Amino STBs).
1435
- Fixed "RTSPClient::tearDownMediaSession()" to delete each subsession's
1436
  "sessionId" field.
1437
- Fixed a minor memory leak in "RTSPClient" (when implementing HTTP tunneling)
1438
1439
2005.09.09:
1440
- Made the destructors for "BasicUsageEnvironment" and "BasicUsageEnvironment0"
1441
  protected rather than public, to match the base class "UsageEnvironment".
1442
- More improvements to "MPEG2TransportStreamFromPESSource" and
1443
  "MPEG2TransportStreamFromESSource".
1444
1445
2005.09.06:
1446
- Modified "MPEG2TransportStreamMultiplexor", and added
1447
  "MPEG2TransportStreamFromESSource".
1448
1449
2005.08.26:
1450
- Updated "MediaSession" to parse the SDP "a=type:" attribute.  (Patch by
1451
  Derk-Jan Hartman.)
1452
- Added support to "RTSPClient" for handling Microsoft servers' non-standard use
1453
  of the RTSP/RTP protocol.  Also, fixed the parsing and generation of floating
1454
  point numbers in the RTSP "Range:" and "Scale:" headers to work correctly in
1455
  non-POSIX locales.  (Thanks to Derk-Jan Hartman for this suggestion.)
1456
- Fixed a memory leak in "MPEG2TransportStreamFromPESSource".
1457
- Changed "MP3StreamState::readFromStream()" from "private" to "protected", to
1458
  satisfy a request by Pierre l'Hussiez.
1459
1460
2005.08.09:
1461
- Improved the Transport Stream generation software to (in the future) allow
1462
  for generating Transport Streams from Elementary Stream data as well as
1463
  from PES packet data.
1464
1465
2005.07.23:
1466
- Improved "H264VideoRTPSource" to properly handle 'aggregate' packets
1467
  that contain more than one NAL unit.
1468
1469
2005.07.21:
1470
- We no longer set a RTCP "RR" handler when we're streaming, unicast on-demand,
1471
  from a shared input source.  (The reason for this is that, in this case,
1472
  we also share a RTCP instance for all client sessions (streams).
1473
  A better fix will eventually be needed.)
1474
1475
2005.07.19:
1476
- Updated H.264/RTP support.
1477
1478
2005.07.15:
1479
- Oops, DEBUG was not supposed to be defined in "RTSPServer.cpp".
1480
- Added "-D_LARGEFILE_SOURCE=1" to the "COMPILE_OPTS =" line of the various
1481
  "config.*linux*" files, to ensure that code that uses "fseeko()" will
1482
  compile properly for all Linux systems.
1483
1484
2005.07.13:
1485
- When handling a 'passive' session, we no longer set a RTCP "RR" handler,
1486
  because (unlike unicast, on-demand sessions) the RTCP instance usually
1487
  outlives RTSP client sessions.  (Thanks to Jon Sheller for reporting
1488
  this bug.)
1489
1490
2005.07.12:
1491
- Minor updates to the Base64 code for H.264/RTP receiving.
1492
1493
2005.07.10:
1494
- Removed a debugging version of "testOnDemandRTSPServer" that had mistakenly been
1495
  left in the proevious revision.  If you downloaded the previous revision, then
1496
  please download this version instead!
1497
- Fixed "MPEG1or2VideoStreamFramer" to better handle MPEG video streams where the
1498
  first GOP time code has a non-zero 'pictures' count.
1499
  (Thanks to Eric Peters for reporting this problem.)
1500
- Some enhancements to the Base64 code, for eventual use by "H264VideoRTPSource".
1501
1502
2005.07.08:
1503
- Added - to "RTCPInstance" - the ability to assign 'handler' functions
1504
  to be called on the arrival of RTCP "SR" or "RR" packets (as well as "BYE").
1505
  We now use this mechanism (specifically, a RTCP "RR" handler) to improve the
1506
  optional 'liveness' test for "RTSPServer".  (Liveness is now indicated by
1507
  either a RTSP command over the TCP connection, or the arrival of a RTCP
1508
  "RR" packet.)
1509
- Moved routines for Base64 encoding and decoding into the "liveMedia"
1510
  library.  (Base64 encoding was already being used by "RTSPClient";
1511
  Base64 decoding will soon be used by "H264VideoRTPSource".)
1512
1513
2005.07.01:
1514
- Updated "testOnDemandRTSPServer" to demonstrate AAC audio streaming (from an
1515
  ADTS-format file)
1516
- Made some modifications to (supposedly) make the code compile better for
1517
  WinCE. 
1518
1519
2005.06.30:
1520
- Added support for reading and streaming from AAC audio files in ADTS format.
1521
  (Thanks to Manthan Systems for funding this work.)
1522
- Removed duplicate code in "testOnDemandRTSPServer.cpp".
1523
- Removed duplication of a common error message from "RTSPClient.cpp".
1524
1525
2005.06.29:
1526
- Added support for Basic authentication (in addition to Digest authentication)
1527
  to "RTSPClient".
1528
- Removed a minor memory leak in "PassiveServerMediaSubsession".
1529
- Improved "MPEG4ESVideoRTPSource" to better note when received RTP packets
1530
  begin or end a MPEG-4 'frame'.  (Thanks to Saumya Chandra for noting the
1531
  limitations of the previous code.)
1532
- Changed some member functions in "PassiveServerMediaSubsession" from
1533
  "private" to "protected", to allow subclassing.  (Thanks to
1534
  Fabrice Aeschbacher for this suggestion.)
1535
1536
2005.06.16:
1537
- Fixed a bug in the generic MPEG (1, 2 or 4) video parsing code that was causing some
1538
  MPEG-4 streams not to be parsed correctly.
1539
- Updated "MPEG4VideoStreamFramer" to better handle MPEG-4 video streams that contain
1540
  'B' frames.  (Now, more accurate presentation times and frame durations are computed
1541
  for such streams.)
1542
1543
2005.06.07:
1544
- Modified the Windows-specific code in "ByteStreamFileSource.cpp" to compile properly
1545
  under MINGW.
1546
1547
2005.06.04:
1548
- Updated "MPEG2TransportStreamFramer::doStopGettingFrames()" to clear the PID status
1549
  table.  This makes it possible to handle PCR discontinuities when seeking (e.g.)
1550
  within a stream.
1551
- Updated the "ByteStreamFileSource::seekToByte*()" operations to take 64-bit
1552
  parameters, to allow for seeking within files that are >4 GB in size.
1553
1554
2005.05.26a:
1555
- Updated the 'seeking' operations in "ByteStreamFileSource" to handle files
1556
 that are > 2^31 bytes in size.
1557
1558
2005.05.26:
1559
- Updated "RTCPInstance::setByeHandler()" to (by default) handle only "BYE"s that
1560
  come from active participants.  This means, for example, that a receiver of a
1561
  multicast stream can now quit without its RTCP "BYE" being handled by other
1562
  multicast receivers.  (By default, multicast receivers will now handle only
1563
  "BYE"s that come from the sender.)
1564
- "RTSPServer" now includes "rtptime" in the returned "RTPInfo:" header, because
1565
  the bugfix in the previous release also happened to fix the problem that this was
1566
  having with QuickTime Player.
1567
1568
2005.05.24:
1569
- Fixed "RTPSink" so that it now resets "fTimestampBase" only on the first time
1570
  that a timestamp is ever computed; not on the first time after "startPlaying()"
1571
  is called.  (Thanks to David Bertrand for noting this.)
1572
1573
2005.05.23:
1574
- Added support to "RTSPServer" for (optionally) reclaiming client connection
1575
  state (and stopping the stream) if no command has been received on the
1576
  RTSP TCP connection within a specified period of time.  This is useful for
1577
  use in closed systems where it is known that the RTSP client always uses
1578
  the "GET_PARAMETER" command as a periodic 'keep-alive'.  It stops the
1579
  stream from continuing indefinitely if the client suddenly dies.
1580
1581
2005.05.12:
1582
- Removed some unnecessary floating point code from "MP3Internals.cpp".
1583
  (This was causing unnecessary slowness on some hardware without floating point.)
1584
1585
2005.05.09:
1586
- Modified "MPEG2TransportStreamFramer" to give greater weight (0.5) to more recent
1587
  data when computing the estimate of per-transport-packet duration.  (This causes
1588
  it to respond more accurately to sudden changes in bitrate (i.e., in VBR streams).)
1589
- Added some (otherwise unnecessary) null destructors to stop gcc 4.0 from printing
1590
  warning messages.  (Thanks to Emiliano Parasassi for pointing this out.)
1591
1592
2005.05.05:
1593
- "RTSPServer" now uses separate buffers for requests and responses.  (This fixes
1594
  an issue that arose in the handling of requests from a set-top box.)  
1595
1596
2005.05.04:
1597
- Updated "RTSPServer" to make the parsing of "CSeq:" headers in RTSP requests
1598
  more robust.
1599
1600
2005.04.26:
1601
- Made sure that "MultiFramedRTPSource"s properly stop receiving incoming RTP
1602
  packets, when they're asked to stop.  (This fixes a bug that was being triggered
1603
  by some streams that continued sending RTP packets after a RTCP "BYE".  Thanks to
1604
  Eberhardt Garner for helping track this down.)
1605
- Fixed a minor memory leak in "openRTSP".
1606
- Updated "FramedSource.hh" to no longer (by default) support the old form of
1607
  the 'after getting' function.
1608
  
1609
2005.04.23:
1610
- Added "H264VideoRTPSource", for receiving H.264/RTP streams.
1611
  (Thanks to Erik Hellerud for this.)
1612
- Made some minor modifications to "ServerMediaS(ubs)ession",
1613
  to support a customer's project.
1614
1615
2005.04.22:
1616
- Improved "MPEG1or2VideoRTPSink" to allow more than one complete video 'slice'
1617
  from the same picture to be packed into an outgoing RTP packet.
1618
- Eliminated a bogus "IP_ADD_MEMBERSHIP" error message that Windows (for some
1619
  reason) sometimes triggers for no reason.
1620
1621
2005.04.20:
1622
- Changed the name of the (platform-independent) "_close()" function to
1623
  "closeSocket()", to prevent an apparent function name conflict in Windows.
1624
1625
2005.04.13:
1626
- Modified "ourSourceAddressForMulticast()" to try the
1627
  "gethostname()"/"gethostbyName()" method if the 'multicast loopback' method fails.
1628
- Made some modifications to "ServerMediaSubsession" to support "SIPServer"
1629
  (whose implementation is currently in progress).
1630
1631
2005.04.07:
1632
- Fixed a bug in the "base64Encode()" routine in "RTSPClient.cpp".
1633
  (Thanks to Raphael Rigo for noticing this.)
1634
- Updated "MPEG1or2VideoStreamDiscreteFramer" to handle the "iFramesOnly" and
1635
  "vshPeriod" parameters (just as the original "MPEG1or2VideoStreamFramer"
1636
  already does).
1637
1638
2005.03.31:
1639
- Removed some testing code that had accidentally been left in the previous
1640
  release.  If you use "openRTSP", then please use this release instead of the
1641
  previous one. 
1642
- Fixed a bug in "RTPServer" when handling streams without stream names.
1643
  (The bug had been introduced in version 2005.03.28.)
1644
1645
2005.03.30:
1646
- Improved the support for seeking within RTSP/RTP-streamed MPEG-1 or 2
1647
  Program Stream files.  (A/V sync after a seek still isn't perfect, though.)
1648
1649
2005.03.28:
1650
- The "RTSPServer" implementation now supports raw-UDP streaming, for those
1651
  clients that request it.  (This is usually requested only by some specialized
1652
  clients - such as set-top boxes - and only for data such as MPEG Transport
1653
  Streams where audio/video is muxed together (and no RTP timestamps are needed).)
1654
- Updated the calculation of MP3 sampling frequencies to allow for 'MPEG2.5'
1655
  (Thanks to Massimo Buffo for this fix.)
1656
1657
2005.03.23:
1658
- Changed "BasicTaskScheduler::SingleStep()" to call only one read handler during
1659
  each iteration of the event loop.  This prevents potential problems if
1660
  the event loop is called reentrantly from within a read handler.
1661
- Added a new, alternative version of "ByteStreamFileSource::createNew()" that
1662
  takes an open file (FILE*) as parameter, instead of a file name.
1663
  (Thanks to Mike Yan for this suggestion.)
1664
- Updated the top-level Makefile to build the lower-level directories using
1665
  "$(MAKE)" rather than "make".  This allows a command other than "make"
1666
  (e.g., "gmake") to be used.  (Thanks to Sergio.Gelato for this fix.)
1667
- Minor changes to (apparently) make Sun's C++ compiler happy.
1668
  (Thanks to Sergio.Gelato for these.) 
1669
- Some changes to "RTSPServer" to make it more tolerant of some strange, non-standard
1670
  clients.
1671
- Support seeking within RTSP/RTP-streamed MPEG-1 or 2 Program Stream files.
1672
1673
2005.03.11:
1674
  Updated "MPEG2TransportStreamFromPESSource" once again to better handle
1675
  Program Streams that include a "program_stream_map".
1676
1677
2005.03.10:
1678
- Modified "BasicUDPSource" to make its OS socket receive buffer at least 50 kBytes
1679
  (the same as we do for "MultiFramedRTPSource").
1680
1681
2005.03.07:
1682
- Updated "MPEG2TransportStreamFromPESSource" (and thus also the
1683
  "testMPEG1or2ProgramToTransportStream" demo application) to handle MPEG
1684
  Program Streams that include MPEG-4 Elementary Stream data.  (For this to work,
1685
  the Program Stream must include a "program_stream_map".)
1686
1687
2005.03.05:
1688
- Modifying "ReceivingInterfaceAddr" now works before receiving
1689
  unicast streams.  (Previously, it worked only when receiving multicast
1690
  streams.)  Also, added a new option "-I <interface-ip-address>"
1691
  to "openRTSP", to allow the user to specify which interface is used.
1692
  (Thanks to Luca Abeni for this patch.)
1693
- Fixed a "delete[]" vs "delete" bug in "MPEG4VideoStreamFramer",
1694
1695
2005.02.28:
1696
- Fixed a bug (that had been introduced in the 2005.01.07 version)
1697
  in the MP3 frame<->ADU conversion code.
1698
1699
2005.02.25:
1700
- Fixed some minor memory leaks.
1701
- Made some more changes to prepare for RTSP server seeking within MPEG-1 or 2
1702
  Program Stream files.  (This is still not done yet.)
1703
1704
2005.02.14:
1705
- Changed the generation of "rtptime" in "RTPInfo:" RTSP headers to use 
1706
  %u instead of %d.  (Thanks to Regis Feneon for noting this.)
1707
- Made some changes to prepare for RTSP server seeking within MPEG-1 or 2
1708
  Program Stream files.  (This is still not done yet.)
1709
1710
2005.02.09:
1711
- Updated "MultiFramedRTPSink" to allow for frame-specific special headers to
1712
  appear before each frame in RTP packets.  (This in addition to the (possible)
1713
  special header that may appear at the start of the packet.)  This functionality
1714
  is added using a new virtual function "frameSpecificHeaderSize()" (that,
1715
  by default, returns 0.)  Thanks to Matt Romaine for this.
1716
- Added a new "BufferedPacket" virtual member function
1717
  "getNextEnclosedFrameParameters()", which will (eventually) replace the existing
1718
  "nextEnclosedFrameSize()" virtual member function.  This (plus a corresponding
1719
  change to "MultiFramedRTPSource") now makes it possible to give correct 
1720
  presentation times to multiple frames within incoming RTP packets.
1721
1722
2005.02.07:
1723
- The "MultiFramedRTPSink::setPacketSizes()" function now applies just to one
1724
  specific "MultiFramedRTPSink" object; not to all such objects.
1725
- Added a new version of "RTSPServer::removeServerMediaSession()" that takes
1726
  the (string) stream name - rather than the "serverMediaSession" object
1727
  - as argument.
1728
1729
2005.01.29:
1730
- We now remove reception and transmission statistics records (from each
1731
  "RTPSource" and "RTPSink", respectively), whenever each RTCP SSRC membership
1732
  gets 'reaped'.  We also added more information to "RTPTransmissionStats".
1733
  (Thanks to WIS Technologies for funding this work.)
1734
- Some minor fixes to "JPEGVideoRTPSource".  (Thanks to Sergey Khlutchin for
1735
  reporting this.)
1736
- Made the "ServerMediaSession" constructor "protected", to allow for
1737
  subclassing.  (This was requested by Eric Peters.)
1738
- Updated "win32config.Borland" and modified some header files, so that the
1739
  code can be built using Borland's "C++ Builder 5.0".
1740
  (Thanks to David Wu for this suggestion.)
1741
- Added a "setPacketSizes()" function to "MultiFramedRTPSink" to make it
1742
  possible to change the 'maximum' and 'preferred' size of outgoing
1743
  RTP packets.  (Thanks to Christian Gerstner for this suggestion.) 
1744
1745
2005.01.24:
1746
- Some MIME-type parameters in SDP "a=fmtp:" lines are Boolean, taking only values
1747
  0 or 1.  Sometimes these parameters are set (to 1), without an explicit "=1"
1748
  being in the SDP "a=fmtp:" line.  (This is not legal, but it sometimes occurs.)
1749
  Our SDP parsing code (in "MediaSession.cpp") now checks for this.
1750
1751
2005.01.23:
1752
- More improvements to "AVIFileSink".  MPEG-1, 2 or 4, JPEG and H.263 video is
1753
  now supported, along with raw PCM or u-law audio.  (However, audio is not
1754
  yet working perfectly, and MPEG audio is currently not supported at all.)
1755
  (Thanks to WIS Technologies for funding this work.)
1756
- Changed the (many) calls to "gettimeofday()" to pass NULL as the 'timezone'
1757
  parameter, because this isn't used.
1758
1759
2005.01.13:
1760
- Fixed a bug in "liveMedia/OnDemandServerMediaSubsession.cpp" that was reportedly
1761
  causing crashes on some systems.  (Thanks to Brian Wang for finding this.)
1762
- Updated "MPEG1or2VideoStreamDiscreteFramer" and
1763
  "MPEG4VideoStreamDiscreteFramer" to set appropriate presentation
1764
  timestamps for B-frames.  (Unlike I and P-frames, B-frames' timestamps are
1765
  not monotonically increasing.)  (Thanks to WIS Technologies for funding this work.)
1766
1767
2005.01.07:
1768
- Fixed a bug in "JPEGVideoRTPSink" that was causing incorrect packets to
1769
  be generated when streaming using non-standard JPEG quantization tables
1770
  (which must be included in the RTP packets).
1771
- Updated the handling of incoming MP3 ADUs to allow for the possibility of
1772
  receiving ADUs that contain 'ancillary data' at the end.  (For example,
1773
  ADUs for "mp3Pro" frames are like this.)  Note, however, that our
1774
  MP3 frame-to-ADU generating code currently doesn't include 'ancillary
1775
  data' at the end of the generated MP3 ADUs.  This will need to be fixed
1776
  in order to be able to correctly *transmit* ADUs for "mp3Pro" frames.
1777
- More work on "AVIFileSink".  Recording of MPEG-4 video-only files now works.
1778
1779
2004.12.29:
1780
- Added a new liveMedia 'sink' class - "AVIFileSink" - for writing an AVI-format
1781
  file.  Note: This is not fully working yet, so don't try using it yet!
1782
  (Thanks to WIS Technologies for funding this work.)
1783
1784
2004.12.23:
1785
- Fixed a bug in the previous release (when receiving MPEG-2 Transport RTP streams).
1786
1787
2004.12.22:
1788
- Updated "MPEG4GenericBufferedPacket::nextEnclosedFrameSize() to (i) allow
1789
  for "generic" mode, and (ii) properly check for the absence of an
1790
  "AU Header section".  (Thanks to Erick van Rijk for this suggestion.)
1791
- When receiving a MPEG-2 Transport Stream (either RTP *or* raw-UDP), pass it
1792
  through a "MPEG2TransportStreamFramer", so that "durationInMicroseconds" is
1793
  set appropriately, based on the stream's embedded PCR values.
1794
  (Thanks to Dermot McGahon for this suggestion.)
1795
- Changed the "num_packets_lost" statistics line (printed by "openRTSP -Q")
1796
  to format as an int rather than as an unsigned.  This is in case this value
1797
  is negative (which can happen if duplicate packets are received).
1798
  (Thanks to Norbert Donath for noting this.)
1799
1800
2004.12.15:
1801
- Changed the RTSP servers in the various test programs to use port 8554
1802
  instead of port 7070 for RTSP (as an alternative to the standard port
1803
  554).  It turns out that port 8554 is the official IANA-reserved port
1804
  number for RTSP (alternative).
1805
- Changed "RTSPClient" to include the "Scale:" header if the scale is being changed
1806
  to 1.0 from something else.  (Thanks to Matt Romaine for this suggestion.)
1807
1808
2004.12.09:
1809
- Fixed a bug in the handling of "audio/X-MP3-DRAFT-00" RTP streams.
1810
  (Thanks to Dhananjay Deshpande for noticing this.)
1811
1812
2004.12.07:
1813
- Updated "RTSPClient" to parse the "Scale:" header (if any) in a response to
1814
  a "PLAY" command, and set a corresponding field in the "MediaSession" or
1815
  "MediaSubsession" structure.
1816
1817
2004.12.06:
1818
- Fixed a minor bug in "BasicTaskScheduler::SingleStep()" that would be triggered
1819
  if the (optional) "maxDelayTime" parameter were unusually large.
1820
- The "RTSPServer" implementation of RTP/RTC-over-TCP streaming will now work even
1821
  if the client's RTSP "SETUP" command doesn't include an "interleaved=" field.
1822
1823
2004.11.30:
1824
- Added "RTSPServer" support for the RTSP "Scale:" header, which is used to
1825
  implement 'trick play': fast forward and reverse play.  The actual implementation
1826
  of these depends on the media type; it is currently implemented for MPEG-1 or 2
1827
  (including MP3) audio (forward play only), and for WAV (PCM) audio (forward or
1828
  reverse play).
1829
  (Thanks to Sony Corporation for funding this work.)
1830
1831
2004.11.26:
1832
- Improved "H263plusVideoRTPSource" to better recognize which packets begin
1833
  a frame.  (This should improve its performance on lossy networks.)
1834
- Improved the parsing of MPEG-1 or 2 audio streams to ignore more bogus
1835
  'syncwords'.
1836
- We now look for the 'Xing' VBR Table of Contents, and use this (if present)
1837
  to implement seeking within VBR files.
1838
- Updated "ADUFromMP3Source" to allow the internal data buffers to be flushed
1839
  (e.g., if there is a discontinuity in the MP3 input data).
1840
- When streaming a seekable MPEG audio stream on demand, insert filters that
1841
  convert the input stream to ADU format, and then back to MP3.  This allows
1842
  us to seek within the stream without being tripped up by the MP3
1843
  'bit reservoir' (back-pointer). 
1844
1845
2004.11.20:
1846
 - Fixed a bug in "MediaSession::initiateByMediaType()".  (It was not allowing
1847
   for the possibility that a subsession had already been initiated.)
1848
1849
2004.11.19:
1850
- For consistency (and ease of comparison), the "MIMEtype()"
1851
  codec name substring for each "MediaSource" subsession is in upper case.
1852
1853
2004.11.18:
1854
- Added an optional "scale" parameter to the "RTSPClient" "play...()"
1855
  methods, to allow a client to specify fast forward or rewind 'trick play'.
1856
  (Thanks to Dermot McGahon for this suggestion.)
1857
1858
2004.11.16:
1859
- Fixed a bug in the way that "QuickTimeFileSink" records the duration of
1860
  multi-channel audio tracks in ".mov" or ".mp4"-format files.
1861
  (Thanks to Orban/CRL Inc. for funding this work.)
1862
1863
2004.11.11a:
1864
- Another minor update to "RTSPClient".
1865
1866
2004.11.11:
1867
- Updated the "RTSPServer" implementation to handle the case where a "PLAY"
1868
  request does not contain a "Range:" header.  (Suggestion by Brian Wang.)
1869
- Reinstated the "MPEG4LATMAudioRTPSource" fix from version "2004.08.24".
1870
  (It had accidentally gotten deleted.)
1871
- Included Dermot McGahon's patch to "RTSPClient" to support the bogus
1872
  non-standard 'Kasenna' variant of RTSP.
1873
1874
2004.11.09a:
1875
- Fixed the previous revision (RTSP seeking support) to work properly with VLC.
1876
- Fixed a bug that was causing receivers of SSM streams to not receive RTCP packets.  (Thanks to Alessandro Gaiarin for reporting this.)
1877
1878
2004.11.09:
1879
- Added support for seeking within streams.  This currently works only for
1880
  WAV audio file streams, and MPEG audio (include MP3) file sources.
1881
  (However, it doesn't yet work properly for VBR MP3 files; this will get fixed.
1882
  Also, it doesn't yet work properly with VLC.)
1883
  (Thanks to Sony Corporation for funding this work.)
1884
1885
2004.11.06:
1886
- Improved the way that we specify output buffers for "RTPSink" objects.
1887
  We now do this using a "maxSize" static member variable (instead of 
1888
  using a 'number of packets' variable as we did before).  We also limit
1889
  the size of the output buffer used for RTCP packets, to save space.
1890
- When streaming a MPEG Transport Stream, don't set the RTP 'M' bit.
1891
- When recording a ".mov" or ".mp4" file using "QuickTimeFileSink.cpp",
1892
  we no longer fill in the "width" and "height" fields for audio tracks.
1893
1894
2004.11.04:
1895
- When streaming MPEG audio or WAV audio files on demand, we now return the
1896
  correct file duration (in the RTSP "Range:" header and the SDP "a=range:"
1897
  attribute), so that media players will report the correct stream duration.
1898
  (Thanks to Sony Corporation for funding this work.)
1899
- In "MultiFramedRTPSink", we now wait until we receive the first data before 
1900
  initializing "fNextSendTime" with the current wall-clock time.
1901
  (Thanks to Eric Peters for suggesting this.)
1902
1903
2004.11.02:
1904
- Updated the RTSP "Range:" header (in a "PLAY" response) and the SDP "a=range:"
1905
  attribute to support streaming from sources with finite durations.
1906
  (Such sources can support seeking via RTSP.)  The "ServerMediaSubsession"
1907
  class now has a "duration()" virtual function.  (In the future,
1908
  "FileServerMediaSubsession" subclasses will redefine this, so that seeking
1909
  within the file will work.)
1910
  (Thanks to Sony Corporation for funding this work.)
1911
1912
2004.11.01:
1913
- Added support to "RTSPClient" for streaming RTSP/RTP over HTTP, using the technique
1914
  described in Apple's document: <http://developer.apple.com/documentation/QuickTime/
1915
QTSS/Concepts/chapter_2_section_14.html>.
1916
  This can be used for streaming from a Darwin Streaming Server from behind a
1917
  HTTP-only firewall.  (Note that our own RTSP server implementation doesn't yet
1918
  implement RTSP-over-HTTP, but this is on the 'to do' list.) 
1919
  (Thanks to Orban/CRL Inc. and WIS Technologies for funding this work.)
1920
1921
2004.10.28a:
1922
- Fixed "OnDemandServerMediaSubsession" so that "PAUSE"/"PLAY" works properly on
1923
  unicast streaming from files.
1924
1925
2004.10.28:
1926
- Removed (perhaps temporarily) the "rtptime=" parameter from the "RTP-Info:" header
1927
  that's returned in response to the RTSP "PLAY" command.  It appears that this may
1928
  be messing up A/V sync in QuickTime Player.
1929
1930
2004.10.26:
1931
- Updated "JPEGVideoRTPSink" (and "JPEGVideoSource") to allow for the
1932
  possibility of sending custom quantiziation tables in JPEG/RTP packets.
1933
- Fixed some compile warnings about unused named parameters.  (Thanks to
1934
  Thiago Correa for these suggestions.)
1935
1936
2004.10.22:
1937
- Added a new "MPEG1or2VideoStreamDiscreteFramer" class, similar to the existing
1938
  "MPEG4VideoStreamDiscreteFramer".
1939
1940
2004.10.21:
1941
- Modified the order of SDP lines generated by a RTSP server
1942
  (in "ServerMediaSession.cpp") to correspond to the exact order specified by
1943
  the SDP RFC.  JMIF clients are supposedly anal retentive about this.
1944
  (Thanks to Fabrice Aeschbacher for noticing this.)
1945
1946
2004.10.19:
1947
- Updated "MPEG2TransportStreamFramer" to properly handle input data that
1948
  doesn't begin with a 'sync' byte (0x47).
1949
1950
2004.10.18:
1951
- Added a new "removeServerMediaSession()" member function to "RTSPServer".
1952
- Updated the implementation of the RTSPServer "RTPInfo:" header to include a
1953
  "rtptime=" field.
1954
- Improved the "WindowsAudioInputDevice" trick for making the microphone the
1955
  first-listed device.  (Thanks to Syncanph Xie for this suggestion.)
1956
1957
2004.10.14:
1958
- Added a new argument "-4" to "openRTSP" (with corresponding updates to
1959
  "QuickTimeFileSink"), to generate a "MP4"-format file.  (Currently, this
1960
  works for MPEG-4 audio only.)
1961
  (Thanks to Orban/CRL Inc. for funding this work.)
1962
1963
2004.10.13:
1964
- Fixed a typo that was causing the Windows version not to build.
1965
  (Thanks to Thiago Correa for noticing this.)
1966
1967
2004.10.11:
1968
- Updates to "RTSPServer":
1969
  - Include a "Date:" header in each response
1970
  - Include a "Range:" header in each "PLAY" response.
1971
  - Include "RTP-Info:" header in each "PLAY" response.
1972
- Made "SimpleRTPSink" more idiot-proof.
1973
1974
2004.10.07:
1975
- Improved the parser in "MPEG4VideoStreamFramer" to be more tolerant of
1976
  bad/unexpected data.
1977
- Moved the code for opening input files by name (which includes a special-case
1978
  hack for "stdin") to a single common file - "InputFile.cpp" - to get rid of
1979
  duplicated code.
1980
1981
2004.10.04:
1982
- Fixed "UserAuthenticationDatabase::addUserRecord()" (in "RTSPServer.cpp") to
1983
  make a copy of the "password" string, before adding it to the hash table.
1984
  (The hash table already makes a copy of the "username" (key) string.)
1985
1986
2004.10.03:
1987
- Added support for receiving raw UDP streams (in addition to normal RTP/UDP streams)
1988
  (Thanks to Derk-Jan Hartman)
1989
1990
2004.09.30:
1991
- Updated the RTSP server "UserAuthenticationDatabase" to (i) allow for it to
1992
  be subclassed, and (ii) allow it to store passwords that are really
1993
  md5(<username>:<realm>:<password>)
1994
1995
2004.09.24:
1996
  Added support for access control (using digest authentication) to "RTSPServer".
1997
  Also, added example code to the "testOnDemandRTSPServer" test program to illustrate
1998
  how to use this. (Thanks to Orban/CRL Inc. and WIS Technologies for
1999
  funding this work.)
2000
2001
2004.09.22:
2002
- Moved the digest authentication support out of "RTSPClient.cpp"
2003
  (and "SIPClient.cpp") into a new file: "DigestAuthentication.cpp".  There's also
2004
  a corresponding new header file: "DigestAuthentication.hh".  This is in preparation
2005
  for adding digest authentication support to our RTSP server implementation also.
2006
2007
2004.09.20:
2008
- More improvements to the multi-unicast streaming support (from a single input
2009
  source).  RTP-over-TCP streaming is now supported in this case.  Updated
2010
  "testOnDemandRTSPServer" to add a variable "reuseFirstSource" (default: False)
2011
  that can be used to implement this.
2012
2013
2004.09.09:
2014
- Made a minor improvement to the multi-unicast streaming support.
2015
2016
2004.09.08:
2017
- Added optional "author" and "copyright" parameters to "DarwinInjector::setDestination()".
2018
- Added an optional "miscSDPLines" parameter to "ServerMediaSession::createNew()",
2019
  to allow the caller to add extra SDP lines to the session description.
2020
- Fixed a minor bug in the media tables reclamation code.
2021
- Added still more support for multi-unicast RTSP/RTP streaming from a
2022
  single input source.  (Thanks to Orban/CRL, Inc. and WIS Technologies for funding
2023
  this work.)
2024
2025
2004.09.05:
2026
- We now more gracefully handle malformed "m=" SDP lines.  (Thanks to
2027
  Derk-Jan Hartman for noticing this problem.)
2028
- In "RTSPClient", we now make the "CSeq" number a static variable, to avoid
2029
  potential problems if we connect to the same server with the same URL
2030
  more than once.  (Thanks to Keith Gurganus for the suggestion.)
2031
- Modified "RTSPServer" to use the destination interface IP address in
2032
  its "rtsp://" URL.
2033
2034
2004.09.02:
2035
- Modified "GroupsockHelper.cpp" to allegedly support building for WinCE.
2036
2037
2004.08.26:
2038
- Fixed a bug that could cause "AMRAudioRTPSource"s to not get reclaimed.
2039
  (Thanks to Chenglim Ear for reporting this.)
2040
- More support for multi-unicast RTSP/RTP streaming from a single input source.
2041
2042
2004.08.24:
2043
- Modified "LATMAudioRTPSource" to include the initial data length field
2044
  in the data that's delivered to a client.  (A decoder was needing to see this.)
2045
- Added a new "MPEG4VideoStreamDiscreteFramer" class, as a (more efficient)
2046
  alternative to "MPEG4VideoStreamFramer" when the input source is a sequence of
2047
  discrete MPEG-4 frames, rather than a byte stream.
2048
- Fixed a minor bug in "Media.cpp". (Thanks to Thiago Correa.)
2049
- Added more support for multi-unicast RTSP/RTP streaming from a single input
2050
  source.  (This now working, except for TCP connections - to be completed.)
2051
2052
2004.08.17:
2053
- Made the parsing of MPEG-1 or 2 video more robust, in case a Video Sequence Header
2054
  doesn't appear exactly where it should.
2055
- Added initial support for multi-unicast RTSP/RTP streaming from a single input
2056
  source.  (This isn't fully working yet - more support needs to be added.)
2057
2058
2004.08.13:
2059
- Added a "numChannels" parameter to "MPEG4GenericRTPSink" (optional)
2060
  and "MPEG4LATMAudioRTPSink".
2061
2062
2004.08.12:
2063
- Fixed a couple of small memory leaks (noticed by Gabriel Bouvigne).
2064
2065
2004.07.31:
2066
- Added support for MPEG-4 LATM audio RTP streaming.  (MPEG-4 LATM audio RTP
2067
  *receiving* had already been implemented.)  (Thanks to Orban/CRL, Inc. for
2068
  funding this work.)
2069
2070
2004.07.27:
2071
- Updated the MPEG Program-to-Transport Stream conversion mechanism to set the
2072
  correct stream tags depending on whether the input data is MPEG-1 or 2.
2073
2074
2004.07.23:
2075
- Added a "-O" (upper-case letter 'oh') option to "openRTSP".  This tells the
2076
  program to not send an initial "OPTIONS" request prior to "DESCRIBE".
2077
- Modified "BasicTaskScheduler" to better allow subclassing.
2078
- Added an optional "maximum delay time" option to
2079
  "BasicTaskScheduler0::SingleStep()".  This allows subclasses to impose a
2080
  limit on how long "select()" can delay, in case it wants to also do polling.
2081
2082
2004.07.22:
2083
- Fixed a serious bug that was causing some MPEG Program Stream files to be parsed
2084
  incorrectly - especially if they have non-MPEG header data at the front.
2085
- Modified the way in which "Medium" objects are reclaimed, to overcome an
2086
  obscure bug.
2087
2088
2004.07.20:
2089
- Added a comment to "DeviceSource.cpp" to clarify the purpose of "fTo", because
2090
  several people have gotten this wrong.
2091
- Made ~BasicUsageEnvironment protected (just like ~UsageEnvironment)
2092
- Fixed "samplingFrequencyFromAudioSpecificConfig()" to remove a memory leak.
2093
2094
2004.07.16:
2095
- Fixed a bug in "AMRAudioRTPSource", in the way that it handled input RTP packets
2096
  that contained more than one AMR frame.
2097
  (Thanks to Gabriel Bouvigne for reporting this problem.)
2098
- We no automatically reclaim the memory that was allocated for the "UsageEnvironment"
2099
  "liveMediaPriv" and "groupsockPriv" structures, once their tables become empty.
2100
2101
2004.07.14:
2102
- Updated "QuickTimeFileSink's" MPEG-4 audio recording mechanism again, this time
2103
  to support aacPlus as well as regular AAC.
2104
2105
2004.07.13:
2106
- Updated "QuickTimeFileSink" to support recording MPEG-4 audio (including
2107
  hint tracks).
2108
- Modified "MPEG4VideoStreamFramer" to allow simplified subclasses that take
2109
  discrete frames as input (and therefore don't need a full parser).
2110
2111
2004.07.07:
2112
- Added the (rather bogus) "a=x-qt-text-nam:" and "a=x-qt-text-inf:" attributes
2113
  to the SDP descriptions delivered by "RTSPServer" (in response to a "DESCRIBE"
2114
  operation).  These attributes get the same strings as the "s=" and "i=" lines
2115
  (respectively).  However, QuickTime Player doesn't do anything with those lines,
2116
  but does recognize the "a=x-qt-*" lines.
2117
2118
2004.07.06:
2119
- Modified the code so that it will build for WinCE.
2120
  (Thanks to Gabriel Bouvigne for these changes.)
2121
2122
2004.07.02:
2123
- Fixed a bug in HashTable::RemoveNext() (noted by Greg Bothe)
2124
- Added partial support for recording MPEG-4 audio in "QuickTimeFileSink".
2125
  (Hinting is not yet working properly for this media type.)
2126
- Added an option to "MPEG1or2AudioStreamFramer" to allow its presentation times
2127
  to be resynchronized by its input source.
2128
2129
2004.06.18:
2130
- Fixed a bug in "MPEG1or2AudioStreamFramer" (in the way it was checking for
2131
  syncwords at the start of each frame).
2132
- Updated the "MPEGVideoStreamFramer" (base) class to report "fNumTruncatedBytes".
2133
- Increased "OutPacketBuffer::numPacketsLimit" from 20 to 30.
2134
2135
2004.06.17:
2136
- Another improvement to the "MPEG1or2Demux" parsing code.
2137
- Updated "QuickTimeFileSink" to support recording MPEG-4 video tracks into
2138
  ".mov" files.  (There's also basic support for recording MPEG-4 audio, but
2139
  this isn't quite working yet.)
2140
2141
2004.06.14:
2142
- Updated "MPEG1or2Demux" to make the checking for a PACK_START_CODE more
2143
  robust if it's not immediately present where we expect to see it.
2144
- Fixed a bug in "JPEGVideoRTPSource" that could cause a problem on
2145
  64-bit architectures.
2146
  (Thanks to Andrey Filippov for noticing this.)
2147
2148
2004.06.11:
2149
- Removed an error from a error message in StreamParser.
2150
2151
2004.06.09:
2152
- Updated the implementation of the aggregate and non-aggregate RTSP "PLAY"
2153
  operations to not include a "Range:" header if the 'start' parameter is < 0.
2154
  (This is used when resuming from a "PAUSE", for example.)
2155
  Also, removed an unnecessary "Range:" header from the "PAUSE" command.
2156
  (Thanks to Gabriel Bouvigne for this suggestion.)
2157
- Reimplemented "MultiFramedRTPSource::doGetNextFrame1()" to use iteration
2158
  rather than recursion, in the case where a large frame is fragmented over
2159
  multiple incoming RTP packets.  This avoids the possibility of stack overflow
2160
  occurring if there are very large fragmented frames in the input data.
2161
2162
2004.06.07:
2163
- Added optional "start" and "end" parameters to the aggregate "PLAY" operation
2164
  in "RTSPClient".  (We had already done this for the non-aggregate "PLAY" operation.)
2165
- Made the input banks buffers in "StreamParser" heap-allocated, rather than making
2166
  them member variables.  This avoids any potential compiler problems with having
2167
  such large structures as member variables.
2168
2169
2004.06.03:
2170
- Added the new 'liveMedia' class "MPEG2TransportFileServerMediaSubsession", for
2171
  unicast on-demand streaming of MPEG-2 Transport Stream files.
2172
- Added the new test programs "testMPEG2TransportStreamer" and
2173
  "testMPEG1or2ProgramToTransportStream", and added support for Transport File
2174
  streaming to "testOnDemandRTSPServer".
2175
  (Thanks to DVAgroup Inc. for funding this work.)
2176
2177
2004.06.02:
2178
- Fixed "MediaSession" to no longer apply the normal RTP 'M' bit rule
2179
  when processing incoming "video/MP2T" (or "video/MP1S" or "video/MP2P")
2180
  streams.  (For such streams, the 'M' bit does not mean 'end of frame'.)
2181
2182
2004.06.01:
2183
- Updated "RTSPClient" to handle "Session:" headers that have a trailing
2184
  ";timeout=" part.  (Thanks to Gabriel Bouvigne for suggesting this.)
2185
2186
2004.05.31:
2187
- We now handle SDP "m=" lines with an optional <number-or-ports> field
2188
  (although we don't actually do anything with this value).  Thanks to
2189
  Derk-Jan Hartman for this suggestion. 
2190
2191
2004.05.29a:
2192
- Made a correction to the previous change.
2193
2194
2004.05.29:
2195
- Added a call to "DarwinInjector" to set the TCP socket's send buffer to 100 kBytes.
2196
2197
2004.05.28:
2198
- Renamed some variables in "MP3Internals.cpp" (and made them static) to
2199
  overcome a name conflict seen by the VLC developers.  (Thanks to
2200
  Derk-Jan Hartman for pointing this out.)
2201
2202
2004.05.26:
2203
- Fixed a bug (apparently introduced with recent header file changes) that
2204
  could cause MP3 files to not be read correctly on Windows.  (In particular,
2205
  this could cause "testMP3Streamer" to not work correctly on Windows.)
2206
  Thanks to David Skiba for the bug report.
2207
2208
2004.05.24:
2209
- Added a new member function "lastReceivedSSRC()" to "RTPSource".  This makes it
2210
  possible for a receiver to demultiplex incoming RTP data based on SSRC.
2211
  (Later this functionality should perhaps be added to "(MultiFramed)RTPSource"
2212
  instead.)
2213
- More updates to "DarwinInjector".
2214
2215
2004.05.19:
2216
- Another update to "openRTSP" for a customer job.
2217
2218
2004.05.17:
2219
- Added a new test program "testMPEG4VideoToDarwin.cpp" that is similar
2220
  to "testMPEG4VideoStreamer", except that instead of transmitting the
2221
  video RTP/RTCP packets via multicast, it transmits them - via a RTSP TCP
2222
  connection - to a remote Darwin Streaming Server.
2223
2224
2004.05.12:
2225
- Added a new "liveMedia" class - "DarwinInjector" - that can be used to send an
2226
  audio and/or video RTP/RTCP stream to a remote Apple 'Darwin' (aka. QuickTime)
2227
  Streaming Server, for playing by (potentially multiple) RTSP clients.
2228
- Added a new test program "testMPEG1or2AudioVideoToDarwin.cpp" that is similar
2229
  to "testMPEG1or2AudioVideoStreamer", except that instead of transmitting the
2230
  audio/video RTP/RTCP packets via multicast, it transmits them - via a RTSP TCP
2231
  connection - to a remote Darwin Streaming Server.
2232
2233
2004.05.09:
2234
- Removed a line of junk that had erroneously been left at the start of Makefile.tail.
2235
- The "testRelay" test program has been reprogrammed in the usual liveMedia
2236
  'source->sink' style.
2237
2238
2004.05.07:
2239
- Another update to RTSPClient for a customer job.
2240
2241
2004.05.04:
2242
- Added an #include to "BasicUDPSink.cpp" to prevent a compilation problem on
2243
  some platforms.
2244
2245
2004.05.02:
2246
- Some updates to RTSPClient and openRTSP for a customer job.
2247
2248
2004.04.27:
2249
- Fixed the round-trip time estimation routine in "RTPSink" to allow for
2250
  the possibility of the computed round-trip time being negative.  This can
2251
  happen if there is clock drift between the sender and receiver, and if the
2252
  actual round-trip time was quite small.  If this happens, the returned
2253
  round-trip time value is zero.
2254
  (Thanks to Dixon Siu for alerting us to this issue.)
2255
2256
2004.04.23:
2257
- Updated some #ifdef's so that the code will compile with "mingw" on Windows.
2258
  (Thanks to Joey Parrish for this.)
2259
- Added a "BasicUDPSink" class to "liveMedia", for UDP streaming without RTP.
2260
- Added new 'filter' classes to "liveMedia" for
2261
  - converting MPEG Program Streams to Transport Streams.
2262
  - 'framing' MPEG Transport Streams to return the 'duration' of each Transport
2263
  packet (i.e., the inter-packet time gap).
2264
2265
2004.04.09:
2266
- Fixed a byte-ordering bug in the code for streaming from WAV audio files
2267
  (used in "testWAVAudioStreamer" and "testOnDemandRTSPServer").  We were converting
2268
  16-bit samples from host to network order before streaming them.  That was wrong,
2269
  because audio samples are always stored in WAV files in little-endian order.
2270
  The correct thing to do was to convert from little-endian to big-endian order. 
2271
2272
2004.03.27:
2273
- Fixed a minor bug in the top-level Makefile.  (Thanks to Matteo Nastasi for
2274
  noting this.)
2275
2276
2004.03.27:
2277
- Modified "H261VideoRTPSource" so that it returns individual packet payloads to
2278
  the caller, rather than waiting to form complete frames.  Also, added a member
2279
  function "lastSpecialHeader()" that returns the 4-byte special header for the
2280
  most recently-read payload.
2281
2282
2004.03.23:
2283
- Added support for unicast RTSP/RTP streaming from VOB files, and added an example
2284
  of this to "testOnDemandRTSPServer".
2285
2286
2004.03.17:
2287
- Made a series of minor bug fixes and improvements suggested by Sony.
2288
2289
2004.03.15:
2290
- Fixed a bug in "OnDemandServerMediaSubsession" (the RTCP instance was being
2291
  deleted at the wrong time).  (Thanks to Clark Taylor for noticing this.)
2292
- Minor modifications to the 2004.02.26 "RTPSink" changes.
2293
- Updated the "AMRAudioRTPSource" implementation to support 'bandwidth-efficient'
2294
  mode.  (Warning: This has not yet been tested.)
2295
2296
2004.03.12:
2297
- Updated the "RTSPClient" class to support an aggregate "PAUSE" operation.
2298
2299
2004.03.11:
2300
- Added an implementation of AMR audio RTP receiving ("AMRAudioRTPSource"), to
2301
  match the existing"AMRAudioRTPSink".  Also, added a new class "AMRAudioFileSink"
2302
  (a subclass of "FileSink") that outputs an AMR audio input stream to a file,
2303
  including the file 'magic number' and frame headers.  "openRTSP" was also updated
2304
  to output received AMR audio streams using "AMRAudioFileSink"s.
2305
  (Thanks to SIGOS Systemintegration GmbH for funding this work.)
2306
- Cleaned up the "RTPSource" changes that were made in version 2004.02.26.
2307
2308
2004.03.05:
2309
- Updated the "RTSPServer" implementation to properly handle aggregate
2310
  operations for which the URL ends with a "/".  Some clients, such as
2311
  "gmp4player" do this.
2312
2313
2004.03.03a:
2314
- Fixed a bug in "MultiFramedRTPSource.cpp" where we were not properly
2315
  skipping over "contributing source" fields, if they were present in the
2316
  RTP header.  (Thanks to Phillip Bruce for noticing this.)
2317
2318
2004.03.03:
2319
- Fixed the "testMP3Streamer" test program to keep the RTP sink, RTCP instance,
2320
  Groupsocks, and RTSP server (if used) open across all iterations of the loop.
2321
  (Thanks to Frank Xia for noticing this problem.)
2322
2323
2004.03.02a:
2324
- The previous version accidentally had the built-in RTSP server enabled in
2325
  "testMP3Streamer". It should be disabled by default.
2326
2327
2004.03.02:
2328
- Fixed a few potential errors that were found by running "valgrind" on some of
2329
  the test programs (on Linux).
2330
2331
2004.03.01:
2332
- Added two new options to "openRTSP" (and "playSIP"):
2333
  "-E <max-inter-packet-gap-time>"
2334
      Tells the program to close the stream if no new packets have been
2335
      received in at least <max-inter-packet-gap-time> seconds.
2336
  "-B <input-socket-buffer-size>"
2337
      Tells the program to set the network socket input buffer (for each
2338
      input stream) to <input-socket-buffer-size> bytes.  (This can be useful
2339
      when testing QOS for different input buffer sizes.)
2340
  (Thanks to SIGOS Systemintegration GmbH for funding this work.)
2341
2342
2004.02.26:
2343
- Added - to "RTPSink" - a database of statistics from incoming RTCP
2344
  "Reception Report" (RR) packets.  (This mirrors the similar database
2345
  for RTCP SR packets that was already part of "RTPSource".)  (Thanks to
2346
  Clark Taylor for contributing this code.)
2347
2348
2004.02.23:
2349
- Fixed a bug in "MP3ADUinterleaving.cpp" that was causing frame durations
2350
  to not be set properly when handling interleaved MP3 ADUs.
2351
2352
2004.02.20a:
2353
- Corrected a typo in the previous "#ifdef"s
2354
2355
2004.02.20:
2356
- Added "#ifdef"s to the two files that #include <strstream.h>, so that they
2357
  will compile OK with GCC v3.*.  (Thanks to Goetz Waschk for this.)
2358
- Changed the stream parser debugging statements to make it clear that the
2359
  use of C++ language exceptions by the stream parsing code is normal, and
2360
  is not an error. 
2361
2362
2004.02.19:
2363
- Updated the "RTSPServer" implementation to support RTP-over-TCP streaming
2364
  (if requested by the client).
2365
2366
2004.02.13:
2367
- Changed the implementation of the "BasicUsageEnvironment" "operator<<" 
2368
  member functions so that they use "fprintf(stderr, ..." rather than
2369
  "cerr << ...".  People compiling in some environments were getting
2370
  complaints about "cerr" being undefined (presumably because the right
2371
  #include files weren't being found).  However, everyone should have
2372
  "stdio.h".  (Thanks to Clark Taylor for this suggestion.)
2373
- Changed the "genMakefiles" script to complain if the user tries to
2374
  run it without an "<os-target"> parameter.
2375
2376
2004.02.09:
2377
- Updated "RTSPServer" once again - this time to ensure that each incoming request
2378
  is read completely (i.e., up until the trailing <CR><LF><CR><LF>).
2379
  (Thanks to Regis Feneon for helping to fix this.)
2380
- Added a new "WAVAudioFileServerMediaSubsession" class to support on-demand
2381
  streaming from WAV audio files.  Also, updated the "testOnDemandRTSPServer"
2382
  test program to illustrate this.
2383
2384
2004.02.05:
2385
- Updated the "WindowsAudioInputDevice" project to build two different versions
2386
  of the library: One that uses Windows' built-in mixer; another that doesn't.
2387
2388
2004.02.04:
2389
- Fixed an obscure bug in "MPEG4ESVideoRTPSink" that could (very rarely)
2390
  cause incorrect RTP timestamps to be set for the last fragmented packet
2391
  of large MPEG-4 frames.  This could cause QuickTime Player's video playback
2392
  to freeze.
2393
2394
2004.02.03:
2395
- Added new "liveMedia" classes "MPEG1or2FileServerDemux" and
2396
  "MPEG1or2DemuxedServerMediaSubsession" for supporting on-demand RTSP/RTP
2397
  streaming of MPEG-1 or 2 Program Stream files.  Also, updated the
2398
  "testOnDemandRTSPServer" test program to support streaming of such
2399
  a file.
2400
- We no longer set SO_REUSEPORT for stream (TCP) sockets, because it usually
2401
  doesn't make sense to share TCP ports.  (As a side effect, this means that it
2402
  will no longer be possible to run more than one RTSP server (using the same
2403
  TCP port) simultaneously on the same computer - something that should never have
2404
  been possible in the first place.)
2405
- Fixed a minor RTSP server bug that was causing incorrect "destination"s to be set
2406
  (for multicast streams) in the "SETUP" response "Transport:" header.
2407
2408
2004.01.28:
2409
- Yet another bug fix to "MPEG4VideoStreamFramer", to properly handle the
2410
  case where MPEG-4 "GOV" headers don't occur on exact 'second' boundaries.
2411
  (Thanks to Michael Niedermayer (via Michael Hess) for clarifying this.)
2412
2413
2004.01.27:
2414
- Fixed a bug in the previously added (but normally "#ifdef"d out)
2415
  debugging code in "MultiFramedRTPSource.cpp".
2416
- Made a fix to the (normally "#ifdef"d out) debugging code in
2417
  "AC3AudioStreamFramer.cpp".  (Thanks to Yigal for noticing this.)
2418
2419
2004.01.24:
2420
- Changed "openRTSP" to use 20 kByte "FileSink" receive buffers by default,
2421
  instead of 10 kBytes.  (Some frames in MPEG-4 streams were exceeding the
2422
  previous limit.)
2423
- Added code to "MultiFramedRTPSource.cpp" to easily let the developer
2424
  simulate packet loss.
2425
2426
2004.01.23:
2427
- Changed "RTSPServer" to include a "Content-Base:" header in "DESCRIBE"
2428
  responses.  This overcomes a bug in QuickTime Player, which sends incorrect
2429
  "SETUP" URLs otherwise.
2430
- Fixed a bug in "MPEG4VideoStreamFramer" that was causing some frames
2431
  to erroneously be given a duration of 0. 
2432
2433
2004.01.22:
2434
- Made another improvement to the "RTSPServer" implementation.  It once again
2435
  properly handles streams without a stream name (i.e., where the "streamName"
2436
  parameter to "ServerMediaSession::createNew()" was NULL.
2437
- Updated the (little-used) "ByteStreamMultiFileSource" class to take
2438
  "preferredFrameSize" and "playTimePerFrame" parameters, just like
2439
  "ByteStreamFileSource".  Also added a member function to ask whether
2440
  a new file has just been read from.
2441
2442
2004.01.21:
2443
- Made several improvements/bugfixes to the "RTSPServer" implementation:
2444
  - Worked around an apparent bug in QuickTime Player: It sometimes
2445
  doesn't include a proper URL in RTSP "SETUP" requests.
2446
  - Corrected the 'frame' (really tick) rate and frame duration that
2447
  are computed for 'fixed_vop_rate' MPEG-4 video streams.
2448
  - Compensated for some buggy MPEG-4 video streams that don't set
2449
  timestamp information properly.
2450
- MPEG-4 video end codes will now be included in the outgoing RTP stream,
2451
  and received properly by RTSP clients.
2452
- Fixed "RTSPClient" to be more tolerant of RTSP "Transport:" headers that
2453
  contain more than one successive ';' character.  (Darwin Streaming Server
2454
  sometimes does this.)
2455
2456
2004.01.19:
2457
- Changed "RTSPServer" to not create per-session state when handling
2458
  "DESCRIBE", but instead to wait until "SETUP".  This fixes a problem
2459
  that was causing the "VLC" media player to fail to work with our
2460
  "RTSPServer" implementation, because VLC uses one RTSP TCP connection
2461
  to do the "DESCRIBE", and then another to do "SETUP" and "PLAY".
2462
  (Thanks to Emmanuel Dufour for pointing this out.)
2463
- Updated "MPEG4VideoStreamFramer" to include the VIDEO_SEQUENCE_END_CODE
2464
  in the output stream if it sees it in the input.
2465
2466
2004.01.10:
2467
- Fixed the "RTSPServer" implementation to properly return a "server_port" field
2468
  in the RTSP "SETUP" response for unicast streams.  Also, the server ports
2469
  (RTP and RTCP) are now chosen separately, and will no longer be the same
2470
  as the client ports if the client and server are running on the same machine.
2471
  (That did not work on some Linux systems.)
2472
- Fixed a bug in "MP3ADU" that was causing frame durations to not be set properly
2473
  when translating between MP3 frames and ADU frames.
2474
2475
2004.01.09:
2476
- Modified "RTSPClient" to handle embedded NULL characters in a SDP
2477
  description.  (These are not legal, but they have been seen in some cases.)
2478
2479
2004.01.06:
2480
- Modified the FramedSource 'after getting' function signature to take two new
2481
  parameters: (1) The number of bytes (if any) that were truncated from the
2482
  delivered data, and (2) The duration (in microseconds) of the delivered frame.
2483
  For backwards compatibility with old code, the old 'after getting' function
2484
  signature is still supported, but will be removed in some future version of
2485
  the code.  (The "getPlayTime()" function was also removed.)
2486
2487
2003.12.26:
2488
- Made "FramedFilter" objects implement the "stopPlaying()" function by
2489
  also calling "stopPlaying()" on their source object.
2490
- Fixed an obscure bug in "RTSPClient".
2491
2492
2003.12.20:
2493
- Made the "video/H263-2000" MIME type use the same RTP payload format as
2494
  "video/H263-1998".  (Thanks to Norbert Doneth for suggesting this.)
2495
2496
2003.12.19:
2497
- Fixed a minor bug in "RTSPServer" (some allocated memory wasn't being
2498
  freed properly).  (Thanks to Konstantin Lunin for finding this.)
2499
2500
2003.12.16:
2501
- Added "-DSOCKLEN_T=socklen_t" to the "COMPILE_OPTS =" line in
2502
  the file "config.solaris", so that the code will compile
2503
  correctly for 64-bit Solaris systems.
2504
2505
2003.11.25:
2506
- Put some error checks back into "WindowsAudioInputDevice".
2507
2508
2003.11.21:
2509
- Some case-insensitive string comparisons weren't working properly in Windows; fixed.
2510
2511
2003.11.19:
2512
- Added a global Boolean variable to flag when RTP I/O over a TCP connection fails.
2513
  This hack allows higher-level code to check for this.
2514
2515
2003.11.16:
2516
- Fixed "RTPInterface" to not infinite loop when trying to read from a TCP
2517
  connection that has closed.
2518
- Modified "BasicTaskScheduler" to overcome a bug in Windows that sometimes
2519
  causes "select()" to fail.
2520
2521
2003.11.13:
2522
- Made "WindowsAudioInputDevice" a bit more robust against broken audio drivers.
2523
2524
2003.11.06:
2525
- Modified "groupsock/inet.c" to allow the system-supplied "random()" and "srandom()"
2526
  functions to be used instead of our own "our_..." implementation.
2527
  This is done if USE_SYSTEM_RANDOM is defined (e.g., in the "config.*" file).
2528
2529
2003.11.06:
2530
- Modified the "MPEGVideoStreamParser" constructor, in response to a complaint
2531
that some compilers would choke on the old code.
2532
2533
2003.10.30:
2534
- Added a warning output message to "MultiFramedRTPSink::afterGettingFrame1()"
2535
  whenever the input frame appears to exceed the maximum buffer size.  This
2536
  maximum buffer size can be increased by changing
2537
  "OutPacketBuffer::numPacketsLimit".
2538
2539
2003.10.27:
2540
- Changed the "MultiFramedRTPSource" error message (added in 2003.10.04) to apply
2541
only to frame sizes > 1000, so that (e.g.) QCELP RTP sources don't trigger it.
2542
2543
2003.10.24:
2544
- Fixed the RTSP server implementation to put SDP lines in the correct order
2545
(as defined by the SDP speecification).  Also, added "Cseq:" lines that were
2546
missing from "404" error responses.  (Thanks to Bill May for noting these bugs.)
2547
- Improved the implementation of MPEG-4 video framing and streaming.
2548
2549
2003.10.08:
2550
- Fixed a bug in the previous "FileSink" update that was causing "openRTSP"
2551
to crash when recording a MPEG-4 video stream (using the "-m" option).
2552
(Thanks to Jiangzhou Scu for noticing this bug.)
2553
2554
2003.10.07:
2555
- Updated the "FileSink" class to take an optional Boolean parameter
2556
"oneFilePerFrame".  If set, a separate file will be output for each
2557
incoming frame.  The frame's presentation time is used as a
2558
file name suffix, to distinguish the files.
2559
- Added a new option "-m" to "openRTSP" (and "playSIP").  This option
2560
causes a separate file to be written for each frame (using the
2561
above-mentioned new feature of "FileSink").
2562
2563
2003.10.05:
2564
- Renamed the new openRTSP/playSIP "-S" option to "-b".
2565
2566
2003.10.04:
2567
- Added an error message to "MultiFramedRTPSource" to report when
2568
the client's receive buffer is too small for an incoming frame.
2569
(This could happen with large JPEG frames, for example.)
2570
- Updated the signature to "FileSink" to take an optional 'buffer size'
2571
parameter as argument.  (The default value is 10000.)
2572
- Added a "-S <file-sink-buffer-size>" option to "openRTSP" and "playSIP". 
2573
2574
2003.09.30:
2575
Improved the default implementation of
2576
"RTPSink::hasBeenSynchronizedUsingRTCP()" to more accurately report
2577
whether or not the most recently-delivered packet's presentation time
2578
was synchronized using RTCP SRs.  (Thanks to Luca Abeni for pointing
2579
out the possibility of a problem with the old implementation.)
2580
2581
2003.09.25:
2582
Improved the support for unicast RTSP/RTP streaming.  Also, added a new
2583
test program "testOnDemandRTSPServer" that demonstrates how to use this.
2584
2585
2003.09.19:
2586
- Added support for unicast streaming from a "RTSPServer".
2587
  (A test program that demonstrates this will be available shortly.)
2588
  (Thanks to TNO Fysisch en Elektronisch Laboratorium (Netherlands)
2589
  for funding this work.)
2590
- Modified the "strDup()" function to return NULL (instead of crashing)
2591
  if passed a NULL parameter.
2592
2593
2003.09.11:
2594
- Another improvement/bugfix to the "MultiFramedRTPSink"
2595
  implementation.
2596
- Changed the implementation of "RTSPServer" and "ServerMediaSession"
2597
  in preparation for implementing unicast streaming from RTSP servers.
2598
  (This is something that's not ready yet, but close...)
2599
2600
2003.09.05:
2601
Fixed the implementation of "JPEGVideoRTPSource" so that it prepends
2602
a proper JFIF JPEG header to the start of each incoming JPEG frame.
2603
This means that programs such as "openRTSP" and "MPlayer" will now
2604
receive/play JPEG/RTP streams correctly.
2605
2606
2003.09.03:
2607
Improved the implementation of "MultiFramedRTPSink" to more efficiently
2608
handle the case where input frames get broken up into multiple outgoing
2609
RTP packets.  We now eliminate an uncessary "memmove()" for each
2610
fragment.  In particular, this should make MPEG-1 or 2 and motion-JPEG
2611
video streaming more efficient.
2612
2613
2003.09.01:
2614
- Added support for reading and streaming AMR audio files (as defined in
2615
RFC 3267).  Also added a new test program "testAMRAudioStreamer".
2616
(Thanks to TNO Fysisch en Elektronisch Laboratorium (Netherlands) for
2617
funding this work.)
2618
2619
2003.08.28a:
2620
- When "openRTSP" writes out a recorded MPEG-4 Elementary Stream video file,
2621
it now writes SDP 'config' information to the front of the file beforehand.
2622
This 'config' information contains VOL etc. headers that can be useful
2623
for playback. 
2624
2625
2003.08.28:
2626
- Added 'framer' and RTP sink classes for MPEG-4 Elementary Stream video.
2627
(Thanks to TNO Fysisch en Elektronisch Laboratorium (Netherlands) for
2628
funding this work.)
2629
- Added a new test program "testMPEG4VideoStreamer".
2630
- Fixed a bug with RTP-over-TCP reading that could cause a crash if the
2631
same TCP socket number gets reused for a later stream.  Also, made this
2632
code more thread-safe.
2633
2634
2003.08.21:
2635
Renamed all of the MPEG-1 or 2 class and program names from "MPEG*" to
2636
"MPEG1or2*".  This is to distinguish these from the classes and programs
2637
that use MPEG-4.
2638
2639
2003.08.19:
2640
Made the maximum buffer size in "MediaSink.cpp" a parameter that can be 
2641
set (changed) at runtime.  (Reset the default back to 20* packet size)
2642
2643
2003.08.18:
2644
- Fixed "JPEGVideoRTPSink" to use the standard RTP payload format code
2645
(26) for JPEG RTP streams.
2646
- Updated "MediaSink.cpp" to increase the maximum buffer size for incoming
2647
data.  This makes it possible to stream large JPEG frames (which are
2648
fragmented over multiple outgoing RTP packets).
2649
2650
2003.08.16:
2651
- Added new classes "AudioRTPSink" and "VideoRTPSink" as parent classes
2652
of the various audio and video RTP sink classes, respectively.
2653
- Added a new "JPEGVideoRTPSink" class, and a "JPEGVideoSource" class
2654
that can be used as an abstract base class for particular JPEG sources.
2655
2656
2003.08.07:
2657
Minor change to "MediaSink".
2658
2659
2003.07.29:
2660
Updated "RTSPClient" to include a "tearDownMediaSession()" operation,
2661
in addition to "tearDownMediaSubsession().  "openRTSP" now uses just
2662
the "tearDownMediaSession()" operation.  (Darwin Streaming Server was
2663
barfing with "tearDownMediaSubsession()").  Thanks to Edward Estabrook
2664
for suggesting this.
2665
2666
2003.07.27:
2667
Added a new "-F <fileName-prefix>" option to "openRTSP" (and "playSIP").
2668
This can be useful if you are running "openRTSP" several times,
2669
in the same directory, to play several different RTSP streams
2670
(e.g., from a script).  (Thanks to Norbert Donath for this suggestion.)
2671
2672
2003.07.14:
2673
Updated the "WAVAudioFileSource" implementation (and the
2674
"testWAVAudioStreamer" test program) to better report any reason for
2675
a WAV file to be invalid.
2676
2677
2003.07.13:
2678
- Added new filter classes for converting between 16-bit PCM and
2679
8-bit u-law audio, and between host and network order for 16-bit values.
2680
(See "liveMedia/include/uLawAudioFilter.hh" for details.)
2681
- Added a new class "WAVAudioFileSource" for reading/processing
2682
WAV audio files.
2683
- Added a new test program "testWAVAudioStreamer" that reads a WAV
2684
audio file - "test.wav" - and streams it via multicast (using a built-in
2685
RTSP server).
2686
- Updated "MediaSession" to recognize "L8" and "L16" RTP audio streams
2687
(to be handled by "SimpleRTPSource").
2688
2689
2003.07.07:
2690
- Fixed a bug that would cause "vobStreamer" to crash if (incorrectly)
2691
run with no arguments.
2692
- Updated the "test*Streamer" test programs to print out the "rtsp://"
2693
URL of the built-in RTSP server (if it's enabled).
2694
2695
2003.07.01a:
2696
Updated the "WindowsAudioInputDevice" subdirectory to:
2697
- Change the name of the library from "WindowsAudioInputDevice.lib" to
2698
"libWindowsAudioInputDevice.lib".
2699
- Added a console test program - "showAudioInputPorts" - that lists
2700
the audio input ports that are currently available.
2701
2702
2003.07.01:
2703
Added a new subdirectory "WindowsAudioInputDevice", which is a
2704
Windows-specific implementation of the "AudioInputDevice" class.
2705
This can be used by Windows applications to read PCM audio from
2706
a sound card.
2707
2708
2003.06.28:
2709
Added an optional parameter (default, True) to "SimpleRTPSource"
2710
that says whether to use the RTP "M" (marker) bit to indicate the
2711
last (or only) fragment of a video frame.  (Suggested by
2712
Cezar Plesca.)
2713
2714
2003.06.27:
2715
Added a "AudioDeviceSource" class to the "liveMedia" library.
2716
This class is a generic audio input device (such as a microphone
2717
or a sound card) - to be subclassed for specific OS platforms. 
2718
2719
2003.06.26:
2720
- Updated the "RTSPServer" implementation to respond to "PAUSE"
2721
requests.  (It doesnt actually pause the stream; just returns "OK".
2722
This makes QuickTime Player happier.)
2723
- Added a "-o" option to "openRTSP" (and modified "RTSPClient"
2724
accordingly).  This option causes openRTSP to send an "OPTIONS" command
2725
to the server, and prints out the response.
2726
2727
2003.06.17:
2728
Added support for MPEG-4 generic RTP sinks.  (Currently, only the
2729
"AAC-hbr" audio mode is supported, and only one AAC frame is packed
2730
into each outgoing RTP packet.)
2731
2732
2003.06.13:
2733
- Fixed a bug in "ServerMediaSubsession" that could cause a memory leak.
2734
(Thanks to Frederik Bonte for finding this.)
2735
2736
2003.06.07:
2737
- Fixed a minor bug in "MPEGVideoRTPSink": The RTP "M" bit is now set
2738
only on the last fragment, if a frame is fragmented.  (Thanks to
2739
Tym Altman for pointing this out.)
2740
- Improved support for AudioRTPSinks that have more than one audio channel.
2741
2742
2003.05.31:
2743
Fixed a bug in "SimpleRTPSink" that would cause it to not generate correct
2744
RTP timestamps on outgoing packets.
2745
2746
2003.05.29:
2747
Fixed a bug in "RTSPServer" that would cause it to get into an infinite
2748
loop if a client's connection was terminated unexpectedly.
2749
2750
2003.05.28:
2751
Fixed some typos in comments.
2752
2753
2003.05.23:
2754
Some minor changes to reduce the number of bogus warning messages
2755
displayed when compiling using Visual C++.
2756
2757
2003.05.22b:
2758
Fixed a bug in "SIPClient" (thanks to Reini Urban for helping track this
2759
down).
2760
2761
2003.05.22a:
2762
Fixed a couple more minor bugs that were causing "valgrind" to complain.
2763
2764
2003.05.22:
2765
Fixed a bug in "SIPClient" (a field was not getting initialized properly)
2766
2767
2003.05.21:
2768
- Because not all platforms define 'errno' the same way, 'errno' is now
2769
implemented as a pure virtual function "getErrno()" in
2770
"UsageEnvironment".  "BasicUsageEnvironment" defines this function to
2771
just return "errno", but other subclasses could implement it in other
2772
ways.
2773
- Added support for setting and reading information in "RTP-Info:"
2774
headers in RTSP "PLAY" response. (Thanks to Romulus Grigoras for
2775
contributing this.)
2776
2777
2003.05.19:
2778
Fixed a bug in "SIPClient" that could cause a crash.  (Thanks to
2779
Reini Urban for finding this.)
2780
2781
2003.05.16:
2782
- Removed all calls to "fprintf(stderr, ...)" and "cerr << ..." from
2783
the library code.  Instead, we now use "operator<<" virtual functions
2784
that are defined on the "UsageEnvironment".  "BasicUsageEnvironment"
2785
defines these by outputting to "cerr", but other subclasses of
2786
"UsageEnvironment" can define them to do console output whichever
2787
way they wish.
2788
2789
2003.05.15:
2790
- Moved the "select()" call in "readSocket()" (GroupsockHelper.cpp) into
2791
  a separate function, to allow it to be easily reimplemented
2792
  if desired.
2793
- More minor changes to "RTPSource" stats handling, and the "-Q" option
2794
  to "openRTSP"/"playSIP".
2795
2796
2003.05.12:
2797
- Restructured "BasicTaskScheduler" as two hierarchical classes:
2798
  "BasicTaskScheduler0" (an abstract base class), and
2799
  "BasicTaskScheduler".
2800
  This makes it easier to subclass (e.g., to reimplement "SingleStep").
2801
  A subclass reimplementation would use "BasicTaskScheduler0".
2802
- Removed "our_bcopy()", and use "memmove()" instead, because everyone
2803
  seems to implement that.
2804
- Fixed a bug in "RTPSource" that could cause packet loss stats to be
2805
  reported incorrectly if the first RTP sequence number received was 0.
2806
2807
2003.05.06:
2808
Minor changes to the "openRTSP" QOS stats reports.
2809
2810
2003.05.05:
2811
Changed the "start" and "end" parameters to
2812
"RTSPClient::playMediaSubsession()" from int to float, for increased
2813
granularity.  (Suggestion by Cezar Plesca.)
2814
2815
2003.05.03:
2816
- Added support for pausing/resuming to "RTSPClient".
2817
(Thanks to Romulus Grigoras for contributing this.)
2818
- Fixed a couple of bugs in "SIPClient".
2819
2820
2003.04.28:
2821
- Cleaned up and improved the "DelayQueue" implementation.
2822
(This time it works properly, I hope.)
2823
2824
2003.04.27:
2825
- Temporarily backed out the previous change to "DelayQueue", because it
2826
broke MPEG video streaming (causing it to play too slowly). 
2827
2828
2003.04.26:
2829
- Made "DelayQueue" a little more accurate, by adjusting for the time
2830
that has elapsed since the last alarm, when adding a new entry to the queue.
2831
- Fixed a bug in "RTPSource" that could cause packet loss statistics to not
2832
be reported accurately (in RTCP) if incoming packets were misordered.
2833
- Updated "openRTSP" and "playSIP" to take a new "-Q" option, which
2834
prints out QOS data at the end of the session.
2835
2836
2003.04.24:
2837
- Added a mechanism for registering an optional, auxilliary read handler
2838
with a "RTPSource" or "RTCPInstance".  Such a handler would get called
2839
after each new packet is read.
2840
- Changed "SimpleRTPSink" to (by default) set the RTP "M" bit on
2841
video streams iff the packet contains the last (or only) fragment of
2842
a frame.
2843
2844
2003.04.23:
2845
- More improvements/fixes to the handling of SSM sessions.
2846
- Fixed a bug in RTSPServer that could cause a crash if the client
2847
quit suddenly.
2848
2849
2003.04.20:
2850
- Updated "MediaSession" to recognize
2851
  a=source-filter: incl ...
2852
lines in SDP descriptions (for SSM sessions), and to do the appropriate
2853
SSM-style multicast joins in this case (and also to send back RTCP via
2854
unicast).
2855
- Updated the RTCP implementation to reflect incoming unicast RTCP packets
2856
back to the multicast group in the case where we're a SSM source.
2857
- Update "vobStreamer" and the various "test*Streamer" test programs to
2858
properly behave as SSM sources, when we have specified this.
2859
2860
2003.04.18:
2861
- Updated the "*ServerMediaSession" classes to (optionally) output
2862
SSM-specific information in SDP descriptions.
2863
- Updated "vobStreamer" to choose a random multicast address in the SSM
2864
range.
2865
2866
2003.04.12:
2867
- Fixed "MPEGVideoStreamFramer" to allow for the possibility of
2868
the GOP "time_code" field remaining unchanged in the source stream.
2869
- Elimination of more unnecessary global variables.
2870
2871
2003.04.11:
2872
- Added support for an optional user name and password inside a RTSP
2873
or SIP URL.
2874
- The media lookup table (used in "Media.cpp") is now allocated
2875
dynamically, and stored in the "UsageEnvironment", rather than
2876
being a global variable.
2877
This makes it possible to have different threads, within the same
2878
address spaces, accessing the library code.
2879
(Each thread would need to have its own "UsageEnvironment" and
2880
"TaskScheduler", though.)
2881
2882
2003.04.09:
2883
Changed "BasicTaskScheduler::SingleStep()" to execute only one delay
2884
queue task (along with any data input events) during each iteration.
2885
This prevents a possible livelock if the delay queue always has events
2886
outstanding.  (Thanks to Ruth Sadler for pointing this out.)
2887
2888
2003.04.04:
2889
- More improvements to "vobStreamer" (which has also been renamed
2890
from "VOBStreamer".
2891
2892
2003.04.02:
2893
- Made another change to the order that things are closed when exiting
2894
"openRTSP", to help avoid a potential race condition that can occur
2895
when using the "-t" option.  (Thanks to Romulus Grigoras for reporting
2896
this.)
2897
- Updated "MPEGDemux" to properly handle the case where someone tries
2898
to read from it after its input source has already closed.
2899
- Several improvements to "VOBStreamer".
2900
- Added "ByteStreamMultiFileSource" to the "liveMedia" library.
2901
This generalizes "ByteStreamFileSource" to allow more than one input
2902
file to be read, in sequence.
2903
2904
2003.04.01:
2905
Fixed a bug in "openRTSP" that could cause it to crash when exiting
2906
(if the "-t" option was used).
2907
2908
2003.03.31:
2909
Added a new test program "VOBStreamer" to "testProgs".
2910
This program reads a "VOB" file (e.g., from a non-encrypted DVD),
2911
and streams the component video (MPEG) and audio (AC3) component streams
2912
using RTP multicast.
2913
(Online documentation to follow...)
2914
2915
2003.03.30:
2916
Added "AC3AudioRTPSource" and "AC3AudioRTPSink".
2917
2918
2003.03.28:
2919
- Fixed a bug in "MPEGVideoStreamFramer" that would cause it to generate
2920
incorrect presentation times if the MPEG video stream started out with
2921
a non-zero 'time_code'.
2922
- Updated "AC3AudioStreamFramer" to allow clients to get the stream's
2923
sampling rate before it reads the first frame.
2924
2925
2003.03.25:
2926
Began adding support for AC3 audio/RTP streaming.
2927
2928
2003.03.22:
2929
Added support for receiving H.261/RTP streams
2930
2931
2003.03.14:
2932
- Removed calls to "strdup()", because that's a C-library function whose
2933
result should not be deleted using "delete" (or "delete[]").  Instead,
2934
we now provide our own C++ equvalent, called "strDup()".
2935
- Also, changed several "delete"s to "delete[]".
2936
(Thanks to Bill Kain for noting the need for this fix.)
2937
2938
2003:03;11:
2939
Updated SIPClient to allow it to use an arbitrary source port number.
2940
This makes it possible to use it on the same host on which a SIP server
2941
is already running.
2942
2943
2003.03.09:
2944
- Made "MediaSession"s parsing of SDP descriptions more robust, to allow for
2945
blank lines in the SDP description.  ("Be liberal in what you accept...")
2946
2947
2003.03.07:
2948
- Added an optional "MIME subtype" parameter to "SIPClient", to allow
2949
SIP "INVITE"s to use a dynamic RTP payload format.  Updated "playSIP"
2950
accordingly, to add an optional "-D <mime-subtype-name>" argument.
2951
- Modified "FileSink" to close the source (and stop playing) if it gets
2952
an EOF when writing to the output file.  (Thanks to Ruud Schramp.)
2953
2954
2003.03.03:
2955
Improved the implementation of "MPEG4GenericRTPSource".
2956
2957
2003.02.28:
2958
- Fixed a bug that would cause RTSP clients to not set the server port
2959
number (for RTCP) correctly in some situations.  (Thanks to Alex Pollard.)
2960
- Fixed a bug in "RTSPServer" that would cause "Transport:" headers to not
2961
get generated correctly.
2962
2963
2003.02.27:
2964
- Improved the "MultiFramedRTPSource" implementation to more cleanly handle
2965
packet loss in the case where frames are split into multiple RTP packets.
2966
- Parsed the optional "/<num-channels>" parameter that can appear at the
2967
end of "a=rtpmap:" lines for audio sessions.
2968
2969
2003.02.17:
2970
More work on the experimental '-R <rtsp-url>' option to "playSIP"
2971
(and "openRTSP") that allows it to inject the incoming stream into
2972
a separate RTSP server.  This code is now working, although 
2973
currently only for a single PCMU or GSM audio stream.  Also, RTCP
2974
packets are not yet relayed between the source and destination. 
2975
2976
2003.02.16:
2977
Improved RTSPClient and SIPClient to check for (and discard)
2978
any '\r' or '\n' that appears at the start of a response message.
2979
(Some weirdo servers can do this.)
2980
2981
2003.02.10:
2982
Began adding a new option to "playSIP" (and "openRTSP") to allow the
2983
incoming media stream to be injected into a separate, destination
2984
RTSP server.  This still needs lots of work...
2985
2986
2003.02.08:
2987
Fixed the "JPEGVideoRTPSource" implementation to properly prepend a
2988
synthesized JPEG header to each received frame of RTP data.  This now
2989
makes it possible to receive and play motion-JPEG RTP streams.
2990
2991
2003.02.06a:
2992
- Fixed a bug in the SDP "config" attribute parsing.  (This affected
2993
the use of "MPEG4LATMAudioRTPSource".
2994
- Cleaned up the "createNew()" routines in each of the *RTPSource classes.
2995
- Added two new RTPSource classes - "MPEG4ESVideoRTPSource" and
2996
"MPEG4GenericRTPSource", for MPEG-4.  However, these have not been
2997
fully implemented yet.
2998
2999
2003.02.06:
3000
Fixed some code that was 64-bit-unsafe.  (Thanks to Philipp Thomas for
3001
noticing this.)
3002
3003
2003.02.05:
3004
- Cleaned up "RTSPClient", and added a method for doing an aggregate
3005
"PLAY" operation (in addition to the existing method that does a
3006
"PLAY" on an individual subsession).
3007
- Modified the "openRTSP" test program so that it does a single
3008
aggregate "PLAY", rather than a series of non-aggregate "PLAY"s, one for
3009
each subsession.  (RealNetworks' server doesn't support the latter.)
3010
- Added a new routine for parsing "AudioSpecificConfig" strings that
3011
can appear in SDP descriptions.
3012
- Added Morgan Multimedia's implementation of "JPEGVideoRTPSource"
3013
to the "liveMedia" library.  (I haven't yet tested this.)
3014
3015
2003.02.04:
3016
Removed "-DUSE_OUR_BZERO=1" from "config.linux", because it no longer
3017
seems to be necessary, and it was breaking compilation for some people.
3018
3019
2003.02.03b:
3020
Added an #include to "BasicUsageEnvironment/Lock.cpp" to fix a problem
3021
that someone encountered with NULL not being defined.
3022
3023
2003.02.03a:
3024
Created a new header file "groupsock/include/NetCommon.h" that contains
3025
all networking-related #includes.  This also does the correct #includes
3026
for Windows, allowing Windows code to use Winsock-2 rather than Winsock-1.
3027
Also, modified "win32config" to use a "TARGETOS" of WINNT rather than
3028
WIN95, to make this all work.
3029
3030
Thanks to Doug Kosovic for figuring out the magic incantations
3031
needed to get this all working.
3032
3033
2003.02.03:
3034
- Improved "SIPClient" (in the "liveMedia") library, so that "INVITE"
3035
requests are retransmitted, as necessary, for reliability.
3036
- Added a "-A <rtp-payload-format>" option to "playSIP".  This allows the
3037
user to specify which audio RTP payload format should be received.
3038
(At present only static payload formats can be specified, and only
3039
audio codecs - not video.)
3040
3041
2003.01.28:
3042
- Added support (in the "liveMedia" library) for a basic SIP client
3043
- Added a new test program "playSIP", similar to "openRTSP".  These two
3044
applications are now built from the same code base.
3045
3046
2003.01.17:
3047
Further improvements to the MPEG-4 audio support.  We can now read
3048
(from the "MediaSubsession") the StreamMuxConfig "config" stream that
3049
was present in the SDP description.  Also added a routine that parses
3050
such a string, producing binary "AudioSpecificConfig" data.
3051
(See "MPEG4LATMAudioRTPSource.cpp" for details.)
3052
3053
2003.01.16:
3054
Improved support for receiving MPEG-4 LATM audio.  Note that currently,
3055
this works only for streams that do not have a StreamMuxConfig present
3056
in the stream.
3057
3058
2003.01.10:
3059
Added basic support for MPEG-4 LATM audio.  
3060
3061
2002.12.21:
3062
Fixed a bug in the previous update to "QuickTimeFileSink"
3063
3064
2002.12.20:
3065
- Another change to "QuickTimeFileSink", again to change the way that track
3066
durations are computed for ".mov" files.  Now, each track's duration is
3067
set to be the maximum of (i) the sum of the sample durations listed
3068
in the 'stts' atom, and (ii) the the sum of the durations listed in the
3069
track's 'edit list' (if any).
3070
- Updated the MP3 file parsing code to check for a 'Xing' VBR header in
3071
the first frame.  ("liveCaster" can use this information to print more
3072
sensible information about each file that it streams.)
3073
3074
2002.12.10:
3075
Yet another change to "QuickTimeFileSink", this time to make sure that
3076
the duration of video tracks corresponds exactly to the sum of video
3077
sample durations listed in the 'stts' atom.
3078
3079
2002.11.30:
3080
Renamed "TaskScheduler::blockMyself()" to "doEventLoop()", to better
3081
describe what this member function actually does.
3082
3083
2002.11.25:
3084
Another change to "QuickTimeFileSink".  Now, when synchronzed tracks
3085
are requested, the durations of video frame samples are adjusted so
3086
that they correspond to actual RTP presentation times.  (This is not
3087
done for audio samples, however, because having audio samples vary
3088
in duration might break audio codecs.)
3089
3090
2002.11.22:
3091
Updated "QuickTimeFileSink" once again - this time to add more statistics
3092
to the 'udta'/'hinf' atom for each generated hint track.
3093
3094
2002.11.18:
3095
Modified the support for creating hint tracks in "QuickTimeFileSink" so
3096
that it it now works properly for H.263+ video sessions.
3097
3098
2002.11.15:
3099
- Made a small modification to "groupsock/GroupsockHelper.hh" to ensure that
3100
it compiles on all platforms.
3101
- Modified "MP3FileSource" so that it can handle layer I or layer II files,
3102
as well as layer III (MP3).  
3103
3104
2002.11.14:
3105
Updated "QuickTimeFileSink" to support (optional) hint tracks in output
3106
QuickTime files.  Also added a "-H" option to "openRTSP" that
3107
(when used with "-q") will add hint tracks to the output ".mov" file.
3108
(Note that the hint tracks currently don't work well for H.263+ video
3109
tracks, and currently don't work at all for QCELP.)
3110
3111
2002.11.04:
3112
Updated the expiration date in "openRTSP.cpp"
3113
3114
2002.10.22:
3115
- Undid the previous change.  The top-level Unix Makefile now does
3116
      cd <dir> ; make
3117
once again.  Unfortunately "--directory" doesn't seem to work properly
3118
with the version of "make" that's installed with FreeBSD.
3119
- Changed the implementation of the "-n" option in "openRTSP".  If "-y"
3120
is also specified, then the user will be notified only if (i) data has
3121
arrived for all subsessions, and (ii) all subsessions have been
3122
synchronized.
3123
3124
2002.10.21:
3125
Changed the top-level Unix Makefile to do
3126
    make --directory=<dir>
3127
rather than
3128
       cd <dir>; make
3129
as the latter apparently didn't work with cygwin.
3130
(Thanks to "Sycotic" Smith for the tip.)
3131
3132
2002.10.20:
3133
- Updated "QuickTimeFileSink" once again to improve the implementation of
3134
synchronized audio/video tracks in output QuickTime files.
3135
- Added a configuration file for "cygwin".  (Thanks to "Sycotic" Smith
3136
for working on this.)
3137
3138
2002.10.19:
3139
Updated "QuickTimeFileSink" to use QuickTime Edit Lists to synchronize
3140
the media tracks.  (It appears that this does not always produce playable
3141
QuickTime files, so this implementation may have to be changed later.)
3142
3143
2002.10.11:
3144
Fixed a bug in "MultiFramedRTPSource" that could cause a RTP receiver to
3145
hang if it received a malformed RTP packet with no data after a special,
3146
media-specific header.
3147
3148
2002.10.10:
3149
Fixed the "RTSPClient" implementation so that it now understands
3150
"Content-Length" as well as "Content-length".  (This now allows it
3151
to work with our own RTSP server implementation once again!)
3152
3153
2002.10.07:
3154
Improved the implementation of RTP (and RTCP) reception to eliminate an
3155
unnecessary "memmove()" each time a packet is received.
3156
3157
2002.10.04:
3158
Updated the "liveMedia" library to support optionally sending and receiving
3159
RTP and RTCP packets over a TCP connection (e.g., the TCP connection used
3160
for a RTSP session).  Also, updated the "openRTSP" test program to take
3161
an optional "-t" argument, meaning: stream over TCP. 
3162
3163
2002.10.01:
3164
Fixed the modification to "MultiFramedRTPSource" that was made in the
3165
2002.08.29 release, and also made a corresponding change to
3166
"QuickTimeFileSink", so that it now correctly records H.263+/RTP streams
3167
once again.
3168
3169
2002.09.30:
3170
- Removed the "Media::addNew()" member function, because it was always
3171
  called each time a new Media object was created.  Instead, its
3172
  function was just moved into the Media::Media() constructor.
3173
- Made another fix to "testMPEGAudioVideoStreamer".
3174
3175
2002.09.28:
3176
Fixed a bug in "testMPEGAudioVideoStreamer" that could cause a crash when
3177
its input file was being read for the 2nd or more time.  (Also updated
3178
"liveMedia/FramedSource.cpp".)
3179
3180
2002.09.27:
3181
Updated "QCELPAudioRTPSource" so that "hasBeenSynchronizedUsingRTCP()"
3182
returns True only after a full interleave cycle of RTP packets has been
3183
received.  This ensures that when it returns true, the receiver will
3184
be reading a frame that came from a synchronized RTP packet.
3185
3186
2002.09.26:
3187
- Fixed QCELPAudioRTPSource so that it now returns correct presentation
3188
timestamps on each frame that is read from it (even if the input data
3189
was interleaved).
3190
- Updated QuickTimeFileSink to correctly write ".mov" files for half-rate
3191
QCELP audio tracks.
3192
3193
2002.09.25:
3194
Added a new test program - "sapWatch" - that reads and prints SDP/SAP
3195
announcements (sent to the default SDP/SAP directory)
3196
3197
2002.09.24:
3198
- Fixed a bug in "QCELPAudioRTPSource"
3199
- The RTCP implementation now properly recognizes incoming RTCP
3200
reports from other processes on the same computer.  (Previously, these
3201
would be rejected as being loop-back packets.)
3202
3203
2002.09.19:
3204
- Updated "RTPSource"s so that an accurate "presentationTime" variable
3205
is now returned whenever a client reads from such a source. These times
3206
are kept accurate by RTCP "Sender Report" packets sent by the sender.
3207
3208
2002.09.13:
3209
- Improved the "BasicHashTable" implementation so that it's
3210
no longer a quick-and-dirty hack.
3211
- Changed the parameter signature to "ByteStreamFileSource" so that the
3212
"playTimePerFrame" parameter is now an unsigned (microseconds) instead
3213
of a float.  This eliminates a round-off problem.
3214
3215
2002.09.11:
3216
Modified "ByteStreamFileSource::doGetNextFrame()" so that - if the
3217
"playTimePerFrame" parameter was set - the presentation time gets set
3218
based on this, rather than the current 'wall clock' time.
3219
3220
2002.09.06:
3221
Updated "win32config.Borland" based on feedback by Vesselin Kostadinov.
3222
(Also updated an #ifdef in "liveMedia/include/Media.hh")
3223
3224
2002.09.05:
3225
Added code to ignore an "EAGAIN" error on a 'groupsock' read.
3226
(This can happen in Linux.)
3227
3228
2002.09.03:
3229
Fixed a bug in the RTSP server implementation that could
3230
have caused a memory smash.
3231
3232
2002.08.30:
3233
Added header files containing version strings (and corresponding integers)
3234
for each library.  Client code can use these to print out version
3235
information, or check for version compatibility.
3236
3237
2002.08.29:
3238
Modified "MultiFramedRTPSource" and its subclasses to properly handle
3239
the case where a frame is fragmented over several successive incoming
3240
RTP packets.  Each subclass's implementation of "processSpecialHeader()"
3241
can choose between having incomplete fragments returned immediately to
3242
the client (the default behavior), or waiting until all of the fragments
3243
have arrived.  The implementation of "H263plusVideoRTPSource" was changed
3244
to do the latter (because the current "ffmpeg" H.263+ decoder relies upon
3245
getting complete frames for input).
3246
3247
Added an optional "applicationName" parameter to "RTSPClient::createNew()",
3248
and updated the RTSP client implementation to add a "User-Agent:" field,
3249
which will contain this "applicationName" string (if present).
3250
3251
2002.08.27:
3252
Added an optional Boolean parameter "iFramesOnly" to
3253
"MPEGVideoStreamFramer::createNew()".  If this parameter is True,
3254
then the framer object will return only data from "I" frames.
3255
(By default, this parameter is False, meaning that all frames will
3256
be returned.)  This parameter can be used to reduce the bandwidth
3257
of streamed MPEG (1 or 2) video.
3258
3259
2002.08.06:
3260
Changed "groupsock/GroupsockHelper.cpp" to do a "#include <errno.h>"
3261
rather than "extern int errno".  The latter was apparently breaking in
3262
some versions of Linux.
3263
3264
2002.08.05:
3265
Added support for the video/MP2P MIME type (RFC 2250 MPEG Program Streams)
3266
3267
2002.06.25:
3268
Source file distribution copied from live.sourceforge.net
3269