Wowza Streaming Engine 4.6.0 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.6.0 build 19395 released on November 15, 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.6.0

Detailed list of changes in Wowza Streaming Engine 4.6.0

New Features and Functionality in Wowza Streaming Engine 4.6.0


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

Wowza Player Integration with Wowza Streaming Engine Manager

Wowza™ Player is our new HTML5 player for Apple HLS video and audio streaming from Wowza Streaming Engine and Wowza Streaming Cloud. Wowza Player comes with a Player Builder that you can use to customize a player and generate HTML embed code. In Wowza Streaming Engine 4.6.0, you can use the new Wowza Player page in Wowza Streaming Engine Manager to launch and pre-populate Wowza Player Builder with a source stream URL that you create. 

Wowza Transcoder GPU Video Scaling and Load Balancing (CUDA)

By default in Wowza Transcoder, video scaling is done using CPU resources. Now in Wowza Streaming Engine 4.6.0, you can offload transcoder video scaling to NVIDIA CUDA-based GPUs. This reduces the overall CPU usage of a given set of transcoder sessions. CUDA scaling works on all NVIDIA CUDA cards that are Tesla technology or greater. For more information, see Template details - Scale.


Wowza Streaming Engine 4.6.0 also includes a new transcoder ITranscoderVideoLoadBalancer interface that enables you to balance NVIDIA CUDA accelerated transcoding across multiple GPUs. For more information, see How to load balance NVIDIA CUDA accelerated transcoding across GPUs.

MPEG-DASH Multi-Track Audio and Video

Wowza Streaming Engine 4.6.0 enables you to include multiple audio and video tracks in an MPEG-DASH presentation (MPD). Including multiple tracks lets viewers select between multiple languages or aspect ratios during stream playback. For more information, see How to use alternative audio or video tracks with MPEG-DASH streams.

New Options for Ingesting HTTP-Based Streams

Wowza Streaming Engine 4.6.0 has new MediaCaster types to enable live applications to ingest Apple HLS and MPEG-TS (TCP/IP) source streams and make them available to all player technologies supported by the Streaming Engine software. To learn how to set up live applications to ingest Apple HLS source streams (applehls MediaCaster), see How to publish and play a live stream (Apple HLS). To learn how to ingest MPEG-TS (TCP/IP) source streams (mpegtstcp MediaCaster), see How to publish and play a live stream (MPEG-TS over TCP/IP).

DVB Teletext Closed Captions

Wowza Streaming Engine 4.6.0 can ingest MPEG-TS DVB Teletext subtitle data in live streams as closed captions. The Teletext data is injected into the Transport Stream (TS) packets as onTextData AMF events and then translated to the supported closed-captioning formats for live stream playback. For more information, see How to ingest MPEG-TS DVB Teletext subtitle data for closed captioning.

Continuous Live Streaming for Facebook Stream Targets

In Wowza Streaming Engine 4.6.0, you can now configure your Facebook stream target to send a stream of unlimited length to Facebook. For more information, see "Create a stream target to send the stream to Facebook" in How to stream to Facebook Live using Wowza Streaming Engine.

Detailed list of changes in Wowza Streaming Engine 4.6.0


Changes (since 4.5.0.03 release)

  • Fixed Secure Token V2 to check stream name for RTMP requests after the initial hash check
  • Added support for relative media playlist paths in the Akamai HLS stream target. This is enabled by adding "http.relativePlaylists":"true" to the map file entry (default is false)
  • Added support to the Akamai HLS stream target for adding the EXT-X-ENDLIST tag to the end of the media playlist when the source times out or disconnects. This is enabled by adding "cupertino.addEndListOnDisconnect":"true" to the map file entry (default is false)
  • Fixed WebRTC DTLS negotiation issue with Mozilla Firefox browser that caused wrong cipher suite to be selected (SHA-384 was selected instead of SHA-265)
  • Changed subtitlelist chunk durations to exactly track AV duration
  • Fixed problem where it was possible for caption duration to not be trimmed correctly after chunk ended and subsequent trimming caption wasn't received yet
  • Fixed MPEG-DASH live streaming so that audio adaption sets for different languages are defined with the same group attribute value to indicate that they shouldn't be played together
  • Fixed RTSP multicast re-streaming .stream file parameters rtspMulticastServerPortVideo and rtspMulticastServerPortAudio so they correctly set the client_port in the SETUP command

