iOS Release Notes

v1.0.5

1.0.5.735

  • Fixed an issue that would cause an error in the audio config if no defaults were set

1.0.5.733

  • Fixed an issue preventing the audio stream to be restarted once an app was placed in the background

  • Fixed an issue preventing audio from being captured from external devices such as Bluetooth headsets

v1.0.3

1.0.3.726

  • If the hardware audio converter fails, the SDK will fallback and attempt to use a software-based converter.
  • Additional logging diagnostics added to the audio converter.

1.0.3.724

  • Significantly improved error detection and reporting for the audio encoding components of the SDK.

  • Specifying the audio sample rate and bitrate as 0 in WZMediaConfig or WowzaConfig will cause the SDK to query the device for the optimal values. Specifying a sample rate but leaving the bitrate as 0 will cause an optimal bitrate to be chosen for the specified sample rate.

  • Added the static method (NSArray *_Nullable) supportedBitratesForSampleRateAndChannels:(Float64)sampleRate channels:(UInt32)numChannels to the WZAudioDevice class that will return an NSArray of NSNumbers that contain the audio encoding bitrates supported for the specified audio sample rate and number of audio channels.

1.0.3.699

  • Added a connectionParameters property to the WZStreamConfig class allowing you to define a WZDataMap of name/value pairs that will be used as query string parameters to the server connection string.

  • Added a mirrorFrontCamera bool property to WowzaConfig (WZMediaConfig) to allow clients to set the mirroring behavior of front camera recording. Defaults to YES, which matches the pre-existing behavior of recording with the front camera.

1.0.3.581

  • Fixed an issue with the background encoding flag when an app is resumed

1.0.3.579

WowzaGoCoderSDK

  • Fixed issue where endStreaming wasn't releasing reference to event listener; this was causing client objects to be retained.

1.0.3.576

WowzaGoCoderSDK

  • Fixed a bug related to cropping non-canonical frame sizes.

1.0.3.573

WowzaGoCoderSDK

  • Observers can now safely be removed inside a callback.

SDK Sample Apps

  • The Objective-C SDKSampleApp now demonstrates the proper way to interact with metadata. All metadata related APIs have now been documented

1.0.3.565

WowzaGoCoderSDK

  • The x86 code stripes in the fat-binary SDK file are now built with bitcode enabled. This should address the issue customers were having with creating bitcode-compliant apps built against our SDK.

1.0.3.545

WowzaGoCoderSDK

  • The SDK is now built with Xcode 8. Developers should be using Xcode 8 if they wish to use this version of the SDK.

SDK Sample Apps

  • The Swift-based samples have been updated to Swift 3.0 syntax. All sample apps now require Xcode 8.

v1.0.2

1.0.2.506

WowzaGoCoderSDK

  • Fixed a couple potential memory leaks with the PCM audio code.

  • Added a bit more intelligence to the startBroadcasting function to not call stop if not already broadcasting

1.0.2.489

WowzaGoCoderSDK

  • Fixed a bug in the audio encoder that was affecting some users.

1.0.2.472

WowzaGoCoderSDK

  • Added support for IPV6 addressing

  • Update the audio encoder to generate an audio prime frame if the writer doesn't encounter one

1.0.2.469

SDK Sample Apps

  • Fixed a few bugs in the MP4 writing example.

1.0.2.466

WowzaGoCoderSDK

  • The SDK now supports broadcasting while the host application is in the background. A new flag has been added to WowzaConfig - backgroundBroadcastEnabled. The default value is NO. If you wish to broadcast in the background, your application must add the Audio Background Mode capability, and you should set backgroundBroadcastEnabled to YES. While broadcasting in the background, only live audio will be broadcasted, since access to the camera is prohibited while the application is in the background. While in the background, a frozen video frame will be broadcast in place of live video.

  • Added a new WZAudioSink protocol method: audioPCMFrameWasCaptured. Clients implementing this protocol can use it to modify the PCM audio frames before they are encoded to AAC and broadcasted.

SDK Sample Apps

  • Updated the SDKSampleApp to include a setting for changing the newly added backgroundBroadcastEnabled flag; and the SDKSampleApp now includes the Audio background mode.

v1.0.1

1.0.1.459

