Android Examples
GitHub Examples
You can find our Android examples on GitHub:
Override Playout Delay
Example Code for overriding the playout delay via a MediaStream object
1import com.phenixrts.common.Disposable;2import com.phenixrts.pcast.MediaStream;3import com.phenixrts.pcast.Renderer;45class SomeClass {6 private Disposable currentRendererPlayoutDelayOverride;7 private Renderer currentRenderer;89 private void setPlayoutDelayOverrideFor10Seconds() {10 final MediaStream mediaStream = ...; // Previously obtained11 this.currentRenderer = mediaStream.createRenderer();1213 // Override playout delay to 900ms for 10 seconds14 final long playoutDelayInMilliseconds = 9001516 this.currentRendererPlayoutDelayOverride = this.currentRenderer.overridePlayoutDelay(playoutDelayInMilliseconds);1718 final Handler handler = new Handler();19 handler.postDelayed(new Runnable() {20 @Override21 public void run() {22 SomeClass.this.currentRendererPlayoutDelayOverride.dispose();23 SomeClass.this.currentRendererPlayoutDelayOverride = null;24 }25 }, 10000);26 }27}
Example Code for limiting video bandwidth with a ExpressSubscriber object
1import com.phenixrts.common.Disposable;2import com.phenixrts.express.ExpressSubscriber;3import com.phenixrts.pcast.Renderer;45class SomeClass {6 private Disposable currentRendererPlayoutDelayOverride;7 private Renderer currentRenderer;89 private void setPlayoutDelayOverrideFor10Seconds() {10 final ExpressSubscriber subscriber = ...; // Previously obtained11 this.currentRenderer = subscriber.createRenderer();1213 // Override playout delay to 900ms for 10 seconds14 final long playoutDelayInMilliseconds = 9001516 this.currentRendererPlayoutDelayOverride = this.currentRenderer.overridePlayoutDelay(playoutDelayInMilliseconds);1718 final Handler handler = new Handler();19 handler.postDelayed(new Runnable() {20 @Override21 public void run() {22 SomeClass.this.currentRendererPlayoutDelayOverride.dispose();23 SomeClass.this.currentRendererPlayoutDelayOverride = null;24 }25 }, 10000);26 }27}
The playout delay represents the amount of time by which audio and video are delayed when content is rendered by a subscriber; i.e. it works as a buffer. The delay adds to the overall end-to-end latency experienced by the user (on top of capture, encoding, and network latencies). It is necessary to handle network-related fluctuations (such as jitter or data loss). By default, the playout delay for real-time streams is set to 230ms. The following API allows app developers to override this default value.
In order to access the API, a reference to a Renderer
is needed. It can be obtained either by creating it from
MediaStream
or ExpressSubscriber
, or via several of the Express APIs, which can return renderers
(joinChannel,
subscribeToMemberStream,
subscribe).
The returned disposable allows control over how long the override should stay in effect; it therefore needs to be held onto via a strong reference. If overridePlayoutDelay
is called multiple times before any of the previous disposables are released, then only the most recent override will remain in effect until its disposable is released. Releasing any of the disposables from earlier overridePlayoutDelay
calls will have no effect.
Notes:
- The override represents an absolute value, not a delta.
- If an override increases the playout delay, it will result in content being paused. Example: changing a delay of 1 second to 5 seconds will cause the content to be paused for roughly 4 seconds.
- If an override decreases the playout delay, it will cause a jump where some of the content will be skipped.
- Very large override values will increase the amount of memory consumed. It is generally recommended to stay below 10 seconds.
Parameters
Name | Type | Description |
---|---|---|
desiredPlayoutDelayInMilliseconds (required) | long | Desired playout delay |
Returns
Type | Description |
---|---|
Disposable | Ensures override is kept in effect for as long as a strong reference is held |