Added support in Stream Targets to push Apple HLS (cupertino) streams to Akamai over SSL/HTTPS (only controllable through application properties)

Added push publishing map file (PushPublishMap.txt) property "sendSSL" to control use of SSL when POSTing Apple HLS (cupertino) streams to Akamai (valid values are "true" and "false", default is false). Use of this option requires Java 1.7 or newer

Added push publishing map file (PushPublishMap.txt) property "playbackSSL" to control use of SSL (HTTP vs. HTTPS) in the playlist and chunklist for Apple HLS (cupertino) streams pushed to Akamai (valid values are "true" and "false", default is false (HTTP)). Use of this option requires Java 1.7 or newer

Fixed LiveStreamRecord when configured for "append" and two streams with different codecs are published sequentially. This caused a cast exception to be thrown when closing the MP4 file and resulted in a corrupt file. When the file was subsequently reopened for append, an infinite loop prevented all future requests to start/stop recording and any application failed to be processed. Now if the incoming stream doesn't have the same codecs as the MP4 file being appended to, appending is disabled and the default version scheme (date/time stamp) is used such that recorded content isn't lost

nDVR

Fixed nDVR packetizers to shut down correctly when an application instance stops

Fixed nDVR AES manifest to include the URI prefix in the X-KEY-METHOD header

Improved DVR ABR alignment algorithm to better handle resumption of alignment calculation after large gaps when feeds come in at different times

Fixed Apple HLS repeater so that custom chunk IDs are migrated from origin to edge correctly

Added API getChunkMap() to LiveStreamPacketizerCupertinoChunk. Returns the chunk's byte layout to help identify the media data that makes up the chunk:

CupertinoChunkMap LiveStreamPacketizerCupertinoChunk.getChunkMap()

Added API getDataPackets() to LiveStreamPacketizerCupertinoChunk. Returns a list of all the data AMFPackets that occurred during the chunk duration (can be used to get onTextData, onCUE (SCTE-35), or onKLV event data):

Added HTTPStreamer/Properties Boolean property "dvrCupertinoPlaylistDiscontinuityAtAlternates" to control the behavior (default is true)

Added HTTPStreamer/Properties Boolean property "cupertinoAppendQueryParamsToEncUrl" to control if query parameters are appended to encryption URL for Apple HLS streaming (default is true, set to false for Fairplay)

Added key file Boolean item "cupertinostreaming-aes128-iv-include-in-chunklist" and encryption API to control if IV value is included in chunklist when doing Apple HLS encryption (default is true, set to false for Fairplay):

Fixed MPEG DASH SMIL/AMLST request handling for non-repeater-edge server requests. When all streams are unavailable, Wowza Streaming Engine doesn't attempt internal retries, since they create a lot of DASH HTTP sessions that can cause heap issues when many clients try to connect

Fixed MPEG DASH SMIL/AMLST request handling for repeater-edge server requests so that internal retries re-use the DASH HTTP session created on the initial try for all ensuing tries, avoiding creation of numerous sessions

Added support for <BaseURL> tag in on-demand and live MPEG-DASH manifests

Added HTTPStreamer String property "mpegdashChunkHostDomain", which modifies the domain name indicated in the MPD <BaseURL> tag. Allows content files to be located on a different server than the MPD manifest file

Changed MPEG-DASH RepresentationId values to include an indication of the rendition bitrate (for example: "p0va0r3500000", which is a 3500000 bps video rendition)

Added HTTPStreamer String property "mpegdashMinBufferTime", which can be used to modify the minBufferTime attribute in DASH MPDs

Fixed MPEG-DASH null pointer for some audio segment indexing

Added support for the repeat count attribute (@r) within the SegmentTimeline.S elements in MPEG-DASH on-demand streaming MPDs. This greatly reduces the size of MPDs for large assets with many contiguous segments of the same duration

Fixed MPEG-DASH null pointer when in HTTP Origin mode

Added support for "role", "audioRole", and "videoRole" params in SMIL files used for MPEG-DASH streaming to allow better separation of renditions into appropriate AdaptionSets

Added API to support custom fragment ID and time offset for MPEG-DASH live streaming packetizer:

New interface IHTTPStreamerMPEGDashLiveStreamPacketizerChunkIdHandler that must be implemented to provide chunkId and timecode for the stream. For it to work with many players, chunkId must be set as follows: chunkId = 1 + (timecode/liveStreamPacketizer.getChunkDurationTarget())

To set custom chunkId handler, add mpegdashChunkIdHandlerClass property to LiveStreamPacketizer/Properties container in Application.xml and set it to full path to your IHTTPStreamerMPEGDashLiveStreamPacketizerChunkIdHandler implementation

Fixed a potential synchronization issue with live stream repeater for MPEG-DASH

Fixed serialization and deserialization of AMFPacket used for MPEG-DASH live-repeater, which caused some repeated streams to fail

Updated HTTPProviderMediaList so that it formats the videoCodecId string for AVC streams per RFC6381 Section 3.2 to meet MPEG-DASH requirements

HTTP Streaming (Smooth)

Fixed Smooth Manifest so that MaxWidth,MaxHeight,DisplayWidth,DisplayHeight show the highest values when multiple renditions are available

Fixed Smooth Streaming adapter for live streams so that 404 HTTP status is returned for fragment requests that aren't in current readahead list rather than waiting for several seconds to return 404

Added HTTPStreamers/Properties Boolean property "smoothOnlyWaitIfReadAheadFragment". If true, 404 is returned for fragment requests that aren't in the readahead list; if false, 404 is returned if request is for previously deleted fragment (maintain a list of 2000 fragments, default is true)

Added HTTPStreamers/Properties integer property "smoothFragmentNotFoundStatus" to control HTTP status returned if fragment isn't found (default is 404)

HTTP Streaming (General)

Fixed OPTIONS request to provide CORS headers when an invalid application/instance is requested

Added .stream file property for MediaCaster multicast RTSP re-streaming to specify the audio and video port to use when the server returns zero for the port number in the DESCRIBE response (rtspMulticastServerPortAudio and rtspMulticastServerPortVideo, both the specified port number and the next port number are used for each track [RTP and RTCP], default is zero)

On-Demand Streaming (VOD)

Fixed the bitrate calculation for MP3 files that have ID3 tags in them (off by a factor 5--too large)

IMPEG2UserMonitorRawNotify: Get called back for each individual 188 TS packet for a given PID
IMPEG2UserMonitorPESNotify: Get called back with assembled Packetized Elementary Stream (PES) data
IMPEG2UserMonitorSectionNotify: Get called back with assembled section table data (SCTE-35 and SCTE-104 table data...)

A given PID can only be monitored once. Any internal monitoring such as a video or audio PID for ingestion trumps any user-added PID monitors

添加了RTPDePacketizerMPEGTS API:

public int getVideoPID()
public int getAudioPID()
public RTPTrack getAudioRTPTrack()
public RTPTrack getVideoRTPTrack()
public int getAudioCodec()
public RolloverLong getAudioTC()
public int getAudioCodecStreamRate()
public int getAudioCodecChannels()
public int getVideoCodec()
public RolloverLong getVideoTC()
public RolloverLong getVideoPTS()
public RolloverLong getVideoDTS()
public RolloverLong getDataTC()