Install/Update/Uninstall 

  • Fixed a permissions issue with the Wowza Streaming Engine software update mechanism. Unix installers weren't marking the reference file as 'execute' and the update tool was propagating these permissions to the Unix script files preventing them from executing
  • Changed name of the Monthly Subscription license to "Wowza Streaming Engine 4 Subscription Edition"

Wowza Streaming Engine Manager 

  • Enabled applehls and mpegtstcp MediaCaster configuration options in Wowza Streaming Engine Manager
  • Fixed XSS vulnerability in Wowza Streaming Engine Manager error handling
  • Fixed compatibility issue with manager and Java 8 u72, u91, u92 by upgrading internal version of JSP components
  • Fixed unauthorized creation and escalation of users in Wowza Streaming Engine Manager
  • Improved Wowza Streaming Engine Manager SMIL file editor to allow videoBitrate value up to 100Mbps
  • Fixed Stream Name Group manipulation in Wowza Streaming Engine Manager that was accidentally removing all except the last entry in the list of members when saving the updated Stream Name Group

Stream Targets (Push Publishing)

  • Fixed NPE in the HLS Push Publishing base class when the cupertinoMinPlaylistChunkCount was set higher than the cupertino.playlistCount (affects custom and Akamai HLS Push Publishing profiles)
  • Fixed Stream Target status issues in REST and Wowza Streaming Engine Manager Stream Targets page where initial startup of targets would show "Error" status. Targets now initially show "Starting" status until successful connection is made to destination (>> "Active") or until an actual error occurs (>> "Error"). HTTP targets still generally move straight to "Active"
  • Added Continuous Live Video support to Facebook Stream Target
  • Added support to store the user name associated with a Facebook Stream Target so it can be displayed without requiring the user to log in (Note: The user name is displayed if the Facebook Stream Target is created with Wowza Streaming Engine 4.5.0.02 or later; otherwise, "Unavailable" is displayed in place of the user name)
  • Implemented a window for Push Publishing to successfully connect to Facebook. If it doesn't complete within the window, it stops trying in order to not abuse Facebook APIs when something isn't configured correctly
  • Fixed support for the http.reuseSockets property in Push Publishing support for Akamai HLS
  • Fixed Push Publishing profiles to restore the disconnect() method to maintain backward compatibility with existing customer modules.
  • Fixed Facebook Stream Target issue where Facebook page tokens weren't properly encrypted before writing to disk, resulting in target token failures after the target was restarted
  • Fixed Facebook Stream Target issue where target would incorrectly be reported in an Error state with an invalid access token after a Facebook API request failed
  • Modified RTMP ConnectionFlashVersion reported to Akamai and Facebook (Example: "Wowza Streaming Engine/4.5")
  • Fixed Stream Targets reporting of "LiveStreamPacketizer is not set" so that it's not reported until the livepacketizer has had a chance to initialize (mainly an issue with transcoded streams being pushed to Akamai as HLS)
  • Fixed issues with Push Publishing to Akamai when needing to recover from the Akamai endpoint failing and then returning
  • Fixed memory leak in the (Push Publishing) Akamai HLS Stream Target, which was introduced in Wowza Streaming Engine 4.5.0
  • Fixed Stream Targets profiles for Shoutcast1, Shoutcast2, and Icecast2
  • Fixed Push Publishing encoding of the Apple HLS tag 'EXT-X-KEY' IV parameter, which was being quoted when it shouldn't have been
  • Fixed Push Publishing Apple HLS (cupertino) Stream Targets so that EXT-X-PROGRAM-DATE-TIME tags are properly supported
  • Fixed synchronization issue with controlling Push Publishing entries (start/stop/restart) that caused actions scheduled for applications and streams to be deleted without being acted on
  • Fixed a synchronization issue with an application's PushPublishMap.txt map file where quick, successive updates to the same map file wouldn't be detected by the ModulePushPublish module

