Wowza Streaming Engine 4.0.1 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.1 build 10615 released on March 7, 2014.
 
Notes:

Contents


New Features and Functionality in Wowza Streaming Engine 4
Changes in Wowza Streaming Engine 4.0.1
Changes in Wowza Streaming Engine 4.0.0

New Features and Functionality in Wowza Streaming Engine 4


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

Wowza Streaming Engine Manager

Wowza Streaming Engine Manager enables you to easily configure, manage, and monitor the Wowza Streaming Engine software from a web browser on your computer, tablet, or phone. Although programmatic and command-line configuration and management of Wowza Streaming Engine is still available, the new browser-based manager offers the following key benefits that enable publishers with a diverse range of technical abilities to have greater control and confidence when streaming video:
 
  • Create live and video on demand (VOD) streaming applications.
  • Configure streams to start automatically when the server starts.
  • Create and manage SMIL files for adaptive bitrate streaming.
  • Manage IP address/port-based virtual hosting environments.
  • Configure and manage user name/password authentication when publishing a stream from RTMP/RTSP-based encoders to the Streaming Engine.
  • Manage integrated security options for client publishing and playback.
  • Replace complex stream names by configuring stream files and assigning aliases.
  • Instantly scale VOD streaming content using built-in Media Cache technology and live streaming content by configuring live stream repeater (origin/edge) technology.
  • Record incoming streams for later on-demand playback.
  • Test playback from applications or preview and monitor streams using built-in test players.
  • Monitor Streaming Engine CPU, memory, Java heap, and disk usage, and monitor incoming and outgoing connections, network throughput, and uptime at server, virtual host, and application levels.
  • Secure log-in to manage license keys for the Streaming Engine software or to set administrator/read-only permissions.
  • Administrator-level configuration of advanced server-level and application-level properties and custom property settings.
  • Leverage the built-in security features in Wowza Streaming Engine for easier and faster implementation of content security options.

MPEG-DASH

Wowza™ actively works with other industry leaders to ensure its server software supports the MPEG-DASH standard (ISO/IEC 23009-1) that's intended to streamline video delivery to any device. In general, DASH streaming is similar to proprietary adaptive streaming technologies such as Apple HTTP Live Streaming (Apple HLS), Adobe HTTP Dynamic Streaming (Adobe HDS), and Microsoft Smooth Streaming. MPEG-DASH support in Wowza Streaming Engine includes:
 
  • Deliver audio-only or video-only DASH streams.
  • Deliver audio DASH streams that use the Dolby Digital Plus (Enhanced AC-3 or E-AC-3) audio codec.
  • Deliver VOD and live DASH streams when using Wowza media servers in an origin/edge configuration.
  • Protect VOD and live DASH streams using Common Encryption (CENC).
  • Play on DASH-AVC/264-compatible players.

Media Cache

Media Cache technology is a read-through caching mechanism that enables scaling of VOD streams. Available as an AddOn for earlier versions of the Wowza media server software, it's built-in with Wowza Streaming Engine and can be configured in Wowza Streaming Engine Manager. For more information, see How to scale video on demand streaming with Media Cache.

Push Publishing

Push Publishing AddOn technology for earlier versions of Wowza media server software is built in with Wowza Streaming Engine. It enables streams to be pushed from the server to downstream Wowza media servers running Wowza Media Server 3.5 (or later) and Wowza Streaming Engine using the WOWZ™ protocol (Wowza messaging protocol). It also enables streams to be pushed from the server to downstream Wowza media servers running any Wowza Media Server software version, Adobe Media Servers, and Content Delivery Networks (CDNs) using Real Time Messaging Protocol (RTMP), Real-time Transport Protocol (RTP), and MPEG Transport Stream Protocol (MPEG-TS). For more information, see How to push streams to CDNs and other services.

New and Enhanced Performance Features

Wowza Streaming Engine includes significant new performance capabilities, making it the software of choice for organizations wanting to take full advantage of the growing power of video and audio streaming. Improvements in Wowza Streaming Engine 4.0 include:
 
  • Automated tuning of performance settings for Java heap size, garbage collection (GC), thread pool sizes, and thread allocation for the server and virtual hosts (VHosts) in development and production environments enables the best possible performance out of existing hardware without manual intervention. You can adjust any of these settings in Wowza Streaming Engine Manager.
  • Support for version 3 of the NVIDIA NVENC SDK enables server resources to be used more efficiently when using Wowza Transcoder AddOn to transcode video on 64-bit Windows and Linux operating systems.
  • Support for the Intel Media SDK 2013 enables accelerated video processing without a separate GPU card when using Wowza Transcoder AddOn to transcode video on 64-bit Windows and Linux operating systems. It also enables the transcoder to take advantage of the upcoming 4th-generation Intel Core ("Haswell") processors.