WowzaGoCoderSDK

  • Fixed a bug in the onWZEvent callback wherein the WZStatus data member was not being set correctly for the WZEventBitrateReduced and WZEventBitrateIncreased events.

1.0.1.456

WowzaGoCoderSDK

  • Fixed a bug with audio conversion on A5 devices.

1.0.1.451

WowzaGoCoderSDK

  • Added videoFrameRateLowBandwidthSkipCount param to WZMediaConfig; used to set the number of video frames to skip when the encoder cannot keep up with the broadcaster.

  • Added optional videoCaptureInterruptionStarted method to WZVideoSink. Called when video capture is first interrupted - for example, when the app goes into the background.

1.0.1.424

WowzaGoCoderSDK

  • Fixed an issue wherein muted audio would cause the video stream to hang in Apple HLS players.

1.0.1.420

WowzaGoCoderSDK

  • Added behavior wherein an audio sample rate of 0 set in the config will cause the SDK to choose an optimal sample rate based on the current hardware capabilities.

1.0.1.398

WowzaGoCoderSDK

  • Added interfaces to WZAudioDevice and WowzaGoCoder to allow setting the AVAudioSessionCategoryOptions for the shared AVAudioSession.

  • The initial video orientation is now based on UI orientation instead of device orientation. This fixes an orientation issue with previews that are embedded within a presented view controller's view.

1.0.1.391

WowzaGoCoderSDK

  • Fixed an issue wherein broadcasting audio only was also broadcasting blank video frames.

1.0.1.388

WowzaGoCoderSDK

  • Fixed an issue where broadcasted frames would be oriented incorrectly when initial broadcast orientation is UIDeviceOrientationLandscapeLeft and device is then rotated to UIDeviceOrientationLandscapeRight.

1.0.1.377

WowzaGoCoderSDK

  • Added a newWZBroadcastScaleMode type and parameter to WZMediaConfig (a.k.a WowzaConfig). The 2 values for WZBroadcastScaleMode are:

    • WZBroadcastScaleModeAspectFit
    • WZBroadcastScaleModeAspectFill

This setting tells the SDK how to scale and/or crop frames whose sizes don't match the specified broadcast size. The most common example of this frame size mismatch occurs when the device is rotated while encoding.

SDK Sample Apps

  • Updated the SDKSampleApp and SwiftSDKSampleApp to include a setting for changing the newly added WZBroadcastScaleMode.

1.0.1.377

WowzaGoCoderSDK

  • Added a new WZBroadcastScaleMode type and parameter to WZMediaConfig (a.k.a WowzaConfig). The 2 values for WZBroadcastScaleMode are:

    • WZBroadcastScaleModeAspectFit
    • WZBroadcastScaleModeAspectFill

    This setting tells the SDK how to scale and/or crop frames whose sizes don't match the specified broadcast size. The most common example of this frame size mismatch occurs when the device is rotated while encoding.

SDK Sample Apps

  • Updated the SDKSampleApp and SwiftSDKSampleApp to include a setting for changing the newly added WZBroadcastScaleMode.

1.0.1.367

WowzaGoCoderSDK

  • Added the following methods to WowzaGoCoder:

    • registerVideoEncoderSink:WZVideoEncoderSink
    • unregisterVideoEncoderSink:WZVideoEncoderSink
    • registerAudioEncoderSink:WZAudioEncoderSink
    • unregisterAudioEncoderSink:WZAudioEncoderSink
  • Clients can now access encoding audio and video frames if they wish to.

  • Fixed an issue with the documentation that is released with the SDK not being up-to-date with the SDK headers.

SDK Sample Apps

  • WowzaGoCoderSDKSampleApp has been updated to demonstrate the writing a local MP4 movie of the broadcasted video stream.

1.0.1.348