Live Stream Transcoding and Transrating

  • Added Transcoder frame listener API ITranscoderVideoEncoderNotify2 to enable control of video keyframe insertion in resultant streams
  • Fixed Transcoder memory leak when using transparent graphic overlay images
  • Updated Transcoder VPX version to 1.6.0
  • Updated Transcoder VPX implementation to use shared libraries
  • Added new Transcoder VPX encoding parameters, deadline and cpu_usage
  • Fixed Transcoder HE-AAC codec config generation to more accurately reflect the presence of HE-AAC v1 and v2 encoding
  • Fixed Transcoder decoding issue with VP8/VP9 stream frame sizes not being set properly from source stream codec information
  • Updated Transcoder Core MainConcept SDK libraries to version 10.3
  • Updated Transcoder HEVC MainConcept SDK libraries to version 7.0
  • Updated Transcoder Windows Intel Media SDK version to 2016 R2 (7.0.0.358)
  • Added Transcoder logging for start and stop. Start logging includes sort buffer settings (enable, bufferSize, flushInterval)
  • Added PostProcess section to Transcoder templates to enable setting of sort buffer (enable, bufferSize, flushInterval)
  • Added CUDA accelerated video scaling to Transcoder
  • Added API and default implementation for load balancing CUDA accelerated encoding across multiple GPUs
  • Added Transcoder Decode/Audio/Parameters long parameter default.scaleChannels (0:do nothing, 2:force to stereo) which enables the AAC and MPEG-1 Layer 1-3 decoders to force a mono stream to stereo as part of decoding process (addresses the issue where source streams may switch between mono and stereo mid-stream)
  • Added new Transcoder hardware inspector
  • Fixed the POST method of the /v2/servers/{serverName}/vhosts/{vhostName}/applications/{appName}/transcoder/templates/{templateName} REST API, which wasn't processing the template contents properly and only creating an empty template
  • Fixed Transcoder issue with Quick Sync shared library path on Linux not respecting setting in [install-dir]/conf/Server.xml

Live Stream Recording

  • Fixed typo in LiveStreamRecord log entry when recordings are stopped to be consistent with other log entries
  • Added backBufferTime to the Live Stream Record REST API
  • Fixed Live Stream Record Manager API so that when all streams are to be recorded, each stream generates a separate output file containing the stream name instead of all using the name of the first source stream that starts recording
  • Added LiveStreamRecord property liveStreamRecordMinimumKeyFramesInPacketList, which will wait to start recording after at least two keyframes have been encountered. This is helpful when an encoder doesn't send initial audio and video packets when publishing starts (default is 2)
  • Fixed LiveStreamRecord issue where recordings weren't closed correctly during a server restart

Live Stream DVR Playback 

  • Fixed nDVR edge problem where streams with non-default application instances failed to retrieve chunks from MediaCache

Closed Captions 

  • Added support for MPEG-TS DVB Teletext subtitle data for closed captioning
  • Changed default behavior of WebVTT live captions to not send nbsp (non-breaking space) in empty subtitle chunk (The iOS subtitling system no longer requires this)
  • Fixed support for "sidecar" WebVTT caption files in on-demand MPEG-DASH streaming (preview feature)
  • Fixed problem where double-byte caption characters aren't correctly sent from origin to edge
  • Fixed CEA-608 caption ingestion: When in Roll-up mode and converter receives a redundant Roll-up command, it's ignored 

Media Cache 

  • Updated MediaCache functionality:
    • Fixed autoconfiguration to correctly allocate memory in low memory/CPU core situations
    • Added CacheStoreListenerClassList and CacheSourceListenerClassList to main MediaCache configuration section
    • Updated IMediaCacheStoreItemListener and IMediaCacheSourceItemListener for public use
    • Added removeStore and removeSource to Java API so stores and sources can be removed dynamically (addStore and addSource are already available)

  MediaCasters, Stream Files, and Startup Streams

  • Removed the logic that required the PID for custom MPEG-TS monitoring to be listed in the PMT for the program being ingested
  • Improved MPEG-TS listener interface to enable adding additional PIDs and descriptors to PAT/PMT (IRTPPacketizerMPEGTSPacketNotify2)
  • Improved MPEG-TS addData method to enable adding of RAW PID data already formatted in MPEG-TS 188-byte packets
  • Fixed MPEG-TS SCTE-35 listener implementation to handle splice descriptors properly
  • Fixed notifications for AppleHLS MediaCaster
  • Added MediaCaster type mpegtstcp to enable MPEG-TS over TCP stream ingestion
  • Added MediaCaster type applehls to enable Apple HLS stream ingestion
  • Enabled applehls and mpegtstcp MediaCaster configuration options in Wowza Streaming Engine Manager
  • Fixed deadlock with application shutdown when RTP MediaCaster streams are transcoded
  • Added receiveAudio, receiveVideo, setBufferLength, and makeCall RTMP messages for liverepeater MediaCaster to support playback from FreeSwitch conferencing software

