1
Vote

Improve MediaFileStream and IMediaContainer

description

High Priority

MediaFileStream :
  • Determine if Logger should be added to MediaFileStream.
  • Determine if a Container or Track is Compressed or Encrypted (Add properties to Track to support)
  • Complete and standardize the function of GetSample for all MediaFileStreams / IMediaContainer.
    • BaseMediaWriter - Should support creating complaint ISO Base Media Files. Fragmented and non alike; [including but not limited to variations which allow for the rtp and sdp data to be encapsulated natively____].

BaseMediaReader - Add support for Fragmented files, MPEG4 Object Type Indication etc should be conveyed via codec private data (Track.CodecPrivateData)

MxfReader - Optimize GetTracks, cache parsed nodes...

RealReader - Complete support

GxfReader - Complete support

McfReader - Complete support

TransportStreamReader / ProgramStreamReader / PacketizedElementaryStreamReader -

BitStream / ElementaryStream / AudioStream / VideoStream -

Parse methods can be reduced to a single ParseProgramSpecificInformation which optionally takes an expected table id.

When parsing ProgramSpecificInformation store the info because seeking to the Node would be impossible in a Network situation, it also may contain the FrameRate for Video Streams. (Based on SCR)

Determine if should keep track of Pack nodes and their offset.

Determine if should keep track of System nodes and their offset.

Enable a TransportStream to be converted into a PacketizedElementaryStream.

The amount of Packets in a TransportStream is given by the stream.Length / Root.TotalLength, also consider adding a property to allow for seeking based on packets.

Determine if adding an ElementaryStreamReader which can help with the parsing of Elementary streams and their header information is helpful and how it can be done in a general way so it can be reused if necessary.

TransportStreamSource - Implement udp:// etc.

Determine if Magic Lantern Video Container Implementation is worth implementing.

**

Silverlight - MediaElement Sample
Wpf - MediaFoundation Sample
Forms - (Windows and others) Samples
ContainerInspector - Sample
RtspInspector - Integrate simple viewer for supported codecs.
MediaWriters - Example 1) BaseMediaWriter - Write a MJPEG stream to a file which is normal and then one which is fragmented, etc..

comments

juliusfriedman wrote Nov 4, 2014 at 8:42 PM

Determine if all MediaFileStream implementations should be moved outside of Media.dll to Container.dll leaving only the IMediaContainer definition to reduce overall library size when required.

Fixed in latest release

juliusfriedman wrote Nov 5, 2014 at 2:35 AM

*Added DataSize and renamed Size to TotalSize to facilitate changes.

wrote Nov 5, 2014 at 3:14 AM

juliusfriedman wrote Nov 6, 2014 at 10:56 PM

MediaFileStream - Ensure Semantic of Node across all Readers is consistent, e.g. the Position points to start of Node and not Data if possible.

RiffReader - No longer has to account for special nodes like 'IDIT' because of new Node properties.

Fixed - Changeset 110018

wrote Nov 10, 2014 at 6:43 PM

wrote Nov 10, 2014 at 6:43 PM

juliusfriedman wrote Nov 10, 2014 at 6:44 PM

MediaFileStream now has TryRegisterExtension.

wrote Nov 12, 2014 at 9:16 PM

wrote Nov 14, 2014 at 6:16 PM

wrote Nov 15, 2014 at 5:58 PM

juliusfriedman wrote Nov 21, 2014 at 3:47 AM

Break down Containers into Containers.BaseMedia, Containers.Riff etc to achieve best file size possible.

Break down Codecs into various projects.

Fixed in 110192

wrote Nov 21, 2014 at 4:01 AM

juliusfriedman wrote Nov 21, 2014 at 4:05 AM

Determine any namespace changes are required e.g. MxfReader and GxfReader would be placed under SMPTE namespace.

Determined no benefit since no inter correlation

wrote Nov 21, 2014 at 4:22 AM

wrote Nov 21, 2014 at 4:37 AM

wrote Nov 21, 2014 at 4:42 AM

juliusfriedman wrote Nov 21, 2014 at 7:15 PM

MediaFileStream - Determine if another class can be created to facilitate stream segmenting and forking besides MediaFileStream which would allow use from any Stream. Some scenarios require the use of a non file stream. Fixed in 110197 with ReadAbsolute, WriteAbsolute and Append methods.