Changes in Wowza Streaming Engine 4.0.1


  • Added License key validation in Wowza Streaming Engine Manager to prevent Wowza Media Server 3 keys being entered in a Wowza Streaming Engine 4 installation
  • Added Streaming Engine and Streaming Manager support for MPEG-DASH packetization properties: mpegdashChunkDurationTarget, mpegdashMaxChunkCount, mpegdashPlaylistChunkCount, and mpegdashRepeaterChunkCount
  • Fixed an issue where Media Cache sources was storing TTL data as seconds instead of milliseconds
  • Turned off REST API for Central Configuration AddOn
  • Fixed incorrect usage of property cupertinoVODCaptionsUseWebVTT for live WebVTT CC when using smil or amlst. Now correctly uses cupertinoLiveCaptionsUseWebVTT
  • Fixed NPE when inserting webVTT captions using amlst if media list does not contain properties
  • Removed PlayReady DRM info that was inadvertently being added to the PlayReady header for Apple HLS and MPEG-DASH
  • Improved ApplicationInstance.disconnectAllClients to shutdown HTTP sessions as well
  • Changed nDVR playlist delegate behavior. If delegate property is unspecified, default to standard start-duration behavior
  • Fixed VHost REST API not returning proper SSLEnabled value for Hostports
  • Added support for Stats configuration from Central Configuration AddOn when configured
  • Fixed an issue where module LimitPublishedStreamBandwidth was creating invalid XML by duplicating the <Name> field
  • Updated error messages for login errors
  • Modified the add stream file dialog to include the URI since it is a required field of a .stream file
  • Added debug logging around authentication
  • Fixed issue where user could override locale with query params or launch parameters. "en" is now forced
  • Cleaned up error logic when viewing incoming streams for an application on a stopped Vhost
  • Fixed chart tooltips to not be clipped at the right edge of the browser. Also restyled the tooltips so they stand out better against the graphs
  • Fixed startup exception when running manager and server behind authenticating proxy
  • Disabled unused port 8009 in Engine Manager

Changes in Wowza Streaming Engine 4.0.0


