GoCoder SDK for Android release notes

Wowza GoCoder™ SDK is regularly updated with bug fixes as well as new features and functionality. This article describes the latest updates of Wowza GoCoder SDK for Android.

Latest version

The latest version of Wowza GoCoder SDK for Android is Wowza GoCoder SDK 1.6.0 build 628.

Changes (since

  • Added a Kotlin sample app that uses the GoCoder SDK to play a live stream.
  • Updated the Event and MetaData sample app to showcase a ping request using the sendPingRequest from the WOWZBroadcast class instead of sendDataEvent.
  • Removed Facial Recognition from the sample apps and documentation.
  • Updated access and navigation for GoCoder SDK downloads and API reference docs.
  • Fixed an issue with setScaleMode where the broadcasted stream added black bars to the top and bottom of the playback frame when the orientation changed from portrait to landscape.
  • Fixed an issue where WOWZStatus.clearLastError(int newState) incorrectly cleared out the last error before validating the newState.
  • Fixed an issue where WOWZStatus.setState(int state) didn't set the state to UNKNOWN for an invalid state.
  • Fixed an issue where WOWZPlayerView.registerDataEventListener() threw a NullPointerException.
  • Fixed an issue where the WOWZDataMap wowzDataMap parameter returned null when using onTextData events.
  • Fixed issue where builds don't install on Android devices unless Kotlin (configuration) plugins are installed.
  • Fixed an issue where audio-only broadcasts to Wowza Streaming Engine didn't play using Apple HLS.
  • Fixed an issue where monitoring statistics were not displaying in the logs when broadcasting an authenticated stream to Wowza Streaming Engine.

Known Issues

  • The WOWZCamera class sometimes fails to detect a camera's support for 4K video. As a result, 4K broadcasting isn't working on all Android devices.
  • Pixelation may occur when broadcasting high-motion content from the GoCoder on iOS v1.5.1.949 to Wowza Streaming Engine with playback on Android devices using WOWZPlayerAPI.
  • Player crashes on playback of ultra low latency pull stream on app restarts.
  • When audio is set to disabled in an app, a black video shows when using ultra low latency and Wowza Player.
  • A null pointer exception can occur when using a bitmap overlay and trying to remove and add an image.
  • Custom rendering requests on WOWZPlayer aren't supported.
  • When calling WOWZBitmap.setBitmap(Bitmap) to update the image, the camera view instead shows a black image instead of the new image.
  • When setting hard-coded xpos and ypos values for WOWZText object, and querying the values through getPosition, the value for xpos returns incorrectly.
  • When streaming from an SDK app to Wowza Streaming Engine, the frame rate reported on Wowza Streaming Engine (and from VLC) doesn't match the configured frame rate on the app. This is only for the source stream. A transcoded stream is correctly reporting the frame rate.
  • Android Sample App FPS not changing from Default 30 FPS.
  • When playing a stream that’s broadcast from a GoCoder SDK app, if the broadcasting device is rotated and network conditions contribute to packet loss, pixelation and pausing may occur on the Android playback device.
  • With OpenGL ES output the timer shows seconds going at the correct pace, but when played back with Wowza Streaming Engine the seconds are going 1.5+ times faster.

Earlier versions of Wowza GoCoder SDK for Android

Version 1.5.0

1.5.0 build 0609

  • Changed the prefix of all WZ classes to WOWZ to be consistent with the naming convention in Wowza GoCoder SDK for iOS. This is a breaking change. You must update your code.
  • Added the capability to play streams, including ultra low latency streams from the Wowza Streaming Cloud™ service, using the WOWZPlayerAPI class. The WOWZPlayerAPI supports Apple HLS fallback, video- and audio-only streams, preroll buffering, data events, mono and stereo audio, and audio sample rates up to 48 kHz.
  • Added support for connection codes for live streams and ultra low latency streams from Wowza Streaming Cloud.
  • Added the WOWZBroadcastAPI.AdaptiveChangeListener interface, which allows you to determine your own logic for modifying bitrates and frame rates instead of using Wowza's algorithms.

Known Issues

  • The WOWZCamera class sometimes fails to detect a camera's support for 4K video. As a result, 4K broadcasting isn't working on all Android devices.
  • High-motion content encoded with the MainConcept H.264 codec in Telestream Wirecast may result in pixelation and possibly freezing when playing ultra low latency streams using the WOWZPlayerAPI. If possible, when streaming high-motion, ultra low latency content from Wirecast, use a different codec.
  • Pixelation may occur when broadcasting high-motion content from the GoCoder on iOS v to Wowza Streaming Engine with playback on Android devices using WOWZPlayerAPI.

Version 1.0.2

1.0.2 build 357

  • Added the WZDataItemWZDataMapWZDataList, WZDataTypeWZDataEvent classes, which can be used to send and receive metadata.
  • Fixed an issue that sometimes occurred if the audio time stamps fell behind while capturing the stream locally to MP4.
  • Fixed issues that caused the SDK sample app to crash when:
    • The SDK sample app was put in the background or endBroadcast(false) was called.
    • Camera and/or microphone permissions are denied and the app tries to initialize the camera.
  • Fixed an issue with the SDK that caused the GoCoder app to stop responding when a broadcast over 10 seconds was ended.
  • Fixed an issue that caused inaccurate version information to display for SDK sample apps.
  • Updated the SDK sample app to use the setOffset(ms) method to publish an MP4 file as a stream from a different point in the file.

Version 1.0.1

1.0.1 build 346

  • Fixed an issue that sometimes caused an app to fail when rendering overlay text with the WZText API class.
  • Fixed an issue that caused audio-only streams to broadcast with an improperly added video configuration.
  • Added additional error checking and logging to trap improper use of the lower-level encoder classes.
  • Added a warning log statement that is logged if a WZRenderAPI.VideoFrameRenderer implementation attempts to call onWZVideoFrameRendererDraw() before onWZVideoFrameRendererInit() has been called.

1.0.1 build 340

  • Fixed an issue in WZMP4Writer that sometimes caused a crash or indeterminate state when capturing an MP4 while streaming.
  • Added a screenshot example to the sample app that demonstrates how to register and use a video frame listener with the WZCameraView class.

1.0.1 build 333

  • Updated WZMP4Writer and WZMP4Broadcaster classes to support writing and broadcasting audio tracks respectively.
  • Fixed an issue that sometimes caused an app to hang if the server connection failed.
  • Fixed an issue that sometimes caused a crash if the camera device was locked by another app.

1.0.1 build 318

  • Added the WZGLBroadcaster class, which enables you to capture and stream from video sources other than the WZCameraView and simplifies the process of integrating OpenGL ES-based apps.
  • Added expanded constructors for the QZGLES.EglEnv OpenGL ES utility class, which can be used with a wide variety of OpenGL ES configurations.
  • Expanded and updated the Javadocs.

1.0.1 build 292

  • Improved the encoder I/O pipeline to provide better performance and reliability in low-bandwidth conditions.
  • Fixed an issue that intermittently caused a crash when streaming was stopped.
  • Fixed an issue that sometimes caused the display to flash when streaming for an extended period of time.
  • Fixed an issue with synchronization of the display that sometimes occurred if the device was rotated rapidly.

1.0.1 build 259

  • Fixed an issue with WZCameraView.getCamera() returning null when an app returned to the foreground.
  • Deprecated WZCameraView.getStatus(). Use WZCameraView.getPreviewStatus() instead.
  • Deprecated WZCameraView.isPaused(). Use WZCameraView.isPreviewPaused() instead.
  • Added the getSamplingConfig() and setSamplingConfig(WZBroadcastConfig) methods to the WZAudioDevice class, which enables you to specify custom audio properties from the audio sampler.
  • Added the WZRenderAPI.VideoFrameRenderer class to separate frame renderers from frame listeners (WZRenderAPI.VideoFrameListener), which simplifies the integration model for developing plugins.
  • Added BluetoothActivity, a new activity class, to the SDK sample app that demonstrates how to use a Bluetooth microphone as the audio capture device.

1.0.1 build 248

  • Fixed an issue that caused the aspect ratio of the camera preview to display incorrectly on certain devices.
  • Fixed an issue with activating the camera on single-camera devices.
  • Updated the SDK to correctly report the error that occurs when attempting to publish to an active stream on a Wowza Streaming Engine server that is configured to disallow it.
  • Updated the SDK to make several methods of the WZCamera class public to aid in the development of apps that want to access the camera through methods other than WZCameraView.

1.0.1 build 230

  • Added the setAudioSource() method to the WZAudioDevice class, which can be used to designate a device as the source for the audio stream. See the reference documentation for android.media.MediaRecorder.AudioSource class for a list of values that can be specified.
  • Fixed a critical bug that caused the camera preview to be resized to the video stream's frame size when the broadcast was initiated.
  • Updated the API documentation to remove outdated references to the camera direction specifier also being used as the unique camera ID.
  • Improved error detection and reliability in the audio encoder framework.
  • Fixed a bug in the sample app that occurred on single-camera devices.
  • Outstanding issues that are in progress and should be fixed and available in a new SDK build in the next few days:
    • If the frame size of the camera preview has a different aspect ratio than the size of the WZCameraView containing the preview, the preview may not fill the view completely on certain devices.
    • If the frame size of the camera preview had a different aspect ratio than the frame size specified in the broadcast configuration, the aspect ratio for the video stream may be incorrect on certain devices.

1.0.1 build 219

  • Added support for adaptive bitrate control settings to the WZMediaConfig class.
  • Added support for displaying text overlays in the video stream with the WZText and WZTextManager classes.
  • Added the callback setPreviewReadyListener to WZCameraView to be invoked when the camera preview display is fully initialized.

Version 1.0.0

1.0.0 build 177

  • Fixed an issue that sometimes caused the camera preview to become unresponsive when streaming over a low-bandwidth connection.
  • Improved compatibility with devices running Android APIs 19 to 21.

1.0.0 build 172

  • Fixed an issue with the WZBitmap class that caused a crash when returning to a paused activity.

1.0.0 build 167

  • Fixed a problem that caused the camera preview to fail to start on occasion after the device wakes up.

1.0.0 build 163

  • Added the onResume() and onPause() methods to the WZCameraView class. Call these methods from the corresponding Android activity lifecycle. The sample app was updated to include examples of using these methods in the CameraActivity and CameraActivityBase classes.
  • Added a WZBitmap class to enable the rendering of a bitmap as an overlay in the camera preview display.
  • Added OverlayBitmapActivity to the sample app to demonstrate how to use the WZBitmap features.
  • Renamed the WZRenderAPI.FrameListener interface to WZRenderAPI.VideoFrameListener.
  • Added the WZAudioDevice.AudioSampleListener interface to build audio sample listener classes. This replaces the SampleListener interface.
  • Added the WZAudioDevice.registerAudioSampleListener(...) method to register audio sample listener classes. This replaces the registerFrameListener method.
  • Added the startAudioSampler() and stopAudioSampler() to the WZAudioDevice class to enable sampling the audio input device when not streaming.
  • The only supported audio sample rates are 8000, 11025, 44100, and 48000. If you use WZMediaConfig.setAudioSampleRate to specify an unsupported value, the SDK rounds up to the nearest supported value.
  • Added AudioMeterActivity to the sample app to demonstrate how to use the audio sample listener updates.

1.0.0 build 141

  • Fixed an issue that caused the camera preview to be cropped when the frame sizes didn't match the aspect ration of the screen.
  • Fixed a crash that occurred when stopping the broadcast before it reached a RUNNING state.

1.0.0 build 121

  • Fixed an issue that caused the keyframe interval to be calculated incorrectly for the video stream.
  • Fixed a bug that prohibited errors that occurred during streaming from being reported correctly.
  • Updated the WZCamera and WZCameraView classes to improve error reporting capabilities. The sample app was updated to include examples of how to use these classes in the onResume() method in the CameraActivity class.
  • Added the following methods to WZCamera, which can be used to detect if an error occurred when the SDK was attempting to open the camera:
    • boolean isAvailable()
    • getLastError
    • WZStatus getStatus()
  • Add the getAvailableDeviceCameras() method to the WZCameraView, which can be used to return only cameras that can be successfully opened and accessed without error.
  • Added the getException() method to the WZCameraView, which returns any Java exception associated with an SDK error.
  • Updated the toString() method in the WZMediaConfig class and subclasses so that toString() now returns a detailed list of the configuration properties.
  • Added two classes to the SDK for working with the video track in MP4 files (audio track support coming soon), and updated the sample app to include examples of their use:
    • WZMP4Writer writes an MP4 of the video stream to local storage.
    • WZMP4Broadcaster streams the video from an MP4 file. 
  • Added experimental support for H.264 profiles and profile levels. The sample app has been updated to include an example of querying the available profiles and profile levels in the onSettings method of the CameraActivity class.
    • Added setVideoProfileLevel and getVideoProfileLevel properties to the WZMediaConfig class, which can be used to specify and get the profile and profile levels.
    • Added int [] WZEncoderAPI.getProfiles() which returns an array of the H.264 profile identifiers that are supported by the current device's H.264 encoder.
    • Added WZProfileLevel[] WZEncoderAPI.getProfileLevels(), which returns an array of the WZProfileLevel instances describing the H.264 profiles and profile levels supported by the current device's H.264 encoder.

1.0.0 build 82

  • Fixed a bug that sometimes caused a crash when a device went to sleep.
  • Added the getDefaultBroadcastConfig() method to the WowzaGoCoder class.
  • Added GoCoderSDKActivity, an abstract base activity class, to the sample app to consolidate common activity code.

1.0.0 build 75

  • Added WZSurfaceTexture, a subclass of the Android class SurfaceTexture, that provides a seamless API to render, encode, and stream OpenGL ES output.
  • Added an example that demonstrates how to use the WZSurfaceTexture class to the sample app.
  • Updated the sample app MP4 broadcast example to include an option to loop playback and streaming.
  • Added audio and video bitrate settings to the sample app preference dialogs.

1.0.0 build 65

  • Updated the following method signatures in the WZStatusCallback interface to reduce the chance of collision with identically named methods in other sources and libraries:

    Note: This is a breaking change. Your code must be updated to to use the new method names.

    • onSuccess is now named  onWZStatus.
    • onError is now named onWZError.
  • Added WZRenderAPI, an abstract class, which can be used to develop rendering plugins.
  • Renamed the WZSurfaceRenderer class to WZTextureRenderer.
  • The registerRenderPlugin and unregisterRenderPlugin plugin registration methods are available from the top-level WowzaGoCoder API.
  • Moved the encoder-related classed to the encoder package and rendering-related classes to the render package.
  • Added a package that contains the gles utility class from Grafika, Google's suite of OpenGL ES examples. 
  • Changed the default scaling mode to WZMedia.FILL_FRAME.
  • Added an example to the sample app that demonstrates how to use MP4CaptureActivity to save a video stream to a local MP4 file.
  • Added support for streaming portrait video.

1.0.0 build 51

  • Updated the sample app to manually check and query for required permissions in accordance with the new permissions model in Android 6.0 (Marshmallow).
  • Fixed a bug that caused period crashes when setting the broadcast status.
  • Fixed a miscalculation of the aspect ratio.
  • Fixed a problem that caused periodic crashes on startup with Android 6.0.
  • Fixed an issue that caused the front camera preview to be flipped.
  • Fixed an issue that caused auto-focusing to fail on some devices.
  • Outstanding issue that is in progress and should be fixed and available in the next beta release of the SDK:
    • Video sent while the device is in portrait orientation is letterboxed and send as landscape.

If you're having problems or want to discuss this article, post in our forum.