wrote Nov 27, 2014 at 12:49 AM

juliusfriedman wrote Nov 27, 2014 at 8:08 PM

OggReader - Complete OggDS Support Fixed in 110248 Complete support for OGM old and new style headers.

wrote Nov 28, 2014 at 5:00 AM

wrote Nov 30, 2014 at 9:52 AM

wrote Dec 4, 2014 at 10:47 PM

wrote Dec 22, 2014 at 5:30 PM

wrote Dec 22, 2014 at 5:32 PM

wrote Dec 22, 2014 at 5:53 PM

wrote Dec 22, 2014 at 5:55 PM

wrote Dec 22, 2014 at 9:58 PM

juliusfriedman wrote Dec 23, 2014 at 9:10 PM

RtspMessage - Should allow for buffering of data until complete. Fixed in latest release.

wrote Dec 23, 2014 at 10:05 PM

Associated with changeset 110663: Stable Nightly Container Release

RtspMessage - Updated to ensure partial messages can be buffered and correctly recieved.

wrote Dec 23, 2014 at 10:08 PM

wrote Dec 24, 2014 at 2:36 AM

wrote Dec 26, 2014 at 1:10 AM

Associated with changeset 110675: Stable Christmas Container Release

ISocketReference - Clamped value to int.MaxValue

RtpClient - ProcessFrameData should no longer miss packets.

Temporarily Under TCP, if a packet arrives for a known TransportContext which is too big the buffer is attempted to be resized to accomadate it.

RtspMessge - Invalid headers are skipped.

RtcpPacket - Complete from was not taking into account

Program - Updated to show how invalid headers can still be parsed during an interleave.

wrote Dec 26, 2014 at 1:13 AM

juliusfriedman wrote Dec 26, 2014 at 9:57 PM

RtspClient
  • Should allow for buffer size less then 4096.
Latest Release

No longer completes packets in line.

Large packets are interleaved byte by byte.

wrote Dec 27, 2014 at 9:54 PM

Associated with changeset 110680: Stable Nightly Container Release

-Bug fixes and stability improvement.

RtcpPacket - GetPackets bug fixed when count was exactly RtcpHeader.Length

RtpPacket - Constructor added with count.

RtpClient - ProcessFrameData is now working as expected.

ReceiveData - Under TCP ProcessFrameData takes over to allow RFC4571 framing to be used.

ParseAndCompleteData - no longer copies RtpPacket data.

TransportContext
Initialize - punchHole logic fixed.
Initialize - with socket now also performs holepunch if required.

RtspClient - now reserves ports before making connections.

Will teardown and restart streams which are not flowing automatically when SendKeepAlive is called.

RtspMessage - Status Line is trimmed in parsing.

ParseHeaders - now looks for 2 empty lines to end the header section.

RtspServer - DataTransportNotReady only used when PLAY is received before SETUP with no PIPELINE.

m_ServerThread - Name is now equal to ServerName@m_ServerPort. ProcessAccept throttles priorty.

RtspSource - reduced buffer size from 8192 to 4096.

Utility.ReservePort added.

juliusfriedman wrote Dec 27, 2014 at 9:57 PM

  • Fixed in 110680*
RtpClient
  • Should make distinct events for frame complete and frame changed. Determined not useful
  • Should support the concept of buffering large packets under TCP which do not fit in the buffer, possibly via events for chunk. Determined not useful
  • ProcessFrameData SHOULD interleave only new data from the buffer, data which was previously interleaved in the same buffer should be excluded. Fixed
  • uner TCP, RtpPackets which contain Extensions larger than the indicated TCP frame size should NOT be completed because they are invalid. Fixed

wrote Dec 27, 2014 at 10:33 PM

wrote Dec 28, 2014 at 1:52 AM

wrote Dec 28, 2014 at 3:05 AM

juliusfriedman wrote Dec 28, 2014 at 6:13 PM

Latest Update

Changes to program ensure that Interleaving is working as expected by validating the version, payloadType and ssrc of the packet in question.
  • packets which attempt underflow are handled correctly
  • packets which attempt overflow are handled correctly
  • No framing errors observed.
Interleaved framing seems stable and secure.

juliusfriedman wrote Dec 29, 2014 at 6:46 AM

Latest release fixed
RtspClient
  • Should allow for buffer size less then 4096.

