• Wowza Media Server 3.5.0 Release Notes

    Version: Wowza Media Server 3.5.0 build 2989 released on 08 November, 2012.

    New Major Features in Wowza Media Server 3.5

    Wowza StreamLock AddOn

    Wowza StreamLock™ AddOn is Wowza's new security option for network encryption. It provides near-instant provisioning of free 256-bit Secure Sockets Layer (SSL) certificates to verified Wowza customers for use with Wowza Media Server. SSL certificates provide the best security when used with RTMP and can also be used for secure HTTP streaming (HTTPS).

    See: How to get SSL certificates from the StreamLock service

    Wowza Transcoder AddOn

    A new module for Wowza Transcoder AddOn enables static and dynamic images to be overlayed on top of video. It can be configured manually or pre-programmed based on external events, making it a powerful new tool for adding premium TV-like experiences.

    See: How to add graphic overlays to live streams with Wowza Transcoder AddOn

    Wowza Transcoder AddOn contains preview technology that makes the best use of 3rd-generation Intel Core processors on Linux-based operating system distributions by adding support for Intel Quick Sync Video. Using Intel Quick Sync Video can double transcoding speeds over 2nd-generation Intel Core processors by moving video-conversion tasks to dedicated media processing space. The final version of the technology that supports Quick Sync Video will be available in a later release of Wowza Transcoder AddOn.

    See: How to configure Quick Sync accelerated encoding on Linux

    Wowza Transcoder AddOn now supports H.263 encoding for live video streams, enabling users to stream to older devices.

    Digital Rights Management (DRM)

    Wowza DRM AddOn now supports integration with BuyDRM KMS services for Apple HTTP Live Streaming (HLS). This allows studio-grade Microsoft PlayReady DRM to be applied to HLS streams that are delivered to Apple iOS devices that have a BuyDRM player.

    See: How to set up and test BuyDRM KeyOS DRM (PlayReady)

    New APIs in Wowza Media Server 3.5 enable new encryption schemes for HLS streaming. In addition, a new API is provided that enables decryption of PlayReady assets.


    Closed Captioning

    Wowza Media Server 3.5 includes support for closed captioning for live and on-demand video streams. It can ingest caption data from a variety of instream and file-based sources and convert it to the appropriate caption format for live and on-demand video streaming using the HLS, Adobe HTTP Dynamic Streaming (HDS), and RTMP protocols. This feature helps U.S. broadcasters to comply with the Twenty-First Century Communications and Video Accessibility Act of 2010 by providing captioning for television programs that are distributed over the Internet.

    See: Closed Captioning Overview

    Live Stream Record

    Live Stream Record, formerly a free AddOn, is incorporated into Wowza Media Server 3.5. New functionality allows server administrators to automatically split in-process live stream recording archives into multiple files, with the split points based on video duration, clock time, or file size. A new developer user interface shows all current live streams and gives the option to record or stop recording a stream.

    See: How to record live streams (HTTPLiveStreamRecord)


    MediaSecurity, formerly a free AddOn, is incorporated into Wowza Media Server 3.5. MediaSecurity features such as SecureToken, RTMP authentication, RTSP authentication, StreamNameAlias, and secure streaming (RTMPE, RTMPTE, and RTMPS) help to ensure a more secure stream when delivering content using HLS, HDS, Smooth Streaming, and MPEG-DASH (Dynamic Adaptive Streaming over HTTP).

    See: Media Security Overview

    HTTP Origin

    Wowza Media Server 3.5 can be used as an origin that fulfills requests from HTTP caching infrastructures for live and video on demand HLS, HDS, and Smooth Streams. Downstream HTTP caches are ideal for scaling out streaming across larger regions and audiences.

    See: How to configure Wowza server as an HTTP caching origin

    Push Publishing AddOn

    A new version of the Push Publishing AddOn adds support for RTP and MPEG-TS publishing to downstream Wowza™ servers, Adobe Flash Media servers, and CDNs.

    See: Send streams to destinations using Wowza Media Server 3.6.4

    RTMPE AddOn

    RTMPE network encryption security in Wowza Media Server 3.0 (and earlier) is now provided as an AddOn to Wowza Media Server 3.5.

    See: How to get Wowza RTMPE AddOn

    Silverlight Multicast Player

    Wowza Media Server 3.5 contains a Microsoft Silverlight-based player that allows users to stream an MPEG-TS multicast from Wowza Media Server to any Silverlight-enabled desktop. The multicast feature allows users to deliver live video broadcasts across the network to thousands of Silverlight-based players simultaneously while only using the bandwidth of a single stream.

    See: How to get the Silverlight Multicast Player AddOn

    Detailed Changes


    • Added MediaStreamActionNotify3Base that implements all IMediaStreamActionNotify3 methods
    • Fixed Stream.close to properly unpublish the stream
    • Fixed problem with MP4 writer where it was not able to get codec config in all cases
    • Enhanced WMSLogger to provide fatal/error/warn/info/debug methods that are inherited from category such that we can properly set up the logging content. This should prevent "- - - - -" log messages
    • Improved UDP handling to recycle threads in thread pool
    • Added sample file that shows how to add a MediaCacheSource on the fly
    • Updated Push Publishing simple example
    • Removed version number from stream manager and live stream record HTTP UI
    • Fixed incorrect class in getLogger() methods
    • Modified license key prompt to be more clear
    • Updated developer license to allow 2 transcoder licenses
    • Enabled turning off of packetization log messages by setting maxChunkLogCount to -1
    • Renamed StringUtils.stringNoUnitsToStamp() to stringToMilliseconds()
    • StringUtils.stringToMilliseconds returns -1 if parse fails
    • StringUtils.stringToMilliseconds now parses 5. same as 5.0
    • Use StringUtils parsing for SRT parsing of HH:mm:ss,SSS
    • Implemented HostPort/SocketConfiguration/ReadBufferSize which controls the size of the buffer used to read messages
    • Enabled support for auto TCP scaling by allowing ReceiveBufferSize and SendBufferSize of zero to stop Java from setting the SocketOptions
    • Use AMF converted model to provide sample info to rtmp
    • Simplified debug logging in SSL handler - should be a bit faster
    • Updated Bouncy Castle library from bcprov-ext-jdk15-146.jar to bcprov-ext-jdk15on-147.jar
    • Update Log4J from log4j-1.2.16.jar to log4j-1.2.17.jar
    • Fix to more properly log WOWZ protocol interactions
    • Added more logging of WOWZ protocol actions (server boolean property debugWOWZProtocol)
    • Added boolean MediaCaster/Properties property shoutcastSetTimecodesBasedOnSystemClock that when true will set the shoutcast timebase based on system clock
    • Fixed LivePlayer to properly send original timecodes when in origin/edge mode
    • Fixed PushPublishRTP to handle multiple streams with same name
    • Removed logging reference from bootstrap
    • Added MediaSecurity module and supporting classes to core code
    • Added licensing code to RTMPE .jar file and core code
    • Added license server tracking for WOWZ protocol and HTTP origin
    • Added IQTMediaCursor to help abstract the MP4 cursor code
    • Added support for single channel transcoder license
    • Added licensing support for RTMPE licensing
    • Added new utility class MultiMap
    • Fix to MP4 writer to fix audio/video sync issue
    • Improved MP4 file cursor code so that on file open it does not index the entire time to sample table if not necessary
    • Added support for basic authentication when re-streaming protected SHOUTcast/Icecast stream (format is http://[username]:[password]@[domain]:port/)
    • Removed the following unused classes:
      • FasterByteArrayOutputStreamSync
      • FasterByteArrayOutputStreamInterleave (found another occurrence of this in plugin)
      • IMediaStreamOutputControl
      • IoSessionOutputStream
      • ObjectSerializationOutputStream
    • Removed un-needed type check in MediaReaderH264.directOutput (2 places)
    • Fixed server-side publisher code so that is properly propagates data events to registered callbacks
    • Added URL encoding to application name when using centralized configuration
    • Updated ModuleMediaWriterFileMover error log statement to include proper context
    • Fixed problem where SEI data was not unescaped when extracting from stream and not escaped when inserting into the stream. This fixed some mp4 streams that would not play after CC insertion
    • Implemented SEI insertion callback for Cupertino VOD
    • Improved MP4 seek and read-ahead performance by optimizing cursor access to chunkToLoc structure
    • Improved synchronization in MediaReaderH264 in read ahead code
    • Fixed problem with file extension being logged in URI fields improperly
    • Fixed NALUnit parsing case where last trailing bytes could be skipped
    • Removed class FasterByteArrayOutputStreamInterleave because it's not used
    • Added faster BitReader implementation

    RTMP Streaming

    • Fixed problem with RTMP function processing that was causing media data and functions to be processed out of order
    • Added support for jwplayer.smil format for new JW Player
    • Improved performance of RTMP handshake generation
    • Modified RTMP header generation code to simplify code and improve performance
    • Fixed problem with liverepeater sending NetStream.Play.UnPublishNotify when it should not
    • Added boolean MediaCaster/Properties property resetOnStreamNotFound which when true will reset a liverepeater stream when NetStream.Play.StreamNotFound is received from origin
    • Fixed problem with RTMP playback where frame did not update if seeking while paused
    • Improved synchronization and added try/catch around a few missing IO functions for RTMP streaming

    HTTP Streaming

    • Added support for HEAD requests when doing Apple HLS streaming
    • Improved sample code for adding an Apple HLS poster frame
    • Added boolean LiveStreamPacketizers property cupertinoCalculateChunkIDBasedOnTimecode to turn on chunk ID numbering based on incoming packet time
    • Added LiveStreamPacketizer/Properties integer property cupertinoMinPlaylistChunkCount that controls the minimum number of chunks that will result in a valid chunklist response
    • Improved HTTP file streaming file index performance
    • Added HTTPStreamer/Properties boolean property cupertinoFloatingPointDurations to turn on/off floating point durations in chunklist.m3u8 responses
    • Added HTTPStreamer/Properties integer property cupertinoCodecStringFormatId to set the CODECS string to either 1: PREIOS4 or 2: POSTIOS4 format
    • Added code to automatically turn on/off floating point durations if extXVersion is greater than or equal to 3
    • Added code to automatically set the CODECS values to RFC4281 or RFC6381 if extXVersion is greater or equal to 4
    • Added LiveStreamPacketizer/Properties integer properties sanjoseLivePointChunkCount sanjoseMinReserveChunkCount to control the live point that is reported in the ABST data for Flash HDS streaming
    • Fixed Apple HLS packetizer to not look at data events when determining if audio-only or audio/video stream
    • Fixed typo in log statement in cupertino streaming
    • Added support for AC3 audio in Apple HLS
    • Fixed infinite error throw by smooth streaming when using MP3 audio
    • Reworked HTTP VOD streaming to normalize chunk creation
    • Fixed isPublishStreamReady to look for at least on audio and on video packet before marking the stream as read for publishing
    • Fixed live stream packetizers so they properly reset when source stream changes
    • Fixed cupertino repeater mechanism to fix problem with RESET serialization
    • Fixed problem with HTTP origin when using SMIL file with audio-only rendition with Apple HLS
    • Added httpRandomMediaName property to all packetizers to enable single switch to turn on feature
    • Fixed potential synchronization problem with HTTP adaptive streaming file indexes
    • Improved HTTP session counting synchronization
    • Improved HTTP streaming session life cycle synchronization
    • Fixed smooth streaming "Pragma" header to use proper cache control settings
    • Added support for MP3 files when using cupertinoPacketizeAllStreamsAsTS property
    • Added code to optimize file reading for HTTP streaming (re-orders and groups reads where it can) turned off by default, can be turned on by setting boolean property MediaReader/Properties httpOptimizeFileReads to true.
    • Added string property MediaReader/Properties randomAccessReadOptimizerClass to configured custom IRandomAccessReadOptimizer implementation
    • Fixed synchronization bug in livestreampacketizer base class that was leading to "Too many packets in event queue, pausing" warning
    • Added boolean HTTPStreamer/Properties property cupertinoPacketizeAllStreamsAsTS to force audio-only video on demand streams to be packetized as TS chunks (this is more compatible with some non-Apple HLS players, default is false)
    • Added boolean LiveStreamPacketizer/Properties property cupertinoPacketizeAllStreamsAsTS to force audio-only live streams to be packetized as TS chunks (this is more compatible with some non-Apple HLS players, default is false)
    • Improved Apple HLS chunking code so that it will properly report the audio codec if audio is not present in code lock period
    • Added packet validation code to transcoder for Speex decoding
    • Fixed problem with replay of Flash HDS and Apple HLS audio only vod streams
    • Added LiveStreamPacketizer property maxEventCount to control maximum allowed event queue size before it's suspended to avoid memory run-up (default is 10000)
    • Improved logging of condition when LiveStreamPacketizer event queue is suspended due to overrun
    • Fixed problem where after the LiveStreamPacketizer queue was overrun, it was not properly flushed
    • Improved accuracy of Apple HLS audio only start codes

    RTSP/RTP/MPEG-TS Streaming

    • Added boolean RTP/Properties property rtpIgnoreSPropParameterSets that will ignore the sprop-parameter-sets data in an SDP file and will rely on the data reported in the SPS and PPS packets of the stream (if they exist)
    • Improved RTSP/RTP interleaved error logging when stream is out of sync
    • Made small math fix to the realtime MPEG-TS system time mapping algorithm
    • Added following RTP/Properties properties to enable mapping incoming MPEG-TS timecodes to the system clock to enable multi-server stream alignment
      • Boolean property mpegtsMapTimeToSystemTime turns on mapping pts and dts values to the system clock
      • Integer property mapTimeToSystemTimeWindow controls the duration of the rollover window (milliseconds) - default is 2000 (2 seconds)
    • Added property to control RTSP authentication to enable using custom publish.password path
    • Fixed problem with PMT not filtering on table_id
    • Added following integer RTP/Properties to control the payload type used when streaming using RTP and MPEG-TS
      • audioPacketizerAACPlayloadType
      • audioPacketizerMP3PlayloadType
      • audioPacketizerSPEEXPlayloadType
      • videoPacketizerH264PlayloadType
      • streamPacketizerMP2TPlayloadType
    • Improved IP camera re-streaming to start with OPTION command rather than DESCRIBE command. Seems to fix authentication for several cameras
    • Set RTP marker bit when streaming MPEG-TS over RTP per RFC2250

    Wowza nDVR

    • Added new DVR manifest reporter HTTP Provider module
    • Added DVR property "dvrVerifyChunkExistenceOnManifestLoad" (Boolean, default=true) that surfaces API used to turn off verification of each artifacts existence when loading a DVR recording. When set to false, it will be assumed that each chunk is on disk and readable, skipping check for existence
    • Fixed problem with DVR encryption based URL where m3u8keyinfo was not returning correct encInfo
    • Fixed problem where DVR HLS chunks varied in size when server became loaded
    • Fixed possible NPE in DVR MBR aligner
    • Removed unnecessary exception logging when DVR Chunk Streamer failed to return a chunk
    • Improved socket close logic when DVR uses Chunk Stream Repeater. This fixes cases where sockets could be left open
    • Fixed problem with DVR Chunk Streamer where incorrect HEAD response caused additional MediaCache traffic
    • Implemented Byte range requests for DVR Chunk Streamer
    • Fixed problem where DVR edge receiver was using wrong repeater name when using smil file
    • Enhanced DVR 'Add chunk' logging message to include a/v/d dvr and packet times. This should help with earlier analysis of streams being unaligned
    • Fixed potential ConcurrentModificationException in Cupertino MBR DVR
    • Added support in DVR for Cupertino floating point durations for pantos version >= 3.
    • Fixed usage of stream aliasing and DVR in origin edge configuration. If resolveStreamAlias was aliasing the stream name to determine which origin server to retrieve chunks from but ChunkOriginURL was defined, the aliased stream was ignored. (For example if "myStream" was aliased to "rtmp://localhost:1935/dvrorigin/myStream", the DVR playlist would be delivered but not the chunks.)
    • Removed unnecessary exception logging when DVR Chunk Streamer failed to return a chunk
    • Fixed problem where DVR MBR could stop updating playlist after several hours
    • Improved logic for determining whether DVR MBR alignment needs recalculated
    • Improved logic for determining alternate chunk for DVR MBR gap. If within "dvrMbrAlternateMatchDelta", its considered a match otherwise closer alternates are searched for
    • Added DVR property "dvrMbrAlternateMatchDelta" to configure alternate chunk match
    • Added missing context information to some DVR packet handling info level log warnings
    • Fixed origin-edge serialization issue in new Cupertino encryption
    • Improved DVR MBR algorithm to handle chunk alignment at live portion of streams better by backing up one chunk when updating the alignment in a live stream. This allows streams that need an alternate chunk from a matched stream to replace the alternate with their own chunk if it has just arrived
    • Fixed DVR MBR case where alternate chunks were being substituted for very small gaps in the stream
    • Fixed DVR MBR case where delta from stream to alternate chunk was incorrectly calculated
    • Improved DVR MBR synchronization
    • Improved logging of error conditions in DVR PlayReady Encryption
    • Improved locking and try/catch in DVR PlayReady Encryption
    • Fixed problem where 2 out of sync ABR DVR streams could result in a playlist that was referring to purged chunks resulting in "record does not exist." log messages
    • Improved code that determines if a record should be part of the aligned streams or not by using the UTC or PACKET time based playlist request instead of the scaled DVR request
    • Improved logging when DVR record is not found and "dvrDebugMbrDetailsWhenRecordDNE" is enabled
    • Improved some DVR manager logging statements that were missing context
    • Fixed DVR MBR problem where last chunk could be omitted from playlist
    • Improved efficiency of shifting DVR entries for long sets of data after purges
    • Fixed incorrect duration in San Jose MBR DVR chunks when many chunks are missing and shifting occurs
    • Fixed case where DVR Smooth streaming could return malformed XML when expected streams were not present
    • Fixed problem where DVR recorder was using streamName as recording name instead of name set via onLiveStreamDvrRecorderCreate callback
    • Added DVR/Properties property "dvrCupertinoPlaylistAllowCaching" (Boolean, default:false) to allow control of #EXT-X-ALLOW-CACHE
    • Added DVR MBR property "dvrDebugMbrDetailsWhenRecordDNE" (Boolean, default: false) to provide additional logging details when alignment can't find suitable alternate record
    • Added DVR encryption delegate implementation that adds logging of encryption info per request. Turned on by setting DVR Property dvrPlaylistEncryptionInfoDelegate to "com.wowza.wms.dvr.impl.DvrLoggingEncryptionInfoDelegate"
    • Added check that DVR Cupertino encryption info isValid() before using it in manifest or chunk delivery
    • Tightened up DVR Cupertino encryption logic, including added some additional try/catch and additional checking for unusual conditions
    • Added detailed logging if DVR Cupertino encryptor fails upon initialization or during encryption
    • Improved context information in warning message when DVR manifest parser can't find the sub-folder's manifest file
    • Fixed DVR issue where the DVR mbr alignment manager was not releasing memory on shutdown of DVR store
    • Improved DVR chunk purging code to ensure unpurged AVD chunks remain in alignment
    • Fixed problem where large DVR stores would update the manifest.txt during the initial reading of the DVR store
    • Fixed problem where empty DVR/Store property defaulted to dvrfilestorage type. This caused edge servers to try to pull from disk if they happened to be running on same machine as the origin machine
    • Fixed problem in DVR Smooth manifest where DvrWindowDuration was incorrectly set to smaller of total DVR duration and specified DVR sliding window length. In cases where DVR sliding window had not been reached, Silverlight player would total length shorter than it actually was.
    • Improved Smooth Streaming log message when DVR store not found by adding requested store name to message
    • Improved DVR MBR Smooth streaming MBR chunk retrieval algorithm to better handle near time misses

    Wowza Transcoder

    • Fixed double Speex warning with file writing
    • Improved transcoder to pull frameRate from the SDP data if not in SPS data and re-streaming and RTSP source
    • Fixed problem with audio bitrate calculation in transcoder when pulling data from SDP info
    • Updated video overlay code to intelligently calculate if entire image is transparent. If yes, then we remove the overlay to save CPU cycles overlaying 100% transparent image
    • Added support for monitoring the Wowza Transcoder overlay images for updates
    • Added encoding parameters for H.263 and Quick Sync on Linux
    • Added transcoder properties for H.263 and Quick Sync on Linux
    • Added support for Intel Quick Sync on Linux
    • Added Quick Sync for Linux vui parameters to SPS packets
    • Added Quick Sync for Linux auto calculation of level_idc parameters
    • Added Quick Sync for Linux added warning if main or high profile that only baseline supported
    • Added Quick Sync for Linux compiled on CentOS which should be more compatible
    • Added Quick Sync for Linux warning of va call failure
    • Fixed Wowza Transcoder memory leak associated with AAC-HE encoding
    • Improved Wowza Transcoder internals to support B-frames
    • Fixed problem in transcoder where frame rate was incorrect when using skipframe
    • Fixed problem with NVidia CUDA device detection introduced in patch8
    • Added support for B-frames when using the transcoder
    • Updated transcoder templates transcode.xml and transrate.xml to add H.263 <Encode> block (disabled by default)
    • Added H.263 encoding support to Wowza Transcoder
    • Updated Wowza Transcoder audio behind filter default from 6000 to 12000
    • Improved Wowza Transcoder behind filter so that it only logs audio/video behindness if that type of media is being transcoded
    • Updated Wowza Transcoder to MainConcept 9.5.0 libraries
    • Added boolean Transcoder/Properties property behindFilterLog to enable logging of detailed transcoder behind filter information
    • Changed Speex library to be statically linked into transcoder
    • Changed names of Linux shared libraries to match renditions returned through ldd
    • Improved Speex decoder to be more fault tolerant
    • Removed libvorbisenc.so which is no longer needed

    Wowza DRM

    • Added keyformat constant for identity keyformat
    • Cleaned up on-the-fly PlayReady decryptor API
    • Fixed problem with non-supported media packets getting into transcoder
    • Added new Apple HLS PlayReady implementation renditions to DVR
    • Tweaked Apple HLS PlayReady chunk encryption
    • Added support for Apple HLS PlayReady DRM protection to ModuleDRMBuyDRM
    • Improved Apple HLS AES encryption implementation
    • Added support for PlayReady envelope encryption of Apple HLS (not yet documented)
    • Fixed problem with CupertinoRepeaterHolder serializer and new encryption schemes
    • Added new Apple HLS PlayReady implementation rendition (there are now two forms: CHUNK-PLAYREADY and ENVELOPE-PLAYREADY)
    • Added Apple HLS PlayReady chunk encryptor
    • Added code to decrypt PlayReady files on the fly for HTTP vod delivery

    Live Stream Record

    • Added new live stream record life cycle tracker
    • Integrated Live Stream Record AddOn into base code

    Push Publishing

    • Modified Push Publishing to allow multiple streamNames that are equal
    • Modified Push Publishing to be configuration file based (map and profile)