Wowza Streaming Engine 4.0.4 Release Notes

Important: A newer version of Wowza Streaming Engine is available. For more information, see Latest software updates for Wowza Streaming Engine.

Version: Wowza Streaming Engine™ 4.0.4 build 11775 released on June 17, 2014.
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.


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

New Features and Functionality in Wowza Streaming Engine 4.0.4

More Integrated Encoders

Wowza Streaming Engine 4.0.4 features an enhanced lineup of integrated encoding options that simplify live streaming workflows. The Incoming Publishers page for live applications in Wowza Streaming Engine Manager enables you to deliver connection settings for the application to a variety of popular encoders to configure the encoder automatically.

Wowza Streaming Engine 4.0 and later supports integrated configuration of Wowza™ GoCoder™, Wowza's encoding app for Apple iOS and Android mobile devices. If you're viewing the Incoming Publishers page on a device that has the app, you can click an Auto-configure GoCoder button to automatically configure the app to publish a stream to the application. You can also send the configuration settings to an email app on the device.

Integrated encoder configuration is added to Wowza Streaming Engine 4.0.4 for the following encoders provided by Works With Wowza partners:
  • Hauppauge StreamEez-Pro. Create connection settings in a configuration file and then load the file in the StreamEez-Pro Dashboard to automatically configure the StreamEez-Pro system with the settings.
  • Matrox Monarch HD. Create connection settings in a configuration file and then load the file in the Stream Settings page in the web-based Monarch Command Center to automatically configure a Monarch HD video streaming and recording appliance with the settings (Monarch firmware version 2.0 or later required).
  • NewTek TriCaster. Connect to the Streaming Engine Incoming Publishers page in the TriCaster Configure Stream Connection panel to create connection settings in a configuration file and then load the file to automatically configure a TriCaster hardware encoder with the settings.
  • Teradek Cube. Create connection settings in a shortened configuration URL and then enter the URL in the Cube Dashboard Stream Settings page to automatically load a Cube hardware encoder with the settings.
Many other encoders can connect to live Streaming Engine applications, but their settings must be configured manually.

For additional details, see How to connect a live source to Wowza Streaming Engine.