wrote Dec 29, 2014 at 2:34 PM

wrote Dec 29, 2014 at 4:02 PM

wrote Dec 29, 2014 at 4:15 PM

wrote Dec 29, 2014 at 10:03 PM

wrote Dec 29, 2014 at 11:38 PM

Associated with changeset 110690: Stable Nightly Container Release

Utility - Abort bug fixed when thread was alive.

Removed IndexOfAny.

Removed try catch on various functions.

RtpClient - ProcessFrameData ensures that a ssrc has been assigned before checking it. (Will eventully use a header to not duplicate logic)

Will now sleep when errors occur as well as when no packets remain to ensure CPU usage is consistent during a disconnect.

RtspClient - Added OnPause event.

Modified OnPlay to have MediaDescription.

Stable Nightly Container Release

Added Pause and Play methods which automatically fire events when successful responses are received.

SendSetup - Changed logic to allow for OnStopping to be raised from timer thread even if KeepAlive is disabled.

RtspServer - Client Disconnect usage issue solved.

Load test with 1000 users used max 75% CPU and 300 MB Memory. (Average 45% CPU and 150 MB memory)

RtspSource - Source pausing now effects Ready.

juliusfriedman wrote Dec 29, 2014 at 11:46 PM

Fixed in latest release

RtspClient - Should fire a Stopping event when the Media has ended.

wrote Dec 30, 2014 at 6:43 PM

juliusfriedman wrote Dec 31, 2014 at 4:59 PM

  • 110702 *
Adds support for servers which do not indicate which methods they support.

wrote Dec 31, 2014 at 6:21 PM

wrote Dec 31, 2014 at 6:32 PM

wrote Dec 31, 2014 at 6:40 PM

wrote Dec 31, 2014 at 6:48 PM

wrote Jan 2, 2015 at 7:38 PM

wrote Jan 2, 2015 at 7:38 PM

wrote Jan 2, 2015 at 7:42 PM

juliusfriedman wrote Jan 2, 2015 at 10:31 PM

Latest Release Fixes or Adds
RtspServer
-Should handle 'Timestamp' and 'delay'

RtspClient
  • Should have a list of playing media which will support the logic of pausing and stopping better and give better information to event subscribes on how to act on state during events.
  • Should handle 'Timestamp' and 'delay'
  • Should indicate 'ConnectionTime' and 'MessageRoundTripTime'
  • Should raise OnDisconnect when Connect fails.
  • Should support C.2 and C.3 Aggregate Control.
  • When using Rtp/avp udp transport Disconnect should not remove session description or dispose timers or remove session id. Reconnecting the RtspSocket is already supported in Connect and will occur if required to send a KeepAlive when the timer elapses. (Basically just separate logic into methods DisconnectSocket, DisposeTimers, DisposeSocket)
  • Should allow playing of a stream with a previously known Session Description and in such cases should probably not Describe the media again.
  • Should allow an explicit option to disable Keep Alive requests.
RtpPacket - Coefficients should be named PayloadData, NonPayloadOctets should be HeaderOctets.

juliusfriedman wrote Jan 3, 2015 at 2:25 AM

Added or Fixed in Latest Release

RtspClient
  • Should allow creation from an existing socket and have the ability to leave that socket open when disposing. (Added LeaveOpen and additional constructor parameters)
  • Should count failed receptions on TransportContext when the buffer is too small to encompass all packet data.
TransportContext
  • Should have a failed receptions property. (For rtp and rtcp)
  • Added LeaveOpen

juliusfriedman wrote Jan 3, 2015 at 2:32 AM

Fixed in latest release.

RtpPacket - Should have AddDataToPayload method.

wrote Jan 3, 2015 at 2:35 AM

juliusfriedman wrote Jan 3, 2015 at 3:03 AM

Fixed in latest release

RtspClient -
  • When a media ends prematurely (e.g. with a Goodbye or other supported mechanism) the Stop event should be raised with the appropriate media otherwise if all media is stopped Stop should be called with null.

wrote Jan 3, 2015 at 3:14 AM

Associated with changeset 110710: Stable Nightly Container Release 2015

RtspClient - now allows creation from an existing socket and has the ability to leave that socket open when disposing. (Added LeaveOpen and additional constructor parameters)

DisconnectSocket - respects LeaveOpen