Core Changes

  • Now compiling server using Java 1.6
  • Moved many of the XML configuration files into Java resources
  • Updated Joda time from joda-time-2.1.jar to joda-time-2.3.jar
  • Updated BouncyCastle Encryption Library from bcprov-ext-jdk15on-147.jar to bcprov-jdk15on-149.jar
  • Added RTP/Properties boolean properties to enable refusal of incoming and outgoing RTSP sessions over UDP (the idea is that this will force the player to switch to TCP interleaved mode - does not seem to work with newer versions of Android)
    • rtspRefuseIncomingUDPConnections
    • rtspRefuseOutgoingUDPConnections
  • Set log mpegts(Audio/Video)IsAligned setting to true
  • Added boolean application property rtmpEncoderAuthenticationSendCloseOnRejectConnection to control if "close" command is sent during RTMP authentication (default is false)
  • Added encoding to xml files and adjusted wmsmanager to support utf-8
  • Modified LiveRepeaterKey so that the new hash key methods use a passed-in origin context string instead of an explicit origin server guid and a separate context string. The origin context string is created by the origin and passed to all edges.
  • Fixed rtpDePacketizerWrapper property default to be a string constant DEFAULT_RTPDEPACKETIZERWRAPPERNAME
  • Fixed problem with SMIL file parser to get params with case sensitivity
  • Switched check for codec config packet to new FLVUtils.isVideoCodecConfig(int firstByte, int secondByte)
  • Fixed NPE when null was passed for the logger class
  • Improved RTP LATM parser to better handle streams without config data in the SDP information
  • Added following commented out properties to MediaCacheSourceTemplates.xml (proxyHost, proxyPort, requestFullURL)
  • Updated SMIL parser to parse the wowza-play-seek as a time value
  • Added x-server and x-user columns which will show server connected to and user logged in for actions performed in a user context
  • Changed VHost.NETCONNECTIONS_IDLE_FREQUENCY_DEFAULT from 3000 to 250 to match default VHost.xml
  • Fixed issue with map data copied from MediaListRendition to PlayList data
  • Fixed exception in StreamFilesController when connecting a stream to a nonexistent application
  • Fixed a couple minor bugs in QT media reader.
  • Fixed a bug in QT reader where if you had an fmp4 file containing a single track, but the track ID in the tkhd was not equal to "1", we would not parse correctly and the track would not appear in any subsequent HTTP streamer manifest.
  • Fixed windows memory leak on server shutdown
  • Changed G1 collector default to remove experimental setting
  • Added -XX:MaxGCPauseMillis=100 to G1 collector settings
  • Improved RTSP UDP refuse transport log message
  • Removed use of e.printStackTrace() when preceded by a WMSLogger message that takes the exception as a parameter
  • Added support for logging 6 lines of the stack trace when exception occurs
  • Updated silverlight error message for stream/file not found
  • Added support for locale specific date time format for parsing system uptime and wrap in try/catch to log
  • Fixed spelling error with unidentified sessions
  • Improved USB key check to handle multiple keys
  • Added new USB licensing system
  • Fixed WMSLogger to prevent logging exception to console
  • Added ability to track MediaCaster stream running index to know when streams are restarted
  • Added API to control what is filtered from onMetaData event
  • Modified clientaccesspolicy.xml and crossdomain.xml to enable HTTPS by default
  • Fixed MediaListReaderSMIL where it looks for the title string
  • Fixed shutdownApplication deleteFolder to delete folder even if application is not running
  • Added title support to rendition level of MediaList
  • Added title support to video and audio tag level to SMIL parser
  • Added support for title, videoOnly and keyFrameOnly to MediaList API
  • Added support for title, videoOnly and keyFrameOnly to SMIL file media reader
  • Added following constants to MediaStream to complete the set of valid stream name prefixes
    • public static final String NGRP_STREAM_EXT = "ngrp";
    • public static final String AMLST_STREAM_EXT = "amlst";
  • Added defaultStreamPrefix to central config
  • Added new Server.xml configuration item DefaultStreamPrefix
  • Changed default stream prefix from flv to mp4
  • Updated code in several places to use MediaStream.FLV_STREAM_TYPE constant
  • Added new Server.xml configuration item DefaultStreamPrefix
  • Added FORMAT_MP4 and FORMAT_FLV as static defines to StreamRecorderParameters, so both HTTPLiveStreamRecord and RecordConfig can use them
  • Fixed streamMonitorDataTCPosTolerance and streamMonitorDataTCNegTolerance descriptions
  • Fixed streamMonitor*TC*Tolerance descriptions
  • Added "flv:" prefix to WebcamRecording FlashRTMPPlayer example stream name.
  • Minor change to TestPlayer to minimize vertical space
  • LiveVideoStreaming has RTSP and RTMP publishing set to require password in Application.xml
  • Removed "duration" field from onMetaData when re-streaming a VOD file as a live stream (StreamDemoPublisher)
  • Added information logging statements when MediaCacheSourceTemplates.xml or HostPortTemplates.xml are loaded from local file system
  • Fixed bug where source ip reported for incoming stream changed when client connected and played stream
  • Moved LiveStreamTranscoders/MaximumConcurrentTranscodes from LiveStreamTranscoders.xml to VHost.xml
  • Updated Application.xml to set SharedObjects/StorageDirs to ${com.wowza.wms.context.VHostConfigHome}/applications/${com.wowza.wms.context.Application}/sharedobjects/${com.wowza.wms.context.ApplicationInstance}
  • Disable publishing to by changing /Root/Application/Client/Access/StreamWriteAccess from "*" to ""
  • Fixed webcamrecording so it has its own Application.xml and does not rely on the default one
  • Added log file tail functionality to Bootstrap
  • Changed logic such that null clients do not fail secure token check to match old security module behavior
  • Fixed bug where live stream would fail to publish when secure token for play was turned on.
  • Added missing AC_RunActiveContext.js file to examples
  • Guarded against null client in ModuleCoreSecurity
  • Updated StreamDemoPublisher to use the application instance when specified with the application name
  • Added better MediaCaster logging of source URLs, the logging now includes domain name and IP address information (liverepeater, shoutcast and RTP)
  • Moved MediaCasters connection confguration from MediaCasters.xml to VHost.xml
  • Added MediaCaster/StreamValidator to Application.xml
  • Added default implementation of MediaCaster stream validator (on by default)
  • Fixed RTMP password authorization in ModuleCoreSecurity
  • Improved HTTP util classes to return an HTTP object containing contentType, status and body of response
  • Added security features to server with ModuleCoreSecurity
    • Publishing
      • RTMP allowed/disallowed
      • RTMP require publish password
      • IP blacklist
      • IP whitelist
      • Prevent duplicate stream names
    • Playback
      • Maximum number of connections
      • Require secure connection
      • IP blacklist
      • IP whitelist
  • Fixed problem with live repeater URLs not being translated correctly if application instance not specified as part of origin URL
  • Added support for wildcards in FlashVer matching
  • Added ability to deny all RTMP publishes, password check
  • Fixed problem with restricting multiple stream publishing
  • Modified ModuleMediaWriterFileMove to use a new thread when moving files, instead of a thread from the vhost thread pool
  • Changed ModuleMediaWriterFileMover to use source file name as the destination name thread
  • Changed core security modules default location for publish.password from vhost config to server config
  • Updated default location of admin.password and publish.password to use ConfigHome instead of VHostHome in Authentication.xml
  • Created abstract base classes for notifier interfaces where we have extended the notifier to 2 or more interfaces
  • Created abstract base classes for commonly used notifier interfaces
  • Created abstract base classes for Live Stream Record notifier interfaces
  • Modified the logging of mpegtsAudioIsAligned and mpegtsVideoIsAligned to only log the setting if they are set to true.
  • Fixed incorrect system variable in admin setenv script
  • Fixed exception logging in StartRecordingController and in IncomingStreamDetailsControler to use WMSLoggerFactory instead of WMSLogger
  • Added logging to show maximum number of publishers allowed (Maximum Incoming Streams)
  • Renamed wowzamediaserver_*.log to wowzastreamingengine_*.log
  • Improved fragmented MP4 file reading performance
  • Fixed misspelling of delimiter in logging configuration
  • Added Manager/Properties section in Application.xml
  • Fixed exception with MP4 file reader on shutdown
  • Fixed problem with fragmented MP4 reader not properly dealing with trackIds when indexing moof fragments
  • Fixed example installer to warn if overwrite.
  • Fixed startup scripts so the server restarts correctly, including changing the exit code from rest and making script wait for the right pid to quit
  • Added logic to allow restarting the server while in service or stand alone mode.
  • Added a default stats enabled field in the Server.xml with it set to enabled.
  • Updated default Application.xml HTTPStreamers to include mpegdashstreaming, Description tag for sample applications and updated VideoChat with Name and AppType tags.
  • Added descriptions in default live and vod Application.xml files.
  • Added code to track media IO performance for streams published through Publisher API (includes transcoder)
  • Adding MPEG DASH packetizer and streamer to default live/vod applications.
  • Fixed improper MediaCaster socket setting in conf/VHost.xml
  • Modified example players to use scale mode showAll
  • Improved flash players, should scale better with text zoom 