WebRTC (Preview)

  • Added WebRTC context to VHost (no longer need to add WebRTCVHostListener to conf/Server.xml):
    • WebRTCContext IVHost.getWebRTCContext();
  • Improved WebRTC shutdown. You can now shutdown from either WebRTCContext or RTPContext:
    • vhost.getWebRTCContext().shutdownSession(sessionId);
    • vhost.getRTPContext().shutdownSession(sessionId);
  • Added RTP API for getting WebRTC session:
    • WebRTCSession rtpSession.getWebRTCSession();
  • Added RTP stream API to determine if RTP stream is from WebRTC session:
    • Boolean RTPStream.isWebRTC();
    • Boolean RTPSession.isWebRTC();
  • Enabled rejecting WebRTC session in onRTPSessionCreate by calling rtpSession.rejectSession()
  • Improved WebRTC stream name handling to properly extract query string and add to RTPStream API
  • Updated WebRTC HTTP Provider and HTML examples to use WebSockets for SDP exchange
  • Improved H.264 over RTP playback to make it compatible with WebRTC streaming
  • Added support for live stream repeater with WebRTC
  • Reworked WebRTC to use Java NIO for UDP delivery
  • Removed WebRTCContext call to get the context from VHost (not needed anymore, API available from IVHost)
  • Improved WebRTC to filter out playback of incompatible codecs:
    • If both codecs are incompatible, streaming ends and an error is reported to the player
    • If either audio or video is incompatible, a warning is logged and the incompatible track is dropped
  • Added WebRTC application context string settings to control the list of valid WebRTC playback codecs. Application-level properties:
    • webrtcPlayCodecsAudio: comma-delimited list of audio codecs (defaults: vorbis, opus, pcma, pcmu)
    • webrtcPlayCodecsVideo: comma-delimited list of video codecs (defaults: vpx, h264)
  • Improved WebRTC playback to warn when H.264 profile is greater than baseline
  • Created application-level WebRTC context accessible from IApplicationInstance:
    • IApplicationInstance.getWebRTCApplicationContext()
  • Moved the following WebRTC settings from VHost context to application context (can be set in [install-dir]/conf/[application]/Application.xml):
    • webrtcPreferredCodecsAudio
    • webrtcPreferredCodecsVideo
    • webrtcUDPBindAddress
    • webrtcIceCandidateIpAddresses
  • Added WebRTC application context integer settings to control the playback timeout that's used to look for audio and video in a WebRTC stream. Application-level properties:
    • webrtcPlayTimeoutStream: The timeout used when trying to play a non-repeater stream
    • webrtcPlayTimeoutRepeater: The timeout used when trying to play a repeater stream
  • Added WebRTC application context Boolean settings to control publish, playback, and query access over WebRTC WebSocket HTTP Provider. Application level properties:
    • webrtcEnablePublish: Enables publishing using WebRTC
    • webrtcEnablePlay: Enables playback using WebRTC
    • webrtcEnableQuery: Enables the query commands (needed for chat applications to get available published streams)
  • Added WebRTC application context Boolean setting debugLog that turns on/off debug logging of WebRTC SDP exchange at application level (default is false, application-level property name is webrtcDebugLog)
  • Added API to HTTPWebRTCExchangeSessionInfo to enable JSON request authentication. Can control playback, publish, and query. Just need to subclass and override the following method:
    • void authenticateRequest(CommandContext commandContext, CommandControl commandControl)
  • Added IApplicationInstance methods to get WebRTC session information:
    • List<RTPSession> getWebRTCSessions()
    • List<RTPSession> getWebRTCSessions(String streamName)
    • int getWebRTCSessionCount()
    • int getWebRTCSessionCount(String streamName)
    • Map<String, Integer> getWebRTCSessionCountsByName()
  • Added WebRTC session information to HTTP Providers HTTPServerInfoXML and HTTPConnectionCountsXML
  • Added userData to WebRTC example HTML/Javascript JSON data
  • Improved WebRTC application context startup to log warning for TCP ICE candidates that are defined for secure/SSL protected ports or ports that don't exist
  • Improved WebRTC command processing so that RTPSession is properly populated with remote IP address
  • Improved logging to log WebRTC sessions with proper WebRTC protocol and category
  • Added user properties to WebSocketSession:
    • WMSProperties IWebSocketSession.getProperties()
  • Added API to track remote IP address and host used for WebSocket request:
    • String IWebSocketSession.getRemoteIpAddress();
    • void IWebSocketSession.setRemoteIpAddress(String remoteIpAddress);
    • String IWebSocketSession.getRemoteHost();
    • void IWebSocketSession.setRemoteHost(String remoteHost);