SendKeepAlive - Bug fixed to properly only send keep alive if property DisableKeepAliveRequest is true.

When media has ended the TransportContext associated is disposed.

Fixed events for Pausing to properly remove media before raising event.

RetryCount - is now RepsonseTimeoutInterval.

RtpClient - counts failed receptions on TransportContext when the buffer is too small to encompass all packet data.

Event handlers thread safer.

TransportContext - now has a failed receptions property. (For rtp and rtcp)

RtpPacket, RtcpPacket - Added PaddingData, PayloadData or RtcpData now returns everything contined up to the end up of packet if not complete.

Added LeaveOpen to allow sockets to be kept open when disposing or Disconnecting.

ClientSession - Added RtspSocket, Disconnected.

RtspServer - Handled TCP Disconnects.

ProcessRtspRequest - now honors AllowSessionChangesFromAlternateEndPoints in both Tcp and Udp Transport.

RtspInspector - Updated to use DisableKeepAliveRequests.

wrote Jan 3, 2015 at 3:20 AM

wrote Jan 3, 2015 at 3:22 AM

wrote Jan 3, 2015 at 8:35 PM

wrote Jan 7, 2015 at 10:14 PM

wrote Jan 8, 2015 at 5:13 PM

wrote Jan 9, 2015 at 12:15 AM

wrote Jan 9, 2015 at 6:52 AM

wrote Jan 9, 2015 at 6:54 AM

Associated with changeset 110765: Stable Container Release

[Performance Updates]
[Updates for rfc2326bis]

RtpClient - Connected is now IsConnected.

SendReceive - sleeps more if possible.

RtspClient - SendRtspRequest is no longer synchronized to support pipe-linling, added useClientProtocolVersion parameter.

Added DefaultProtocolVersion.

Added ProtocolVersion property, set in constructor.

m_LastMessageRoundTripTime set at a default of 500 ms.

KeepAliveTimeout is now RtspSessionTimeout.

If the request version was not supported then just utilize the response version to retry the request.

When receiving a response a retry is sent if using unreliable transport and more time has elapsed then previously required.

ProcessInterleaveData - now handles server sent requests properly by firing events when required.

Utility - TryParseUserInfo added, ParseUserInfo logic corrected.

RtspMessage - headerOffset is now m_HeaderOffset.

ParseHeader checks for a valid Cseq value.

Documented Constructor and CompleteFrom.

ClientSession - Dispose no longer ends prior sends or receives since Shutdown is called and sets RtpClient priority to lowest.

ProcessSetup checks for a Disposed RtpClient.

RtspServer - Checks for additional ways to invalidate inactive clients.

Increased server thread priority.

Stop checks that not server is not already stopped.

ProcessAccept only logs exceptions when running.

HandleSocketException is now HandleClientSocketException and it sets the sessions RtpClient to lowest priority when it occurs.

RtspRequests are no longer processed if Stop is called.

RtpPacket and RtcpPacket check Payload to not be null before attempting to Dispose.

wrote Jan 9, 2015 at 7:17 AM

juliusfriedman wrote Jan 9, 2015 at 7:18 AM

Latest Release Fixes
  • Server sent requests should be checked for CSeq and if required should effect the next sequence number used by the RtspClient.

wrote Jan 9, 2015 at 10:56 PM

wrote Jan 9, 2015 at 10:57 PM

wrote Jan 10, 2015 at 6:25 AM

wrote Jan 11, 2015 at 10:31 PM

wrote Jan 13, 2015 at 10:00 AM

wrote Jan 13, 2015 at 10:22 AM

wrote Jan 14, 2015 at 8:19 PM

wrote Jan 14, 2015 at 9:08 PM

wrote Jan 14, 2015 at 9:09 PM

juliusfriedman wrote Jan 15, 2015 at 5:38 PM

Fixed in latest release

SourceMeda - SHOULD have a way to enable and disable such that the server will know not to attempt to start the media. [Added Disabled to IMedia]

juliusfriedman wrote Jan 18, 2015 at 9:35 AM

Latest Release

Adds to Utility.Common ILogging, ConsoleLogger, DebuggingLogger, FileLogger and NullLogger.

RtcpPacket
  • [Line 123] Fixed bug due to using the incorrect math variables.
  • Added GetImplementationForPayloadType(int)
