Wowza Streaming Engine 4.5.0 Release Notes

Version: Wowza Streaming Engine™ 4.5.0 build 18676 released on June 23, 2016.
 
Note: For step-by-step instructions about how to update your Wowza Streaming Engine media server software, see How to update your Wowza Streaming Engine installation.

Contents


New Features and Functionality in Wowza Streaming Engine 4.5.0
Detailed list of changes in Wowza Streaming Engine 4.5.0

New Features and Functionality in Wowza Streaming Engine 4.5.0


Wowza Streaming Engine™, formerly Wowza Media Server™, is robust, customizable, and scalable media server software that powers reliable streaming of high-quality video and audio to any device, anywhere.

New Stream Target destinations and capabilities

New destinations: Facebook, SHOUTcast, and Icecast

The Stream Targets feature in Wowza Streaming Engine enables you to send live streams to content delivery networks (CDNs), streaming servers, streaming services, and multicast networks for distributed delivery. The destination distributes your live stream, enabling you to scale your Streaming Engine implementation, computing resources, and delivery options for a variety of scenarios. Wowza Streaming Engine 4.5.0 has new destination options that enable you to send live video streams to Facebook and live audio-only streams to SHOUTcast and Icecast servers. For more information, see How to stream to Facebook Live and How to stream to SHOUTcast and Icecast.

Akamai: Apple HLS ingest and egress over HTTPS

On the Akamai HD network, you can configure endpoints that ingest and deliver all content over HTTPS. Wowza Streaming Engine 4.5.0 has new properties for Apple HLS destination options that take advantage of this capability for Apple HLS streams. You can configure a property to send Apple HLS streams to the Akamai HD network over HTTPS. You can also configure a property to specify that the Apple HLS playlist and chunks are delivered to players over HTTPS. For more information, see How to stream to the Akamai HD network.

Apple HLS delivery to generic stream target

Wowza Streaming Engine 4.5.0 also introduces the ability to create a generic stream target that receives an Apple HLS stream from Wowza Streaming Engine. This feature is aimed at developers who want to do the following:
 
  • Send HLS streams to destinations using any desired path and/or communications protocol.
  • Modify and customize the playlist and chunks using the Java API.
For more information, see How to send Apple HLS streams to a generic destination.

New integrated live sources from our Works with Wowza partners

Wowza Streaming Engine software has integrated publishing options that simplify live streaming workflows. The Sources (Live) feature for live applications in Wowza Streaming Engine Manager enables you to deliver connection settings for the application to a variety of popular encoders and cameras.

Wowza Streaming Engine 4.5.0 adds Panasonic camcorders and PTZ cameras to its growing lineup of integrated encoders and cameras. For more information, see the following articles:
  To see our entire lineup of encoders and cameras that are integrated with Wowza Streaming Engine software, see our Works with Wowza webpage.

New Media Cache source

The Media Cache feature in Wowza Streaming Engine is a read-through caching mechanism that increases the scalability of on-demand video streaming for your Wowza media server configuration. In this release of Wowza Streaming Engine software, we've increased the flexibility of Media Cache deployment options by adding Google Cloud Storage Buckets as a supported media cache source for media files. You can configure Wowza Streaming Engine Manager to request media files from a single bucket linked to a Google Cloud service account. For more information, see How to scale video on demand streaming with Media Cache.

WebM support for MPEG-DASH streams

Wowza Streaming Engine 4.5.0 supports the WebM file format and codecs. WebM streams are compressed with the VP8 and VP9 video codecs and the open-source Vorbis and Opus audio codecs. Your live applications in Wowza Streaming Engine can ingest WebM-encoded source streams or you can transcode an H.264-encoded source stream to the WebM format. For more information, see How to transcode live streams to WebM for MPEG-DASH playback.
 
Note: The WebM file format and codecs were supported as a technology preview feature in previous versions of the Wowza Streaming Engine software. We recommend that you update the software to Wowza Streaming Engine 4.5.0 for the best results.