API Additions and Changes

  • Added module methods onAppCreate(IApplicationInstance) and onAppDestroy(IApplicationInstance) that are invoked just before onAppStart and onAppStop
  • Added new IServerNotify events (IServerNotify3)
    • public abstract void onServerBeforeVHostStartup(IServer server);
    • public abstract void onServerAfterVHostStartup(IServer server);
  • Added ServerNotfyBase which implements IServerNotify3
  • Added VHostNotifyBase which implements IVHostNotify
  • Added API so you can get the audio and video codec from MediaReaderH264
    • int MediaReaderH264.getVideoCodec();
    • int MediaReaderH264.getAudioCodec();
  • Added utility method to check is a stream is a MediaCaster stream
    • boolean MediaCasterUtils.isMediaCasterStream(IApplicationInstance appInstance, String streamName)
  • Removed Server and VHost API that were old and may have caused confusion
    • IVHost
      • boolean createApplication(String sName, String sStreamType, String sContentLoc);
      • boolean removeApplication(String sName); (replacement method IVHost.shutdownApplication(String appName, boolean deleteFolder) with deleteFolder as 'true')
      • String readVHostConfig(String sName);
      • boolean writeVHostConfig(String sName, String data);
    • IServer
      • String readConfig(String sName);
      • boolean writeConfig(String sName, String data);
  • Add IServer API to get and set the default stream prefix:
    • getDefaultStreamPrefix();
    • setDefaultStreamPrefix(String defaultStreamPrefix);
  • Added support for AMF3 IExternalizable (see IAMFExternalizable interface)
  • Added helper methods to Bootstrap class to determine run mode and platform
    • boolean isRunModeService()
    • boolean isNativeWindows()
    • boolean isNativeLinux()
    • boolean isNativeOSX()
  • Added IServer API to get status of nDVR and DRM AddOns
    • public boolean isDVRAvailable();
    • public boolean isDRMAvailable();
  • Added API IServer.getLiveStreamTranscoderSessionCount()
  • Added IVHost.getLiveStreamTranscoderSessionCount() API
  • Added API to get this value:
    • IServer.getPublishersMaximum();
  • Added API and logging to track HTTP origin and REST API
    • IServer.isTranscoderWatermark();
    • IServer.isHTTPOriginAvailable();
    • IServer.isRESTAPIAvailable();
  • Added API for get manager properties and parse when reading XML files
    • IServer.getManagerProperties
    • IApplicationInstance.getManagerProperties
    • IVHost.getManagerProperties
  • Added API to add additional data to an AMFPacket (extra data attached to video and data packets will flow through transcoder)
    • AMFPacket
      • public IAMFPacketExtraData putExtraData(String key, IAMFPacketExtraData value)
      • public void putAllExtraData(Map<String, IAMFPacketExtraData> entries)
      • public IAMFPacketExtraData getExtraData(String key)
      • public Set<String> getExtraDataKeys()
      • public boolean containsExtraDataKey(String key)
      • public boolean isExtraData()
      • public Map<String, IAMFPacketExtraData> extraDataClone()
    • Publisher
      • public void addVideoData(byte[] data, int offset, int len, long timecode, Map<String, IAMFPacketExtraData> extraData)
      • public void startVideoData(int len, long timecode, Map<String, IAMFPacketExtraData> extraData)
      • public void startAudioData(int len, long timecode, Map<String, IAMFPacketExtraData> extraData)
      • public void addAudioData(byte[] data, int offset, int len, long timecode, Map<String, IAMFPacketExtraData> extraData)
      • public void addDataData(byte[] data, int offset, int len, long timecode, Map<String, IAMFPacketExtraData> extraData)
      • public void startDataData(int len, long timecode, Map<String, IAMFPacketExtraData> extraData)
  • Added API to IMediaStream to listen for incoming live AMF packets
    • public void addLivePacketListener(IMediaStreamLivePacketNotify listener)
    • public void removeLivePacketListener(IMediaStreamLivePacketNotify listener) 