HTTP Streaming (Adobe HDS - SanJose) 

  • Improved Adobe HDS (sanjose) live stream packetizer to enable repeater chunk count to equal playlist chunk count by setting repeater count to -1. Set default to -1 (LiveStreamPacketizers property sanjoseRepeaterChunkCount)
  • Fixed Adobe HDS streaming issue that caused playstart/playduration to be ignored if set in onHTTPSessionCreate 

HTTP Streaming (Apple HLS - Cupertino)

  • Improved Apple HLS (cupertino) live stream packetizer to enable repeater chunk count to equal playlist chunk count by setting repeater count to -1. Set default to -1 (LiveStreamPacketizers property cupertinoPlaylistChunkCount)
  • Fixed Apple HLS playback issue with audio-only on-demand files when using the cupertinoPacketizeAllStreamsAsTS property. We weren't encoding the Program Clock Reference (PCR) when there was only audio and we were packetizing the content in MPEG-TS chunks (Apple products didn't seem to mind the absence, but VLC and some STBs did)
  • Fixed Apple HLS packetization of live audio-only streams where the PCR wasn't set in the TS chunks when the "cupertinoPacketizeAllStreamsAsTS" property was enabled
  • Fixed the videoOnly SMIL file parameter support for on-demand files and Apple HLS (cupertino) playback requests. When videoOnly rendition requests were made, the default audio codec ID wasn't cleared correctly, which caused an audio track entry in the media segment PMT to be created
  • Fixed Apple HLS (cupertino) exception when using average bitrate in SMIL file
  • Removed PlayReady DRM information that was inadvertently being added to the PlayReady header for Apple HLS and MPEG-DASH