WebSocket server

The WebSocket is a protocol that provides full-duplex communication changes or a single TCP connection. WebSocket is supported by most modern web browsers and can be used with socket servers such as node.js. You can use a new HTTP Provider in Wowza Streaming Engine 4.5.0 to host WebSocket sessions. For more information, see How to create a WebSocket server.

SNMP server

Wowza Streaming Engine 4.5.0 adds support for Simple Network Management Protocol version 2c (SNMPv2c), a network management protocol that you can use to collect information about your Wowza Streaming Engine media server configuration. This lets you add your Wowza media servers to your SNMP-managed network and monitor status for different media server SNMP objects from your SNMP management system. For more information, see How to use SNMP in Wowza Streaming Engine.

APIs for monitoring and extracting live MPEG-TS stream data

MPEG-TS live streams can carry multiple streams of data including audio, video, closed captions, ad markers (SCTE-35, SCTE-104), key length value (KLV), and more. Each stream is identified by a packet identifier (PID). Wowza Streaming Engine 4.5.0 includes an API for connecting a custom listener to the MPEG-TS ingestion process to insert PID monitors into the stream and a PID monitor API for extracting the stream data whenever data is available on a given PID. The code examples in How to monitor MPEG-TS ingestion to process additional data streams show how to add an MPEG-TS ingestion listener API and PID monitor API to your media server to extract additional stream data and implement a built-in monitor for SCTE-35 markers and KLV data. Listening to other types of MPEG-TS data is also possible using these APIs.

LATM encapsulation

In Wowza Streaming Engine 4.5.0, we added support for Low Overhead Audio Transport Multiplex (LATM) encapsulation of AAC over MPEG-2 transport streams.

Detailed list of changes in Wowza Streaming Engine 4.5.0


Install/Update/Uninstall

  • Fixed a logic bug in update tool post-uninstall actions, that caused the update tool to log an error when there wasn't one and to not log an error when there was (in this latter case, the "Restoration complete" message wouldn't be shown)
  • Fixed update tool issue where permissions and execute settings were lost when uninstalling an update on OS X and Linux

Wowza Streaming Engine Manager

  • Fixed multicast in/out interface address assignments in the VHost configuration section of the manager
  • Fixed application creation in the manager so advanced options are immediately available
  • Removed httpRandomizedMediaName property from VOD HTTP Origin application in the manager
  • Improved stream recording crontab validation in the manager
  • Fixed disabling nDVR configuration in the manager
  • Fixed null pointer when playing content in the manager's MPEG-DASH test player

Stream Targets (Push Publishing)

  • Fixed Stream Targets page to eliminate unintended page refreshes
  • Fixed Stream Targets bug where all enabled stream targets show an Active status when any stream target is active
  • Fixed Wowza Streaming Cloud Stream Target so that audio-only streams can be pushed successfully
  • 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 push publishing Akamai HLS ABR rendition ordering to maintain order from map file
  • Fixed problem with RTMP push publishing that caused an exception when connection was refused and result object included "application" item with description of the reason for failure
  • Removed incorrect display of application-level buttons when editing a specific stream target in Wowza Streaming Engine Manager
  • Added Shoutcast1, Shoutcast2, and Icecast2 Stream Targets for audio-only push publishing
  • Added support to enable users to develop custom Apple HLS stream target destinations using a generic stream target base class
  • Added support for Facebook stream target destination

Transcoder 

  • Fixed HEVC decoder crash on Linux by setting LD_PRELOAD variable in startup script
  • Fixed Quick Sync accelerated H.264 decoder to filter out filler NAL units that caused decoding artifacts
  • Added GPUID selection to transcoding decode options
  • Fixed Transcoder crash when SkipFrameCount is set higher than the source stream framerate. Destination framerate now set to 1 when this happens
  • Fixed Transcoder log statement formatting so the comment data has proper JSON format (field names double-quoted)
  • Improved MP3 decoder so that it properly decodes packets with more than one MP3 frame