HTTP Streaming (MPEG DASH)

  • Added mpegdashstreaming to Application.xml by default
  • Fixed handling of custom query params in MPEG-DASH onManifest() and onMediaFile().
  • Added Access-Control-Expose-Headers: Date HTTP header in MPEG DASH responses to allow player to retrieve the server time to allow client-server time synchronization during live streaming.
  • Fixed MPEG DASH CENC chunk data so that KID values are always provided as big-endian.
  • Fixed AC-3/E-AC-3 audio in MPEG DASH.
  • Fixed MPEG DASH issue where AudioChannelConfiguration MPD element was incorrectly being defined in the AdaptionSet container instead of the Representation container (VOD and Live).
  • Resolved DASH player continuing when dialog closed by clicking on grey area
  • Added support for 'mehd' box in DASH initialization segments.
  • Added AC-3 and E-AC-3 support in MPEG DASH streaming.
  • Fixed DASH-CENC issue where multiple keys in a key file caused no KeyId to be stored in the associated PlayReadyKeyInfo object.
  • Added MPEG DASH support so that it handles the case where an error occurs while indexing a VOD file, which previously would cause an exception later while trying to build a manifest.
  • Fixed the DASH players to allow audio-only and video-only playback.
  • Fixed DASH Live code to handle smil files with no audio or video bitrates specified. Fixed DASH server tests to be less restrictive on the bitrate specified by the MPD for live streams.
  • Added support for audio-only and video-only VOD files and Live Streams in MPEG DASH.
  • Fixed CENC serialization and DASH Live Repeater code so that the raw encryption key is not sent to edge, but instead the encrypted version (the CencInfo repeaterBytes) is sent, and then decrypted back into the real key on the edge.
  • Added DASH-CENC support for encryption of the actual key across the repeater connection within origin/edge (live repeater) configuration.
  • Added DASH-CENC support within origin/edge (live repeater) configuration.
  • Added serialization/deserialization methods to the CENC classes primarily for use by DASH Live repeater. Also added deserialization method in the PlayReadyKeyInfo class (already supports serialization).
  • Fixed DASH and MP4FragmentWriter code that adds 'saio' box to fragments, related to common encryption.
  • Completed support for multiple DASH CENC DRM keyserver entries in a single key file. Also completed support for DASH CENC automatic PlayReady checksum and content-key generation based on the keyID and seed information provided in key file.
  • Fixed MPEG-DASH onManifest code to correctly defer mpd requests in cases where chunks are not available, both for normal live streaming and live repeater (single and MBR).
  • Fixed an issue with the cenc:default_KID attribute in the DASH MPD
  • Fixed HTTPStreamerApplicationContextMPEGDashStreamer.init() so that HTTPOrigin mode is not hard-disabled for MPEG-DASH.
  • Renamed IDvrEncryptionInfo.ENCRYPTION_TYPE_MPEGDASH to IDvrEncryptionInfo.ENCRYPTION_TYPE_CENC to align with current DASH encryption convention.
  • Added Common Encryption (CENC) classes for use by MPEG-DASH vod/live streaming.
  • Removed dead code in MP4FragmentWriter.writeAtomPSSH().
  • Fixed DASH CENC so that the DRM module API is not called when an appropriate key file is found (like Smooth and Cupertino)
  • Added MPEG-DASH support in the existing BuyDRM module.
  • Fixed bug in MediaReaderH264MPEGDash.fillChunkFromFile() where an empty "encrypted" packet fragment was being added for a NAL unit too small to be encrypted (< 16 bytes)
  • Improved MPEG-DASH repeater logging to include context information
  • Fixed handling of "mpegDashChunkDurationTarget" property so that the value of the property defined under Application.xml:HTTPStreamer/Properties does not stomp on the value of the same-named property defined under Application.xml:LiveStreamPacketizer/Properties, during live DASH manifest generation. The value under HTTPStreamer/Properties is only supposed to be applicable VOD DASH streaming.
  • Removed DASH code looking for old "chunkDurationTarget" property in lieu of more specific "mpegdashChunkDurationTarget".
  • Implemented MPEG-DASH Live Stream Repeater (Origin-Edge)
  • Tweaked DASH manifest default so that the IMPEGDashConstants.PROFILE_DEFAULT value is used when no profile is specified in the mpd filename.
  • Changed the name of the MPEGDASH notification functions in the IBuyDRMStreamActionNotify interface.
  • Fixed DASH livestreampacketizer initialization method so that DASH-specific properties are only permitted in the LiveStreamPacketizer section of Application.xml, not at the app level properties. Also added support for the maxChunkLogCount property in DASH.
  • Added missing IModuleOnHTTPMPEGDashStreamingSession interface.
  • Modified MPEGDASH HTTP streamer to return Access-Control headers required by javascript players on ALL 4xx status returns.
  • Disabled noisy logging during live MPEG-DASH streaming when using the time-based profile.
  • Fixed issue in DASH test player so that when an incompatible video or audio codec is received, a more useful alert is reported and the UI does not hang.
  • Added calls to the new player.stop() function in the DASH example players so that the rogue MPD update timers get stopped as expected.
  • Added DASH logging for case where stream is requested that doesn't exist.
  • Fixed an exception in the Verimatrix module DASH APIs that occurred when a stream map file did not define a KeyId for a specific position in the key rotation (for DASH). It now reports warning in the logs. 