RtpClient
  • CreateSendersReport and CreateReceiversReport now correctly detects if the report should be empty (devoid of ReportBlocks with BlockCount=0)
  • Added AssignIdentity to reuse code.
  • Udp hole punching has been improved and now correctly detects when the remote port should be probed for Rtcp and Rtcp independently.
  • HandleIncomingRtcpPacket was revised to allow the RtpClient to determine the RemoteSynchronizationSourceIdentifier from incoming ReieverReports automatically.
  • Added HandleCollision to allow code reuse.
  • HandleIncomingRtpPacket was revised to properly to handle collisions
  • SendGoodbye now allows for sending a report which is not stored in the context
    and also allows the call to be forced.
  • SendReports, SendSendersReport and SendReceiversReport can all now be forced.
  • SendReports checks for a Goodbye to be stored on the context before attempting to send another report.
  • SendGoodbyeIfInactive has been revised to better detect inactivity and send timeout Goodbyes when required.
  • Disconnect no longer aborts the worker thread.
  • SendData now always returns what was sent.
  • ReceiveData now always returns what was received and handles end point switching automatically and throws any exception encountered.
  • SendRecieve now ensures a stop has not been requested before attempting to perform another action for a context. Outgoing RtcpPackets are not removed unless they are sent. Outgoing RtpPackets are always removed for now to reduce delay and re-transmission. (This may be changed to take into account the underlying protocol). ThreadAbortException is handled properly.
RtspMessage
  • Added ValueSplit.
  • Worked on TryParseRtpInfo
  • Fixed bug in constructor when looking for valid data.
  • Revised Dispose.
RtspClient
  • Prevents other requests from being sent by setting the block before sending.
  • Waiting for a message logic has been changed to only wait for any message and not attempt to verify the contents of the message received to prevent needlessly waiting.
  • SendDescribe will attempt to parse the body of a request without a 'Content-Type' header. (May want a
    'strict' option for this so it's not done automatically)
  • SendPlay uses 'RtpInfo' if present.
  • SendKeepAlive revised to allow sending even if the protocol has not been finalized, any exception which occurs checks 'IsPlaying' and fires 'OnStopping' (May want to revise what fired)
RFC2435Media
  • Version 1 SDP has been changed to version 0 (for now ;))
  • Thread priority is cycled when possible. (Check again when implement rate limiting)
ClientSession
  • Added SharesSocket.
  • Added m_RtpClient_InterleavedData to prevent having to look-up the ClientSession.
  • RtpClient buffer no longer owns the ClientSession buffer.
  • Constructor sets timeouts for the RtspSocket.
  • Revised StartReceive to use Poll, may further change to also rely on LastRecieve.
  • SessionId is now assigned as required in response to a 'SETUP', this can be changed if 'Dynamic' Uri's are utilized in the RtspServer.
  • ProcessSetup now reserves client ports for udp and leaves tcp sockets open.
  • ProcessPlay only queries the SourceMedia once for context information and properly interprets the Range header.
  • Revised Dispose
  • SendRtspData now allows for partial sends and properly shares the socket when required.
  • Added methods for debugging session rtp and rtcp traffic.
  • RemoveSource now takes ISourceMedia.
  • ReleaseUnusedResources has been revised to be correct.
  • CreateRtspResponse now allows for when the 'Cseq' or 'Session' was not given in a request. (Should also probably fine tune this)
  • CreateSessionDescription now uses version 0 sdp, (for now ;)) and removed old session control lines when re-writing.
  • is now a public class while the revisions are being made to only use a RtspClient.
RtspServer
  • Clients has been fixed to throw exceptions encountered.
  • AddSession is now TryAddSession, DisposeAndRemoveSession is now TryDisposeAndRemoveSession.
  • Added ProcessClientBuffer to facilitate the handling of interleaved data.
  • GetSession(string) has been replaced with GetSessions(string)
  • DisconnectAndRemoveInactiveSessions have been revised.
  • CreateOrObtainSession is now CreateSession
  • ProcessReceive has been revised to properly handle interleaving situations.
  • Revised ProcessSendComplete to use partial sending if required.
  • ProcessRtspRequest logs the request on entry and now handles EndPoint switching better.
  • ProcessSendRtspMessage has been revised to check for early disposition and the presence of the Session header, also marks the related ClientSession as not Disconnected.
  • ProcessRtspOptions was revised to handle all types of locations.
  • ProcessDescribe now check for the 'Accept' header.
  • ProcessRtspInterleaveData has been removed.