WowzaGoCoderSDK

  • The following class methods were added to WowzaGoCoder:

    • (void) requestPermissionForType:(WowzaGoCoderPermissionType)type response:(nullable WZPermissionBlock)response;
    • (WowzaGoCoderCapturePermission) permissionForType:(WowzaGoCoderPermissionType)type;
  • These allow clients to explicitly request camera and microphone access permission. Previously, it was the case that the SDK would cause these permission requests to occur as camera and microphone resources were accessed during the preview/broadcasting lifecycle. It is still the case that if the client application doesn't explicitly make these permission requests, the SDK will do it at appropriate times. Clients are encouraged, however, to use these explicit mechanisms as client applications know best when these prompts should be displayed to the user.

  • Streaming will now fail if the client specifies that audio or video is enabled in their config, and permission for the corresponding audio or video resource is denied. Similarly, streaming will fail if the config specifies audio, and the microphone is being used by a higher-priority application (such as the Phone app, or a VOIP app).

  • The H264Encoder's stopBroadcasting method is now synchronized with the capture device's capture queue; this may address an issue with runaway encoding sessions.

SDK Sample Apps

  • WowzaGoCoderSDKSampleApp and WowzaGoCoderSDKSampleApp.swift have been updated to demonstrate the use of the explicit requestPermissionForType requests.

v1.0.0

1.0.0.338

  • WZCameraPreview now provides access to the underlying AVCaptureVideoPreviewLayer; this will allow clients to update the AVCaptureVideoPreviewLayer when the bounds change in client views that host the preview layer.

1.0.0.333

WowzaGoCoderSDK

  • Fixed a crash that would occur when doing audio-only broadcasting using the WowzaGoCoder interface.

1.0.0.330

WowzaGoCoderSDK

  • Added the following new event types to WZEvent:
    • WZEventBitrateReduced
    • WZEventBitrateIncreased
    • WZEventEncoderPaused
    • WZEventEncoderResumed

Clients that implement the WZStatusCallback protocol can listen for these bitrate related events via onWZEvent

  • Added an NSDictionary property named "data" to WZStatus. This property will contain data releated to the WZStatus for particular Event cases. See documenation for further details.

  • Deprecated the videoBitrateDidChange method of the WZVideoEncoderSink protocol. This protocol method still exists and will be called, but will be removed in the next major SDK revision. Clients should use the WZEvent related methods in order to get informed about bitrate changes.

  • Fixed a cropping bug in cases where the config frame size does not match a device preset frame size.

1.0.0.323

WowzaGoCoderSDK

  • In the WZStatusCallback protocol, the following method signatures have been changed in order to reduce the chance of collision with identically named methods in other sources/libraries.

    • onSuccess is now named onWZStatus
    • onEvent is now named onWZEvent
    • onError is now named onWZError

PLEASE NOTE: THIS IS A BREAKING CHANGE, AND YOUR CODE WILL NEED TO BE UPDATED TO USE THESE NEW METHOD NAMES

SDK Sample Apps

  • All sample apps have been updated to reflect the changes to the WZStatusCallback protocol.

1.0.0.318

WowzaGoCoderSDK

  • The SDK is now also available as a static library; the static library and associated headers can be found in the 'wowzagocoder_static_lib' directory.

  • Added a getting started guide to the 'docs' directory: ios_getting_started.html

  • Improved the formatting and location of the API reference: now just open the 'api-reference.html' file in the 'docs' directory.


1.0.0.310

WowzaGoCoderSDK

  • Added 'videoCaptureInterruptionEnded' as an optional protocol method to WZVideoSink. See documentation for the WZVideoSink class for more information about this protocol.

  • Fixed a frame stretching issue when captured video and/or preview rotates are false, and capture aspect ratio didn't match broadcast aspect ratio.

SDK Sample Apps

  • NEW WowzaGoCoderMP4PlayerSample.swift.xcodeproj; this is a Swift sample app that demonstrates how to broadcast the frames from a local MP4 file using an AVAssetReader.

  • Added 'AllSampleApps.xcworkspace', which contains all of the individual sample app projects.


1.0.0.296

WowzaGoCoderSDK

  • Fixed video orienation bug when broadcasting from the front camera with 'videoPreviewRotates' set to NO and 'capturedVideoRotates' set to YES.
  • Video broadcasted from the front camera is now mirrored.

SDK Sample Apps

  • Renamed the sample app projects so they are grouped together in the 'sample-apps' folder: SDKSampleApp.xcodeproj is now: WowzaGoCoderSDKSampleApp.xcodeproj SceneKitReel_GoCoder.xcodeproj is now: WowzaGoCoder.SceneKitReel.xcodeproj WowzaGoCoderSDKSampleApp.swift.xcodeproj: This is a new project, a Swift implementation of the functionality in the WowzaGoCoderSDKSampleApp project.