HTTP Streaming (General)

  • Added new live repeater shared secret implementation, now used by DASH, HLS, and DVR.
  • Added support for Apple HLS to automatically switch between older and newer codec information format (avc1.66.30 and avc1.42001e)
  • Added support in Apple HLS to start a VOD stream mid-stream using query parameter ?wowzaplayseek=[time-in-milliseconds]
  • Added support for playSeek in all the HTTP streaming code - lots and lots of changes
  • Added support for Apple HLS video on demand keyframe only renditions to support trick play mode in Apple player
  • Added support for live streams with audio/video turned off and audioonly and videoonly renditions turned on
  • Added more complete Apple HLS smil file implementation that can handle separate audio and video renditions
  • Added tracking of read failure when generating HTTP streaming chunks/fragments
  • Added correct support for property "sanjoseAdapterDebugLog" in the SanJose streamer adapter, which was incorrectly looking for "dvrAdapterDebugLog".
  • Added warning log statement to HTTP VOD streaming when an MP4 has a video track without sync point data (stss atom is empty)
  • Added HTTPStreamers/Properties boolean property smoothStreamingEncryptionRandomIV to control if encryption IV is random or generated (default is random - true)
  • Added HTTPStreamer/Properties boolean property cupertinoCreateKeyFrameOnlyPlaylist to control keyframe only playlist generation for Apple HLS streaming (false by default)
  • Added HTTPStreams/Properties boolean property cupertinoSetPlaylistNameToStreamName to control if NAME field in playlist is set to the stream (true by default)
  • Added HTTPStreamers/Properties integer properties for controlling HTTP response when a read failure occurs during chunk/fragment creation (set to zero by default - which returns the incomplete chunk - 404 will return chunk not found)
    • httpResponseOnIncompleteChunk
    • cupertinoResponseOnIncompleteChunk
    • smoothResponseOnIncompleteChunk
    • sanjoseResponseOnIncompleteChunk
    • mpegdashResponseOnIncompleteChunk
  • Added the following HTTPStreamer/Property properties to control the Cache-Control header that is returned for HTTP streaming when a response in the 400s is returned
    • httpCacheControlStatus4xx
    • cupertinoCacheControlStatus4xx
    • smoothCacheControlStatus4xx
    • sanjoseCacheControlStatus4xx
    • mpegdashCacheControlStatus4xx
  • Added new IHTTPStreamerCupertinoVODActionNotify3 interface for tracking video-only chunk creation
    • onFillChunkStart(IHTTPStreamerCupertinoIndex fileIndex, IHTTPStreamerCupertinoIndexItem item, LiveStreamPacketizerCupertinoChunk chunk, CupertinoStreamingRendition rendition);
    • onFillChunkEnd(IHTTPStreamerCupertinoIndex fileIndex, IHTTPStreamerCupertinoIndexItem item, LiveStreamPacketizerCupertinoChunk chunk, CupertinoStreamingRendition rendition);
    • onFillChunkDataPacket(IHTTPStreamerCupertinoIndex fileIndex, IHTTPStreamerCupertinoIndexItem item, LiveStreamPacketizerCupertinoChunk chunk, CupertinoStreamingRendition rendition, AMFPacket packet, ID3Frames id3Frames);
  • Added following integer LiveStreamPacketizer (live) and HTTPStreamer (video on demand) properties control the PID values used when streaming using Apple HLS (cupertino)
    • cupertinoMPEGTSVideoPID
    • cupertinoMPEGTSAudioPID
    • cupertinoMPEGTSDataPID
  • Marked HTTP chunk generation as unsuccessful if exception
  • Updated Apple HLS media list parser to treat <audio> tags as <video> tags with audioOnly set to true
  • Changed Apple HLS system language identifier from _l to _sl to avoid conflict with closed captioning
  • Improved method for turning on HTTP adapter debug logging. There are now 4 ways:
    • debugLog boolean property in HTTPStreamer/Properties in HTTPStreamers.xml
    • debugLog boolean property in HTTPStreamerAdapter/Properties in VHost.xml
    • [adapter-name]AdapterDebugLog boolean property in Properties container at the bottom of VHost.xml (ex. cupertinoAdapterDebugLog)
    • httpAdapterDebugLog boolean property in Properties container at the bottom of VHost.xml
  • Changed default of onChunkStartResetCounter from false to true for Apple HLS streaming (live, vod and nDVR)
  • Improved all 6 HTTP Streaming Adapters to have consistent logging between them. All now have canHandle, service, and onMedia
  • Fixed logging in HTTPStreamManager to accurately reflect class and function in log statements
  • Fixed Apple HLS redundant playlists - domain was not being parsed properly
  • Fixed problem with Apple HLS sample encryption of VOD files
  • Fixed HLS VOD ABR (smil) encryption issue where the wrong encryption key was being generated and returned from the encryption key request.
  • Fixed problem with Apple HLS encryption with onHTTPCupertinoEncryptionKeyVODChunk API not sending correct chunk index during playlist generation
  • Fixed Smooth HTTP Adapter debug logging. Wasn't properly hooked up to vhost properties smoothAdapterDebugLog or httpAdapterDebugLog
  • Fixed internal packet handling algorithm to account for case where inner handler was both saving and flushing
  • Fixed Silverlight multicast authorizer to not start the worker thread if socket creation failed
  • Removed non-editable attribute for vod flash HDS player, no longer necessary 