Detailed list of changes in Wowza Streaming Engine 4.0.4

  • Fixed live webvtt captions in HTTP Origin mode. Was not returning captions in subtitlechunk
  • Fixed transcoder Intel Quick Sync DRM (Direct Rendering Manager) access on Linux
  • Updated transcoder Quick Sync for Linux support to "Intel Media SDK 2014 Linux Servers" (
  • Removed space in CODECS parameter in Apple HLS (cupertino) playlist.m3u8 responses (fixes streaming on some non-Apple devices)
  • Updated transcoder behind filter to be more forgiving so that it does not skip frames as early when it gets behind. Changed the following values (milliseconds):
    • behindVideoSkip1Frame from 1500 to 2500
    • behindVideoSkip2Frame from 2500 to 3500
    • behindVideoSkip4Frame from 3500 to 5000
    • behindVideoKeyOnly from 4000 to 6500
    • behindVideoOff from 6000 to 8000
  • Updated transcoder behind filter to average over 10 seconds sampling every 1 second (previously averaged over 5 seconds)
  • Added transcoder decode frame size limits to avoid scaling issues with potentially corrupt streams (defaults are min:32x32 max:7680x4320 (8k))
  • Added transcoder template Decode/Properties integer properties to control the decoding frame size limits (0 turns off the limit):
    • decoderFrameSizeWidthMax (default 7680)
    • decoderFrameSizeWidthMin (default 32)
    • decoderFrameSizeHeightMax (default 4320)
    • decoderFrameSizeHeightMin (default 32)
  • Increased the live stream packetizer stream timeout property (streamTimeout) default from 12 seconds to 40 seconds (40000 ms) to ensure stream is available for HTTP streaming after a source stream disconnects
  • Improved SEI message extraction to make it more fault tolerant to fix array out of bounds error
  • Improved fixH264VideoNALLenStartcodeMix interpretation to include SEI NAL units
  • Fixed RTP MediaCaster thread locking issue with application instance shutdown
  • Added boolean Streams/Properties property debugVideoH264NALUnits to turn on/off debug logging of H.264 NAL units of incoming live streams (off by default)
  • Changed the default DatagramConfiguration/Incoming ReceiveBufferSize from 1024000 to 2048000 bytes to make it more tolerant to garbage collection pauses and higher bitrate incoming streams
  • Changed the default DatagramConfiguration/Outgoing ReceiveBufferSize from 65000 to 256000 bytes to make it work better with higher bitrate outgoing streams
  • Added support for the "timeShiftBufferDepth" field in live MPEG-DASH manifests.
  • Added the "mpegdashMinimumUpdatePeriod" property to allow the user to define a specific minimumUpdatePeriod to use in live MPEG-DASH manifests, overriding the default calculation
  • Fixed a bug where a request for an audio-only live MPEG-DASH stream would cause an exception and a 404 status return
  • Fixed problem with live cupertino streaming calculateChunkIDBasedOnTimecode to be sure we do not get duplicate chunk ids in this mode
  • Fixed a MPEG-DASH manifest bug that was introduced in build 11563 where the MPD@timeShiftBufferDepth attribute was added with a bad ">" tag enclosure at the end of the line, truncating the rest of the attributes
  • Fixed transcoder timecode issue with HE-AAC streams (timecodes were at twice the rate)
  • Improved cupertino (Apple HLS) audio-only live stream packetizer to break chunks on timecode boundaries similar to how audio/video streams work
  • Improved MPEG Transport Video Continuity Count error detection. This specifically helps when mpegtsVideoIsAligned=false
  • Improved transoder decoder startup to re-try to decode codec config packet on failure
  • Updated transcoder H.264 default encoder to automatically adjust encoding settings to conform to profile limits
  • Added mpegdashStrictSpecComplianceForAST property for enabling strict spec compliance of the segment availability parameters provided in the live MPEG-DASH MPDs. Should not be enabled when using dash.js-based players such as the Wowza Streaming Engine Manager test DASH player
  • Split RTMPT and HTTP Server response headers to use different default values
  • Added IServer level API to set RTMPT and HTTP Server header values:
    • IServer.getRTMPTHeaderServer();
    • IServer.setRTMPTHeaderServer(String rtmptHeaderServer);
    • IServer.getHTTPHeaderServer();
    • IServer.setHTTPHeaderServer(String httpHeaderServer);
  • Added Server/Properties string properties rtmptHeaderServer and httpHeaderServer to set default Server response headers
  • Added HTTPStreamer/Properties integer property cupertinoPlaylistProgramId to control the cupertino (Apple HLS) PROGRAM-ID displayed in the playlist (default is 1, if set to -1 PROGRAM-ID will be removed) (PROGRAM-ID has been deprecated in more recent Apple HLS specifications)
  • Fixed transcoder so HE-AAC streams are properly marked with object type 5 (mp4a.40.5)
  • Improved transcoder default H.264 encoder settings per MainConcept recommendation
  • Fixed the case where in Wowza Streaming Engine Manager, the transcoder was disabled if the user enabled the transcoder, then went into transcoder settings and selected "Save"
  • Fixed issue where onCaption CC conversion was not turned on when WebVTT mode was set to false
  • Improved logic for detecting what type of closed caption ingest data to expect
  • Improved transcoder on decode codec config failure to re-create decoder from scratch
  • Fixed potential HTTP Session recycling issue by ensuring the recycled session is not in the process of shutting down
  • Improved nDVR audio-only live stream packetizer to break chunks on timecode boundaries similar to how audio/video streams work
  • Added support to Apple HLS (cupertino) live stream packetizer to provide a IHTTPStreamerCupertinoLiveStreamPacketizerChunkIdHandler class to control how chunks are numbered
  • LiveStreamPacketizerCupertino.setChunkIdHandler(IHTTPStreamerCupertinoLiveStreamPacketizerChunkIdHan dler chunkIdHandler)
  • Added LiveStreamPacketizers/Properties string property cupertinoChunkIdHandlerClass to specify full Java path to a class that implements IHTTPStreamerCupertinoLiveStreamPacketizerChunkIdHandler to control how cupertino chunks are numbered
  • Added IHTTPStreamerCupertinoLiveStreamPacketizerChunkIdHandler interface to control how cupertino chunks are numbered
    • void init(LiveStreamPacketizerCupertino liveStreamPacketizer);
    • long onAssignChunkId(HTTPStreamerCupertinoLiveStreamPacketizerChunkIdContext chunkIdContext);
  • Fixed several small issues with Apple HLS (cupertino) ID3 tag serialization and added support for TXXX and WXXX tags
  • Improved Apple HLS (cupertino) ID3 tag system to maintain tag order and allow more than one tag of the same type
  • Fixed PushPublishing bug that was keeping Apple HLS (cupertino) ABR playlists from being generated when a ABR group was defined in the Push Publish map file for a set of Apple HLS source streams
  • Added ability to specify cupertinoTag.CLOSED-CAPTIONS to EXT-X-STREAM-INF items in a SMIL file for Apple HLS streaming (cupertino)
  • Fixed HLS WebVTT caption time format to only show 2 hour digits unless more are needed. This caused captions to be ignored when casting some players to ChromeCast
    • Added ability to low level push publishing API to set the local bind address to control which NIC is used for TCP connection
  • PushPublishRTMP.setBindAddress(String bindAddress)
  • Added support for the "localBindAddress" configuration item in the PushPublish map file, which allows the user to specify which network interface should be used per RTMP output stream connection. Useful on installations with multiple NICs
  • Updated transcoder to MainConcept SDK version 9.8.0
  • Added transcoder decoding parameters for MainConcept H.264, MP2 and MP4 decoders:
    • mainconcept.optCPUNum
    • mainconcept.optSMPMode
    • mainconcept.optACCMode
  • Fixed problem flushing onCaption CEA-608 style captions. Behavior was that caption appeared delayed from expected time
  • Fixed an issue with transcoder MainConcept H.264, MP2 and MP4 decoder that was causing corrupt frames on specific hardware platforms (set default value for CPU_NUM to 4)
  • Fixed issue where the manager would not allow a multi-line license key to be added
  • Fixed DVR edge receiver to not reset itself when origin stream is unpublished. This fixes behavior where unable to play DVR from edge for a period after encoder disconnects from origin
  • Improved logic to pull captions from 608 decoder as close to display time as possible
  • Improved transcoder MainConcept default decoder initialization for MP2, MP4 and H.264
  • Added stream context to CEA-608 debug level logging
  • Added integer HTTPStreamers/Properties property to control the maximum number of HTTP sessions that can be associated with a single TCP session (fixes file descriptor leak in the case where a single TCP session make many requests for the manifest over a single TCP connection, default is zero which is no limit):
    • httpMaxHTTPSessionsPerTCPSession
    • cupertinoMaxHTTPSessionsPerTCPSession
    • mpegdashMaxHTTPSessionsPerTCPSession
    • sanjoseMaxHTTPSessionsPerTCPSession
    • smoothMaxHTTPSessionsPerTCPSession
  • Added additional logging to transcoder to log changes in decoded frame size
  • Improved transcoder video frame buffer to properly deal with NULL frame allocations
  • Fixed playback of DASH ABR from edge servers using smil files so that a request to the edge initiates streaming of all associated streams from the origin
  • Fixed (service script) referencing old version of XStream, preventing license update server from working correctly when using this script to launch Wowza Streaming Engine Manager and entering a bad license key
  • Lowered tolerance of fragment duration grouping nDVR HDS. Reduces buffering in OSMF player
  • Added boolean HTTPStreamers/Properties property smoothRespondImmediatelyOnReadAheadFragmentNotReady, that when true, the smooth streaming adapter will return 412 HTTP result immediately if fragment is not ready but it in read ahead list, if false will wait for 12 seconds for fragment to be available (default is false)
  • Added integer HTTPStreamers/Properties property smoothReadAheadFragmentNotReadyStatus that controls the HTTP status returned in above condition (default is 412)
  • Added checking in transcoder frame size calculations to be sure frame width and frame height are not less than 4 or greater than an 8k video frame
  • Added boolean Transcoder/Properties useVHostThreadPool to control which thread pool mechanism is used for transcoder worker threads (default is false which uses single thread pool mechanism)
  • Fixed Push Publishing so that an RTMP publish session is properly closed when the associated source stream is disconnected, in particular for the case where the RTMP Session is in a reconnection loop
  • Fixed an NPE when trying to pass thru AC3 audio using Push Publishing
  • Fixed AC3 pass thru support for Push Publishing
  • Fixed transcoder issue on Linux that lead to transcoding threads hanging on startup
  • Changed Push Publishing version string to remove the duplicated version info at the end of the string now that it is built in (long string may have been causing issues with pushing to Akamai)
  • Rebuilt transcoder libraries on Linux
  • Added workaround for Push Publishing issue where on some systems a network outage results in the server not being able to reconnect some output RTMP streams due to persistent errors resolving the hostname.
  • Added Boolean LiveStreamPacketizers/Properties property cupertinoAlwaysSendZeroPacketLen that helps players other than the IOS quicktime player decode high bitrate streams (with frames larger than 32K) when streaming Apple HLS. This will prevent video frames from being sent with multiple PES headers and the PES packet length will always be set to "zero". The default value is false
  • Increased the maximum video frame size before breaking frames into multiple PES frames for cupertino live stream packitizer from 32725 to 65477 bytes to improve decoding by non IOS devices on high bitrate streams
  • Added support for cupertinoAlwaysSendZeroPacketLen Cupertino live stream packetizer property in the Wowza Streaming Engine Manager
  • Fixed DVR UTC playlist delegate to use format yyyyMMddHHmmss instead of yyyy-MM-dd-HH:mm:ss, which was not getting properly encoded and parsed in chunklists and media lists due to the use of dashes and colons
  • Added log warning in DVR UTC playlist delegate if format contains colons, dashes or underscores
  • Fixed the Push Publishing Akamai-Cupertino profile so that adaptive group playlists will still be generated and pushed to Akamai even when the source and destination stream names don't match for a stream entry in the map file.
  • Fixed Apple HLS SAMPLE-AES encryption method to properly encrypt AC-3 pass through streams for both VOD and live
  • Fixed issue where DVR would fail to resume recording in some cases when ingest stream connection went away for a period of time
  • Downgraded transcoder scaler library from 9.8.0 to 9.5.0 to avoid threading issue
  • Modified CrontabEvent debug date string to include milliseconds
  • Modified LiveStreamRecordFLV and LiveStreamRecordMP4 to print out the current time when file is segmented occurs and debug is enabled
  • Fixed NPE when decoding CEA-608 captions. Only occurs when live stream starts in middle of CEA-608 command sequence and first command happens to be a backspace
  • Fixed MPEG DASH MPD generation to guarantee that a unique id will be provided for all <Representation> elements in the manifest, per the DASH spec
  • Fixed PushPublishing 4.0 "rtmp-limelight" profile so that when the "application" config item is provided for a stream in the PushPublish map file, that app name is used in the Limelight ingest connection URL *instead of* the "userName"
  • Fixed a bug where you could not click "Connect" on an SDP file from the Wowza Streaming Engine Manager and have the operation complete successfully
  • Fixed an exception that occurred during MPEG DASH live stream packetization when the codecs of both the audio and the video are unsupported
  • Modified MPEG-DASH live MPD generation so that MPD@minimumUpdatePeriod is set to the offset between now and the time at which the next chunk should be available, such that the player could re-request the MPD at that point to see the new chunk
  • Modified the network interface selected for validating the REST API started to be the loopback interface when the REST Interface is set to bind on all addresses. This should improve startup performance on EC2 instances where the internal 10.x IP address was being used incorrectly, causing a long delay in startup of the Streaming Engine server while the connection timed out