RtpServerLogger
  • Now inherits from ILogging.
RtspServerConsoleLogger and RtspServerDebuggingLogger have been revised for the changes to ILogging.

SessionDescriptionProtocol
  • is now BaseDisposable
  • fields are assigned in constructor
  • changed variables names to be more meaningful
  • updates the correct version when adding or removing lines.
TimeDescription
  • SessionStartTime and SessionStopTime are now double, fixed parsing of both.
  • RepeatTimes is now a List<string>
SessionOriginatorLine
  • Version is now SessionVersion.
Program
  • TestRtpClient has been revised to be cleaner
  • TryPrintClientPacket now gives more information if possible.
  • Stored any RtpFrame with missing packets in a hash for inspection.
----- Much Much Much More to come -----

juliusfriedman wrote Jan 25, 2015 at 8:12 PM

Latest Release

[Boolean inversion reversed everywhere, no longer uses !, will compare with false ==]

ILogging - Feedback will be required to ensure functionality is achieved.

Utility - Added DictionaryExtensions, TryAdd and TryRemove.

ConcurrentThesaurus - ConcurrentDictionary was replaced with Dictionary as it was originally.

SessionDescription - ReadOnlyCollection has been replaced with IEnumerable, Lines property now also returns the Version, Originator and Name lines, now has Length property.

SessionDescription.Line has Length property.

MediaDescription has Length property and ConnectionLine

TimeDescription has Length property.

juliusfriedman wrote Jan 25, 2015 at 8:33 PM

MemorySegment - changes to GetEnumerator and Dispose.

juliusfriedman wrote Jan 25, 2015 at 11:44 PM

Server AddMedia is now TryAddMedia, RemoveMedia is TryRemoveMedia.

(IMedia is only started if the add is successful.)

wrote Jan 26, 2015 at 7:09 AM

wrote Jan 26, 2015 at 7:53 AM

wrote Jan 27, 2015 at 10:32 PM

juliusfriedman wrote Jan 29, 2015 at 7:32 AM

Latest Code Fixes

Utility - Added ReadLine, ReadToEnd.

RtspMessage - Improved parsing

RtpClient - Fixed bug in ProcessInterleaveData when frameLength was<=than 6 bytes.
  • Added raisedEvent output to ReadRFC2326FrameHeader

juliusfriedman wrote Jan 29, 2015 at 7:37 AM

Latest Code Fixes

Utility - Added ReadLine, ReadToEnd.

RtspMessage - Improved parsing

RtpClient - Fixed bug in ProcessInterleaveData when frameLength was<=than 6 bytes.
  • Added raisedEvent output to ReadRFC2326FrameHeader

juliusfriedman wrote Jan 29, 2015 at 8:11 AM

Latest Code Fixes

RtspMessage - Added MethodString property, to be parsed only when required.

RtspClient - Added IgnoreServerSentMessages to ignore pushed messages (false as default), checked that the client was not waiting for a message before handing pushed messages.

Utility - Added TryModifyString.

Binary - Added Endian enum, SystemEndian property, detects endian on startup.

juliusfriedman wrote Jan 29, 2015 at 6:03 PM

Latest Code Fixes

RtspClient - SendPlay no longer uses incorrect CSeq when re-transmitting, sends the best range header possible by using the Start and EndTime information together to produce either '0' when there is an end or 'now' when there is not.

juliusfriedman wrote Jan 29, 2015 at 7:38 PM

RtspClient - DisconnectSocket now has a force parameter and raises Disconnect event, no disconnect is attempted unless LeaveOpen is false or 'force' was specified.

wrote Jan 29, 2015 at 10:24 PM

wrote Jan 29, 2015 at 10:46 PM

wrote Jan 29, 2015 at 11:16 PM

wrote Jan 30, 2015 at 12:30 AM

Associated with changeset 110875: Stable Container Release

[Bug Fixes, Compliance, Performance]

Binary - ReadInteger doesn't check endian anymore.

Synchronized constructor of Binary to ensure was not called twice and that if it was that subsequent calls would see the tables already created and bail.

Utility - Added ExtractPrecisionNumber, and ExtractNumber.

Added GetNetworkInterface (socket s)

RFC2435Media - Handles ThreadAbortException.