Wowza Transcoder AddOn

  • Updated Media SDK for Linux to version 16.2.64.12396
  • Updated Media SDK for Windows to version 2013R2
  • Updated MainConcept SDK to version 9.7.1
  • Added support for Quick Sync accelerated MP2 decoding (H264 was already supported)
  • Added support in transcoder templates for decoder implementations (default and QuickSync)
  • Enabled Quick Sync accelerated encoding on Windows Server when running as a system service (session 0 isolation)
  • Enabled Quick Sync acceleration when running as a system service on Windows if driver API version is 1.7 or greater
  • Updated transcoder VBR target to peak bitrate range from varying values per-implementation to 110% everywhere
  • Updated transcoder NVENC default preset from "default" to "hq" (high quality)
  • Updated default transcoder deinterlace value from DEINTERLACE_FIELD_INTERPOLATION to DEINTERLACE_VERTICAL_SMOOTHING (higher quality)
  • Improved transcoder to extract frame rate from RTP or RTMP metadata if not available in the metadata of the incoming stream (ex. VUI parameters for H.264)
  • Added transcoder support for stereo streams that contain different languages in each stereo channel (channel_copy: 0=donothing, 1=copy-left-over-right, 2=copy-right-over-left)
  • Improved transcoder deinterlace parameter comments
  • Added support for multiple .list files in transcoder
  • Improved transcoder logging in workers to be more consistent and provide more context information
  • Added isTranscodeResult to MediaStreamMapGroup to identify groups created by the transcoder
  • Suppressed transcoder frame rate missing warning so only shown once
  • Improved MPEG2 NAL unit parser
  • Fixed bug in StreamGroupConfig so that transcoder stream group members are displayed under the group (wms-352)
  • Added warning log message to transcoder when attempting to use Intel Quick Sync on Windows when running as a service
  • Added support in transcoder templates for both Encode/Transcoder and Encode/Implementation to set the encoder implementation
  • Updated transcoder templates to use Encode/Implementation rather than Encode/Transcoder to set the encoder implementation
  • Added Decode/Implementation setting to transcoder templates
  • Improved Wowza Transcoder H.264, MP2 and MP4 decoding to be more tolerant when there are dropped frames
  • Improved Wowza Transcoder video decoding to be able to support more than 1 decoding frame
  • Fixed small transcoder frame size problem with accelerated decoding
  • Updated Wowza Transcoder libraries with acclerated decoder support for H.264 and MP2 (can handle frame size changes and deinterlacing)
  • Updated Wowza Transcoder to use two decoded frames in queue
  • Fixed NVENC encoding parameter description for preset to match latest NVidia SDK
  • Fixed a problem with transcoder that was causing excessive logging if audio was disabled in transcoder template 

Wowza nDVR AddOn

  • Added discontinuity marker to DVR HLS (Cupertino) streaming when codec info changes
  • Added context information to DVR packet handler debug logging
  • Added following integer DVR properties control the PID values used when streaming using Apple HLS (cupertino)
    • cupertinoMPEGTSVideoPID
    • cupertinoMPEGTSAudioPID
    • cupertinoMPEGTSDataPID
  • Added ability for dvrPlayerAdapter properties to come from HTTPStreamer or DVR Properties section of Application.xml
  • Added UTC-based DVR playlist request delegate class com.wowza.wms.dvr.impl.DvrUtcStartDurationPlaylistRequestDelegate
  • Added DvrStartDurationPlaylistRequestDelegateLegacy that has pre-4.0 behavior of returning full playlist
  • Added new live repeater shared secret implementation to DVR
  • Changed behavior of DVR playlist request delegate to return empty playlist when start and duration values don't line up with valid DVR times
  • Improved logging context in DVR manifest parser to include stream name
  • Suppressed DVR repeater deserialize exception messages if the chunk coming across is encrypted (this is often just a sign that the shared secret keys are mismatched and has a tendency to fill the logs)
  • Fixed problem with nDVR stream aliasing where it was using versioned streamName (myStream.0) instead of base stream name (myStream) for aliasing the originURL
  • Fixed DVR HTTP Origin mode problem where if first request is a chunk request, chunklist request would return 404
  • Fixed ability to run on Win8.1 native player by adding support for Smooth Streaming FragmentInfo requests in nDVR

Wowza DRM AddOn

  • Added a check for a valid keyId in PlayReadyKeyInfo.isComplete().
  • Moved getPlayReadyKeyInfo() method out of the IEncryptionInfo interface and into a new IEncryptionInfoPlayReady interface, which extends IEncryptionInfo. This allows use of the IEncryptionInfo interface in the CENC and DASH classes.
  • Modified Cupertino encryption classes to now use IEncryptionInfoPlayReady instead of IEncryptionInfo.
  • Fixed PlayReadyKeyInfo.equals() so that it verifies it was passed a PlayReadyKeyInfo object instead of a CupertinoEncInfo object, resulting in incorrect fail returns.
  • Replaced redundant code in generateChecksum() and getWRMHeaderStr() with calls to getKeyIdSwapped() (in PlayReadyKeyInfo).
  • Added ability in PlayReady API to generate the content-key from the seed and key-id values
  • Reworded PlayReadyObject API to make it make more sense
  • Enhanced CupertinoEncInfo.getEncKeyBytes() so that it can be called when doing PlayReadyChunk encryption, in which case the contentKey must be pulled from the playReadyKeyInfo data. Fixes a repeaterKey exception bug.