Live Stream Recording

  • Added IP whitelisting/blacklisting for LiveStreamRecord HTTP Provider
  • Fixed Live-to-VOD clip extraction code that caused the conversion start time to be overwritten with the default value. This caused all conversions to start at the beginning of the DVR store
  • Added dvrConverterDebugConversions query parameter to nDVR converter REST API to allow debug to be enabled per conversion request
  • Fixed issue with some live-record recordings being out of lip sync (adjusted codec config timecodes to match first packet in list and fixed timecode of first data packet to match trimmed audio/video)
  • Improved nDVR conversion performance when selecting segments from large stores
  • Fixed LiveStreamRecord HTTP whitelist/blacklist logic when both are empty
  • Added splitOnTcDiscontinuity parameter to the streamrecorders REST API endpoint
  • 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
  • Improved DVR ABR alignment algorithm to ignore small gaps that don't align with alternative chunks
  • Fixed DVR manifest reader to use property "dvrTextReaderClass" to dynamically load class to read DVR manifest files
  • Enhanced IDvrFileWriter init() to include the IDvrStreamStore to provide more context to custom writers
  • Added option to use SAX parser for DVR manifest parsing, controlled by DVR property "dvrUseSAXParser" (Boolean, default is false), which should improve performance

Closed Captions

  • Added closed-caption options for VOD/Live HTTP Origin applications in Wowza Streaming Engine Manager

Media Cache

  • Added support for Google Cloud Storage to Media Cache
  • Added debug for MediaCacheItemFileImpl to see file operations in progress. Property MediaCacheSource/debugLog or MediaCache/debugLog enables this output

HTTP Streaming (Apple HLS - Cupertino) 

  • Turned off Apple HLS cupertinoAutoAdjustDurationIfOutOfBounds system by default (also improved logging when feature is on)
  • Disabled EXT-X-ALLOW-CACHE header by default for Apple HLS streams; mediastreamvalidator warns this is a deprecated playlist header item
  • 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):
    • List<AMFPacket> LiveStreamPacketizerCupertinoChunk.getDataPackets()
  • Enhanced Apple HLS DVR playlists to insert discontinuity marker when alternate chunks are used during stream gaps:
    • 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):
    • boolean CupertinoEncInfo.isEncIVBytesInChunklist()
    • CupertinoEncInfo.setEncIVBytesInChunklist(boolean encIVBytesInChunklist)

HTTP Streaming (MPEG-DASH) 

  • Fixed MPEG-DASH playback issue on Chrome/OS X by adding sample flags to MP4 fragment data to make key frames (trun box)
  • Fixed MPEG-DASH on-demand streaming with CENC issue that caused an exception and failure on segment requests
  • Fixed MPEG-DASH streaming issue related to incorrect identification of all video frames as sync/i-frames in trun boxes
  • 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 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
  • Added HTTPStreamer/Properties Boolean property "mpegdashAdjustCTTSForFirstKeyFrameToZero" to adjust CTTS values to zero (default is false). Some browsers can't play on-demand MPEG-DASH assets where CTTS of first frame isn't zero
  • 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 

RTSP/RTP Streaming 

  • Updated VP9 RTP depacketizer and packetizer to latest specification version (draft-ietf-payload-vp9-01)
  • Fixed UDP port allocation/deallocation issue with RTSP/RTP streaming
  • Removed errant RTSP/RTP warning message: "RTCPHandler.handleMessage : socket address is null or not RTCP packet"
  • 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)
  • Increased default VOD readahead cache size from 64K to 256K for better performance on higher bitrate files 