1.0.0.287

WowzaGoCoderSDK

  • Removed 'portraitLetterBoxed' property from WZMediaConfig. Use the new 'broadcastVideoOrientation' property instead.

  • Added 'broadcastVideoOrientation' property to WZMediaConfig, of type (enum) 'WZBroadcastOrientation'. This provides a more explicit mechanism than the former 'portraitLetterBoxed' property for clients to specify how they want the broadcasted video oriented.

  • Removed 'WZErrorLowBandwidth'. This condition is now reported via the new 'onEvent' protocol method of WZStatusCallback (also, see item below).

  • Added 'event' property, of type WZEvent (enum), to WZStatus. Used to communicate event information emitted by the encoders or capture devices.

  • Removed 'videoFrameWasEncoded' and 'videoBitrateDidChange' protocol method definitions from WZVideoSink (they are now in WZEncoderSink)

  • Added access to the WowzaGoCoder encoder via the following new classes and protocols: WZH264Encoder WZAACEncoder WZAudioDevice WZVideoEncoderSink WZAudioEncoderSink WZBroadcastComponent WZBroadcast

*SDKSampleApp

  • Sample app directory is now named "sample-apps" (plural, because now there is more than one, see below).

  • The settings screen has been updated to include the 3 options for setting broadcastVideoOrientation.

  • The sample app now implements the new 'onEvent' method, which it uses to get notified on low bandwidth conditions.

NEW == SceneKitReel_GoCoder Sample App ==

  • This is Apple's SceneKitReel sample, with WowzaGoCoder broadcasting added. This sample will show you how to broadcast a game app's screen (or any bitmap data) to WowzaGoCoder using the new WZBroadcast, WZH264Encoder, WZAudioDevice, WZAACEncoder and WZBroadcastComponent classes and protocols.

1.0.0.255

WowzaGoCoderSDK

  • Added 'videoBitrateLowBandwidthScalingFactor' and 'videoFrameBufferSizeMultiplier' properties to WZMediaConfig; these enable finer client control over bandwidth throttling behavior.

  • Added WZVideoSink and WZAudioSink protocols, as well as mechanisms to register adopters of these protocols with WowzaGoCoder.

  • Increased socket send buffer size to 1MB (from default of 128ish K). This should provide better performance for high-latency networks.

*SDKSampleApp

  • Added UI to Settings to allow videoBitrateLowBandwidthScalingFactor, videoFrameBufferSizeMultiplier, videoBitrate, videoFrameRate and videoKeyFrameInterval to be adjusted by the user.

  • VideoPlayerViewController now implements the WZVideoSink and WZAudioSink protocols.

  • Added functionality to conditionally convert captured video frames to grayscale as an example of what one might do when implementing the WZVideoSink protocol.


1.0.0.249

WowzaGoCoderSDK

  • Increased the maximum number of buffered frames that must accumulate before bandwidth throttling kicks in from 50 to 120 (or, more accurately, 4x the current frame rate).

1.0.0.245

WowzaGoCoderSDK

  • Documentation! GoCoder SDK documentation can now be found in the "Docs" directory of the distribution package; index.html is the landing page.

  • Removed 'WZPreset' enumeration and replaced with 'WZFrameSizePreset'.

  • Removed WZSession.
  • Added 'audioMuted' flag to WowzaGoCoder.
  • Added WZMediaConfig and WZStreamConfig classes, but subclasses of WowzaConfig, thus: WZMediaConfig -> WZStreamConfig -> WowzaConfig. Changes are largely transparent to clients.

  • Removed 'hasCapability' method from WZCamera

  • Removed 'activated' property from WZCamera
  • Added 'hasTorch' property to WZCamera
  • Added 'supportsFocusMode' method to WZCamera
  • Added 'supportsExposureMode' method to WZCamera
  • Removed 'deviceOrientation' from WZCameraPreview
  • Removed 'WZVideoDisplayOrientation' enum
  • Removed 'orientationLocked' from WZCameraPreview
  • Removed 'frameSize' from WZCameraPreview
  • Removed isSwitchCameraAvailable method from WZCameraPreivew, since it was mis-leading; use the isSwitchCameraAvailableForConfig:WZMediaConfig method instead; or if you just want to know if switching cameras is available at all, use [WZCameraPreview deviceCameras].count > 1

  • Added 'previewGravity' property to WZCameraPreview

  • Added WZCameraPreviewGravity enum
  • Removed 'viewBounds' property of WZCameraPreview; the camera preview will simply be sized to whatever view you provide when init'ing WZCameraPreview