RtspClient - Adds MethodString, changes SupportedMethods to string.

IsConnected uses local information before checking socket state.

SocketReadTimeout and SocketWriteTimeout getters and seters were adjusted to handle null.

Fixed the constructor to propertly handle escaping of the user info used in credentials.

Removed ThreadLocal use in ProcessInterleavedData.

StartPlaying will only send Options if required and will not except for empty options response in cases where the host will not respond to OPTIONS requests.

Connect now uses ProcessEndConnect to allow for exceptions to be handled and the Disconnect event to be raised.

SendRtspRequest now only re-transmits in RTSP over UDP.

Removed Auto - Reconnect code for now.

Properly set LeaveOpen in SendSetup so the underlying Transport Client can still use the socket when the RtspClient Disconnects if required.

Blocksize header is only used in SETUP.

DisconnectSocket now has a force parameter and raises Disconnect event, no disconnect is attempted unless LeaveOpen is false or 'force' was specified.

SendPlay no longer uses incorrect CSeq when re-transmitting, sends the best range header possible by using the Start and EndTime information together to produce either '0' when there is an end or 'now' when there is not.

RtspMessage - Added MethodString property, to be parsed only when required, disposed buffer early when possible.

ParseBody, ParseHeaders or ParseStatusLine no longer creates a StreamReader.

Parsing for now tolerates \r or \n by itself or a combination of their use to end a line.

Added DefaultEncoding = System.Text.UTF8.

ToString now gives a better representation of invalid or otherwise configured messages.

GetHashCode is better suited for determining if message is the same exact message as another.

IsComplete - now takes message type into account and detects when headers have been parsed already.

Added DisposeBuffer.

CompleteFrom now works when there is no existing buffer or the buffer was already disposed, also allows better use of CompleteFrom when the data was partially in the buffer and partially in the socket.

RtspHeaders - RangeHeader - Removed rangeFormat and added timePart.

TryParseRtpInfo - now parses in int and then casts to uint. (Might have to check for sign when parsing)




RtspClient - Added IgnoreServerSentMessages to ignore pushed messages (false as default), checked that the client was not waiting for a message before handing pushed messages.

Utility - Added TryModifyString.

Binary - Added Endian enum, SystemEndian property, detects endian on startup.

Utility - Added ReadLine, ReadToEnd.

RtspMessage - Improved parsing

RtpClient - Fixed bug in ProcessInterleaveData when frameLength was<=than 6 bytes.
Added raisedEvent output to ReadRFC2326FrameHeader

SendPlay better hanldes cases of no response.

SendSetup handles cases of no response better.

ContainsBytes - fixed bug where the search was performed multiple times unnecessarily, will now allow for partial matches if desired.

RtpClient

SendRtcpPackets and SendRtpPackets now have SocketError overloads.

Goodbye recieved from a remote party is outlined in code.

Dual events fired for InterleavedData and RtcpPackets are no longer fired.

SendReceive - no longer stops immediately on first ConnectionReset or ConnectionAborted.

RtspSource - corrected bug where source Uri still had UserInfo after removing

Program - Updates for changes above to ensure tests pass with expected results.

wrote Feb 17, 2016 at 4:10 PM

wrote Feb 19, 2016 at 6:43 PM

wrote Feb 19, 2016 at 7:11 PM

juliusfriedman wrote Mar 16, 2016 at 9:26 PM

When enumerating nodes, determine if it is better to reference nodes required for Track Information to allow the GetTracks function to return more quickly and not seek anymore then is required.
Determined it is worth it most of the time, seeking is bad

Added caching implementation

wrote Jul 17, 2016 at 2:57 AM

juliusfriedman wrote Dec 2, 2016 at 3:59 PM

Added MediaStatus and MediaSessionState, allows coupling of Session and Media Description and additional information such as playing / remaining time, non playing time etc to be easily calculated.

juliusfriedman wrote Dec 2, 2016 at 4:00 PM

Add DataStream to allow for buffering of data at the Track level.

Modified Track to allow properties to be modified during run time.

juliusfriedman wrote Dec 2, 2016 at 4:11 PM

IMediaContainer - Write/Set Track and Write/Set Sample proposed to allow unification of container readers and writers and containers which require reading and writing at the same time or otherwise such as dynamic contents which depend on values later on in the stream.