HTTP Streaming (MPEG-DASH)

  • Fixed MPEG-DASH adaptive bitrate playback for content that doesn't match keyframe entry counts
  • Fixed audio synchronization for MPEG-DASH when using begin SMIL option and audio-only files
  • Modified MPEG-DASH live streaming to keep the availabilityStartTime (AST) static throughout a live stream duration, except when a large time jump is detected in the stream. The default jump trigger size is: "+/-.5 * chunkDurationTarget", resulting in a 5-second jump trigger. This can be overridden with the mpegDashMaxStreamStartDifferential LiveStreamPacketizer property (units milliseconds)
  • Fixed generation of MPEG-DASH MPDs that contain both MP4 and WebM container renditions
  • Improved MPEG-DASH live stream packetizer so that it can't packetize a stream of incompatible codecs (example: H.264 and OPUS)
  • Fixed MPEG-DASH live streaming to eliminate rounding errors that made it appear that there were gaps in AAC audio streams
  • Fixed the "mpegdashPlaylistHostDomain" property support, which wasn't being honored
  • Changed MPEG-DASH on-demand and live streaming so that audio and video renditions with different container types (example: mp4, webm) and/or codec families (example: avc, hevc) are separated into different adaption sets
  • Disabled MPEG-DASH warning logs that get noisy when streams are received from encoders with inaccurate clocks
  • Fixed MPEG-DASH MPD request responses when mpegdashHttpRedirectEnabled is enabled so that query parameters provided in the original request are copied to the location URL provided in the response header
  • Improved MPEG-DASH live stream packetizer to enable repeater chunk count to equal playlist chunk count by setting repeater count to -1. Set default to -1 (LiveStreamPacketizers property mpegdashRepeaterChunkCount)
  • Added MPEG-DASH support for multi-language streaming using SMIL or AMLST, including support for MPEG-DASH <role> element
  • Fixed MPEG-DASH so that display width and height values are used to calculate aspect ratio (par) instead of frame width and height
  • Fixed MPEG-DASH on-demand issue where calculated display width/height values were inserted into MP4 avc1 and encv boxes instead of frame width/height values
  • Fixed MPEG-DASH issue where a "non-standard" 2.40:1 (12:5) aspect ratio from multiple renditions specified in a SMIL file triggered creation of separate video adaption sets in the MPD (2.40:1 is now supported and is reported as "12:5" in the MPD)
  • Added support for the "aspectRatio" param in SMIL/AMLST processing. For MPEG-DASH, this forces the rendition to be placed in a video adaption set with that specific "par" (picture aspect ratio) attribute value, overriding the calculated aspect ratio
  • Modified MPEG-DASH to use a looser method for grouping video renditions into the same adaption set. This allows renditions with calculated aspect ratios that are only slightly off (such as 2.39 (688x288) and 2.41 (1040x432)) to be grouped by rounding to the closest .1 for comparison
  • Changed MPEG-DASH live and on-demand streaming so that the <BaseURL> tag isn't included in MPDs by default, but added Boolean property mpegdashAddMPDSegmentBaseURL (/Root/Application) to trigger insertion of <BaseURL>
  • Fixed MPEG-DASH streaming so that the <BaseURL> tag is always excluded for Live HTTP Origin applications
  • Fixed MPEG-DASH live streaming issue where the video AdaptionSet@par attribute was always reported as "1:1" for live streams
  • Improved the MPD@availabilityStartTime generation accuracy in live MPEG-DASH streams
  • Fixed MPEG-Dash SMIL file processing of sources with source stream query parameters, which were being removed when they shouldn't have been
  • Removed PlayReady DRM information that was inadvertently being added to the PlayReady header for MPEG-DASH 

HTTP Streaming (Smooth)

  • Fixed Smooth Streaming issue where httpSession wasn't being passed into alias resolve system on a manifest request
  • Fixed Smooth Streaming audio-only playstart parameter to correctly start at the specified position
  • Added LiveStreamPacketizers/Properties integer property smoothStreamingPlayReadyEmptyLicenseSize to control PlayReady license data padding size for live Smooth Streaming (default is 10000)
  • Added HTTPStreamer/Properties integer property smoothStreamingPlayReadyEmptyLicenseSize to control PlayReady license data padding size for on-demand Smooth Streaming (default is 10000)
  • Fixed audio synchronization for Smooth Streaming when using begin SMIL option and audio-only files

HTTP Streaming (General)

  • Added [protocol]CORSHeadersSetMain and [protocol]CORSHeadersSetAge properties to allow default CORS headers to be changed

REST API

  • Added REST API authentication methods remotehttp and digestfile
  • Updated smilfiles REST API endpoint to support systemBitrate parameter
  • Removed spurious logging messages when managing SMIL files via REST API endpoints

General/Other

  • Fixed occasional NPE on shutdown of StreamDemoPublisher
  • Added authentication method admin-file-digest to support HTTP Provider authentication with digest encoded passwords
  • Fixed default content type when no HTTP Provider matches as defined in VHost.xml
  • Fixed SNMP properties to reset to defaults if incorrect types/values are used
  • Added VHost-level configuration for OPTIONS requests
  • Improved PacketFragmentList (low-level class) to fix issues and improve synchronization
  • Fixed overflow problem when large bitrates are used in SMIL files with system-bitrate parameter
  • Fixed HTTP Provider property passwordFile to only affect the specific HTTP Provider it's set for
  • Improved the live receiver packet counter so that packets are only counted when they're added to the main packet list
  • Added API to get the packet counts in a single call:
    • IMediaStream.getPublishFrameCounts(long counts[]);