MPEG-TS Ingestion 

  • Added support for LATM AAC audio ingestion over MPEG-TS
  • Added listener interface IRTPDePacketizerMPEGTSNotify to MPEG-TS depacketizer to enable callbacks during live TS processing:
    • Added RTP/Properties String property "rtpDePacketizerMPEGTSListenerClass", set to full path of class that implements IRTPDePacketizerMPEGTSNotify to enabled (pipe | delimited for multiple class definitions)
  • IRTPDePacketizerMPEGTSNotify definition, best to extend RTPDePacketizerMPEGTSNotifyBase and override needed callbacks:
    public void onInit(RTPDePacketizerMPEGTS rtDePacketizerMPEGTS, RTPContext rtpContext, RTPDePacketizerItem rtpDePacketizerItem);
    public void onStartup(RTPDePacketizerMPEGTS rtDePacketizerMPEGTS, RTPTrack rtpTrack);
    public void onShutdown(RTPDePacketizerMPEGTS rtDePacketizerMPEGTS, RTPTrack rtpTrack);
    public void onPAT(RTPDePacketizerMPEGTS rtDePacketizerMPEGTS, ProgramAssociationTable newPAT);
    public void onPMT(RTPDePacketizerMPEGTS rtDePacketizerMPEGTS, ProgramMapTable newPMT);
    public void onVideoStart(RTPDePacketizerMPEGTS rtDePacketizerMPEGTS);
    public void onAudioStart(RTPDePacketizerMPEGTS rtDePacketizerMPEGTS);
    public void onTimecodeReady(RTPDePacketizerMPEGTS rtDePacketizerMPEGTS);
  • Added RTPDePacketizerMPEGTS API to add and remove listeners:
    public void addListener(IRTPDePacketizerMPEGTSNotify listener)
    public boolean removeListener(IRTPDePacketizerMPEGTSNotify listener)
  • Added MPEG-TS depacketizer API for monitoring incoming data for a particular PID. This might be used to monitor SCTE-35 ad markers, KLV metadata, closed captioning data, ID3 metadata tags, and so on:
    • Three different callback interfaces based on the PID data format:
      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...)
    • RTPDePacketizerMPEGTS API for adding and removing monitors:
      public void clearPIDMonitorMap()
      public Map<Integer, PIDMonitorHolder> getPIDMonitorMap()
      public boolean pidMonitorEmpty()
      public PIDMonitorHolder getPIDMonitor(int PID)
      public void putPIDMonitorMap(int PID, IMPEG2UserMonitorPESNotify monitor)
      public void putPIDMonitorMap(int PID, IMPEG2UserMonitorSectionNotify monitor)
      public void putPIDMonitorMap(int PID, IMPEG2UserMonitorRawNotify monitor)
      public PIDMonitorHolder removePIDMonitorMap(int PID)
      public boolean containsPIDMonitorMap(int PID)
    • 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
  • Added additional 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()
  • Added default MPEG-TS PID monitor implementation for ad marker (SCTE-35) ingestion (com.wowza.wms.rtp.depacketizer.RTPDePacketizerMPEGTSMonitorCUE)
  • Added default MPEG-TS KLV monitor implementation for key length value (KLV) data ingestion (com.wowza.wms.rtp.depacketizer.RTPDePacketizerMPEGTSMonitorKLV) 

Security

  • Added support for multiple SSL certificates (Java KeyStores) per HostPort (TLS Server Name Identification (SNI) is required)
  • Fixed IP whitelisting/blacklisting for RTSP/RTMP authentication
  • Added HTTPProvider/Properties property "passwordFile" to allow alternative username/password file to be used 

General/Other

  • Added support for SNMP. Supported objects are: Server, VHost, Application, ApplicationInstance, Stream, and Client
  • Added support for WebSockets as part of an HTTPProvider
  • Improved live stream receiver to block against null packets
  • Improved H.264 PPS decoding to properly calculate display frame size based on aspect ratio (if calculation leads to width that's within round-off error, we use the original frame width)

REST API 

  • Fixed incorrect logging for OutgoingStreamConfig REST API call
  • Added REST API endpoints to list and purge items from MediaCache
  • Fixed REST API JSON error content type to be consistent with non-error response
  • Updated applications/live/instances/_definst_/streamrecorders REST API endpoint so the option parameter can also be the single keywords "append", "overwrite", or "version"