*SDKSampleApp

  • Removed Black and White effect option; will be added back at a

1.0.0.236

WowzaGoCoderSDK

  • Added class method:
    • (nullable instancetype) sharedInstance; to WowzaGoCoder. WowzaGoCoder init methods are no longer available. Instead, do this: if ([WowzaGoCoder sharedInstance] != nil) { [WowzaGoCoder sharedInstance].config = myConfig; // etc... }
  • Added WZPlatformInfo class
  • Added WZVersionInfo class
  • Fixed issue where broadcast messages weren't getting sent if the streaming server goes offline while streaming.
  • Fixed potential call recursion when switching cameras.
  • Improved error handling in WOWZ protocol (read and write)
  • WowzaGoCoder cameraView can now be set multiple times; setting it resets any active previews, capture sessions and audio sessions.
  • When the broadcaster encounters limited bandwidth scenarios, it no longer terminates the broadcast session; it just reports the limited bandwidth to the client as an error.

*SDKSampleApp

  • Added logic to only show an error alert once for a given broadcast session.

1.0.0.216

WowzaGoCoderSDK

  • Video orientation modifications:
  • removed the 'captureOrientationBehavior' BOOL and 'WZCaptureOrientationBehavior' enum from WowzaConfig
  • added 'capturedVideoRotates' BOOL to WowzaConfig; if true, captured frames are rotated to match the rotation of the device; if false, the orientation of captured frames matches the orientation of the preview layer at the time streaming begins. Default is false.
  • added 'videoPreviewRotates' BOOL to WowzaConfig; if true, the preview layer rotates when the device rotates; if false, the preview layer orientaion never changes. Default is false (which matches the behavior of the iPhone's built in Camera app).
  • added 'portraitLetterBoxed' BOOL to WowzaConfig. If true, portrait orientated frames are cropped to fit into a letterbox format (that is, the canonical width and height of a video frame, in which width is always greater than height). If false, portrait frames streamed in full portrait orientation, and scaled to fit within the stream's frame. Default is false.
  • in addition to the various video size presets enumerated in 'WZPreset', WowzaGoCoderSDK now supports arbitrary frame sizes. The only requirement is that width must be greater than height (which does not preclude portrait video - see portrait settings above).

  • Audio modifications:

  • 'audioChannels', 'audioSampleRate' and 'audioBitrate' properties in WowzaConfig are now read/write. This allows the client to set these properties prior to streaming.

  • In 'WZCameraPreview', the 'isSwitchCameraAvailable' method now takes a a BOOL parameter 'withoutRestart'. This effectively means "can I switch cameras without restarting the video stream?". If 'withoutRestart' is 'YES', then 'isSwitchCameraAvailable' will only return true if the other camera supports the current video configurations as specified in WowzaConfig. A new method:

    • (BOOL) isSwitchCameraAvailableForConfig:WowzaConfig has also been added, which will return true only if the 'other' camera supports the settings in the specified WowzaConfig. Additionally, the 'switchCamera' method will fail if the config currently in use is not supported by the 'other' camera. See the SDKSampleApp for an example of a strategy to employ in order to make camera switching available along with whatever config changes need to be made to achieve camera switching behavior.
  • In 'WowzaGoCoder', the class method: (void) setLogLevel:(WowzaGoCoderLogLevel)level has been added. Available log levels are: 'WowzaGoCoderLogLevelOff' - emit no NSLog statements from the SDK 'WowzaGoCoderLogLevelDefault' - emit a minimum of generally useful log statements from the SDK. This is the default level if the client doesn't otherwise specifiy a log level. 'WowzaGoCoderLogLevelVerbose' - emit all available log statements from the SDK; in this mode, you will see log statements for each encoded video frame, so the output is really quite verbose.

SDKSampleApp

  • The options in the Settings screen have been updated to reflect the video orientation modifications and Audio modifications as described above.