Wowza Push Publish

  • Merged push publishing into core code
  • Added Apple HLS push to Akamai into push publishing system
  • Added push publishing support for SSL WOWZ and RTMP connections
  • Added support for multicastplay to push publising system
  • Added support for push publisher listeners in module or added to IApplicationInstance
    • module: void onPushPublishSessionCreate(String streamName, IMediaStream stream, IPushPublishSession pushPublishSession);
    • module: void onPushPublishSessionDestroy(String streamName, IMediaStream stream, IPushPublishSession pushPublishSession);
    • IApplicationInstance.addPushPublishSessionListener(IPushPublishSessionNotify pushPublishSessionListener);
    • IApplicationInstance.removePushPublishSessionListener(IPushPublishSessionNotify pushPublishSessionListener);
  • Exposed more health statistics for push publish of Apple HLS to Akamai
  • Added more API to track RTMP push publishing health
  • Updated push publishing waitOnMetadataTimeout from 4000 to 6000
  • Fixed problem with HTTP push publishing audio only rendition
  • Fixed problem with push publishing not processing rtpWrap map entry properly
  • Added default push publish map file PushPublishMap.txt
  • Removed unused classes and attributes from push publishing module
  • Renamed push publishing session class to not conflict with other naming
  • Rewrote push publish module to work based on polling stream state
  • Moved loading of push publishing profiles to VHost
  • Renamed all classes that were PushPublisher to PushPublish to be more consistent
  • Changed HTTPByteReader and LiveStreamPacketizerCupertino for Apple HLS push to Akamai
  • Added support for Akamai Apple HLS DVR. Add the following new map entries:
    • akamai.cupertinoPlaylistCount: Number of chunks to maintain in the playlist
    • akamai.cupertinoPlaylistAcrossSessions: Set to true to maintain playlists across push publishing sessions [true|false]
    • akamai.cupertinoPlaylistTimeout: Time in milliseconds a cross session playlist will be maintained (default is 120000 - 2 minutes) 

Wowza Media Cache

  • Merged Media Cache into core code
  • Turned on MediaCache by default
  • Added support for MediaCache per-application filtering based on MediaCache source name
  • Added MediaCache fileReadRetries to the MediaCacheSourceTemplates.xml
  • Added retry mechanism to file/nfs MediaCache implementation
  • Added debug logging to MediaCache garbage collector
  • Added MediaCache section to Application.xml
  • Improved MediaCache file logging
  • Fixed MediaCache to start before we bind to VHost ports
  • Removed IsPassThru from MediaCache.xml
  • Property hooked up MediaCache ContextMapperClass  

Wowza Closed Captioning

  • Added live onCaptionInfo ingestion
    • Added support for decoding AMF onCaption data events
    • Added support for decoding CEA-608 captions contained in AMF onCaption "708" data events
  • Fixed HLS issue with substituting title and language for webvtt
  • Changed default value in CEA608 ingest module to have field 2 off
  • Pulled timed text properties from TimedText section as well as Application level properties to be consistent with original closed caption module and 3.x
  • Fixed issue where onCaption CEA-608 captions had both field1 and field2 captions enabled 

Wowza Live Stream Record

  • Implemented new LiveStreamRecordManager APIs
  • Deprecated the ILiveStreamRecord interfaces as the new IStreamRecorder interfaces are now the preferred interfaces
  • Added try/catch in LiveStreamRecorderMP4, FLV and MediaWriter to cleanly shutdown worker thread when an Exception is caught
  • Added API getStatus to ILiveStreamRecord so recorder status of running, not running and error can be retrieved
  • Added API getErrorString to ILiveStreamRecord so an error message can be retrieved
  • Added code to LiveStreamRecordFileVersionDelegate to ensure the TimeZone Id returned by the time formatter doesn't contain bad file characters, such as ":" , and if it does, use the offset from GMT instead.
  • Fixed LiveStreamRecorderBase log statements to output full class path for module name instead of just the module name
  • Fixed bug where FLV header flags always indicated audio and video data was present regardless of actual data
  • Fixed ModuleMediaWriterFileMover to create a thread per stream and queue per thread to ensure file moving doesn't get stomped on by rapid publish/unpublishing events
  • Fixed synchronization issue with live-record stream type
  • Fixed bug to prevent Live Stream Record from filling log file with errors when io.exception occurs, and correctly display recorder error in Manager
  • Fixed bug in HTTPLiveStreamRecord output url parameter handling where ${variables} for filename were not getting replaced correctly
  • Fixed FLV header to correctly report video present and audio present when recording using webcamera app