This document introduces the live playback feature of the Video Cloud SDK.
The table below lists the common protocols used for live streaming. We recommend FLV URLs (which start with http
and end with flv
) for LVB and WebRTC for LEB. For more information, please see LEB.
Protocol | Pro | Con | Playback Latency |
---|---|---|---|
HLS | Mature, well adapted to high-concurrency scenarios | SDK integration is required. | 3s - 5s |
FLV | Mature, well adapted to high-concurrency scenarios | SDK integration is required | 2s - 3s |
RTMP | Relatively low latency | Poor performance in high-concurrency scenarios | 1s - 3s |
WebRTC | Lowest latency | SDK integration is required | < 1s |
Note:LVB and LEB are priced differently. For details, please see LVB Billing Overview and LEB Billing Overview.
The Video Cloud SDK does not impose any limit on the sources of playback URLs, which means you can use it to play both Tencent Cloud and non-Tencent Cloud URLs. However, the player of the SDK supports only live streaming URLs in FLV, RTMP, HLS (M3U8), and WebRTC formats and VOD URLs in MP4, HLS (M3U8), and FLV formats.
Regarding frequently asked questions among developers, Tencent Cloud offers a straightforward API example project, which you can use to quickly learn how to use different APIs.
Platform | GitHub Address |
---|---|
iOS | Github |
Android | Github |
Flutter | Github |
Download the SDK and follow the instructions in SDK Integration to integrate the SDK into your application.
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
String licenceURL = ""; // your licence url
String licenceKey = ""; // your licence key
V2TXLivePremier.setEnvironment("GDPR"); // set your environment
V2TXLivePremier.setLicence(this, licenceURL, licenceKey);
V2TXLivePremier.setObserver(new V2TXLivePremierObserver() {
@Override
public void onLicenceLoaded(int result, String reason) {
Log.i(TAG, "onLicenceLoaded: result:" + result + ", reason:" + reason);
}
});
}
Note:The packageName configured in the license must be the same as the application itself, otherwise the play stream will fail.
For the player to display video images, you need to add a rendering view in the layout XML file:
<com.tencent.rtmp.ui.TXCloudVideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:visibility="visible"/>
The V2TXLivePlayer module in the Video Cloud SDK offers live playback capabilities. Use the setRenderView API to associate the module with the video_view control added to the UI in Step 3.
// mPlayerView is the view added in step 1
TXCloudVideoView mView = (TXCloudVideoView) view.findViewById(R.id.video_view);
// Create a player object
V2TXLivePlayer mLivePlayer = new V2TXLivePlayerImpl(mContext);
// Associate the player object with the view
mLivePlayer.setRenderView(mView);
String flvUrl = "http://2157.liveplay.myqcloud.com/live/2157_xxxx.flv";
mLivePlayer.startPlay(flvUrl);
video_view
control added in Step3.Value | Description |
---|---|
V2TXLiveFillModeFill | Images are scaled to fill the entire screen, and the excess parts are cropped. There are no black bars in this mode, but images may not be displayed in whole. |
V2TXLiveFillModeFit | Images are scaled as large as the longer side can go. Neither side exceeds the screen after scaling. Images are centered, and there may be black bars. |
Value | Description |
---|---|
V2TXLiveRotation0 | Original |
V2TXLiveRotation90 | Rotate 90 degrees clockwise |
V2TXLiveRotation180 | Rotate 180 degrees clockwise |
V2TXLiveRotation270 | Rotate 270 degrees clockwise |
// Set the fill mode
mLivePlayer.setRenderFillMode(V2TXLiveFillModeFit);
// Set the rotation of video
mLivePlayer.setRenderRotation(V2TXLiveRotation0);
Technically speaking, you cannot pause a live playback. In this document, by pausing playback, we mean freezing video and disabling audio. In the meantime, new video streams continue to be sent to the cloud. When you resume playback, it starts from the time of resumption. This is in contrast to VOD. With VOD, when you pause and resume playback, the player behaves the same way as it does when you pause and resume a local video file.
// Pause playback
mLivePlayer.pauseAudio();
mLivePlayer.pauseVideo();
// Resume playback
mLivePlayer.resumeAudio();
mLivePlayer.resumeVideo();
Call stopPlay
to stop playback.
mLivePlayer.stopPlay();
Call snapshot to take a screenshot of the live video streamed. This method captures a frame of the streamed video. To capture the UI, use the corresponding API of the Android system.
mLivePlayer.setObserver(new MyPlayerObserver());
mLivePlayer.snapshot();
// Get the screenshot taken in the onSnapshotComplete callback of MyPlayerObserver
private class MyPlayerObserver extends V2TXLivePlayerObserver {
...
@Override
public void onSnapshotComplete(V2TXLivePlayer v2TXLivePlayer, Bitmap bitmap) {
}
...
}
The live playback feature of the SDK is not based on FFmpeg, but Tencent Cloud’s proprietary playback engine, which is why the SDK offers better latency control than open-source players do. We provide three latency control modes, which can be used for showrooms, game streaming, and hybrid scenarios.
Mode | Stutter | Average Latency | Scenario | Remarks |
---|---|---|---|---|
Speedy | More likely than the speedy mode | 2-3s | Live showroom (Chongding Dahui) | The mode delivers low latency and is suitable for latency-sensitive scenarios. |
Smooth | Least likely of the three | >= 5s | Game streaming (Penguin Esports) | Playback is least likely to stutter in this mode, which makes it suitable for ultra-high-bitrate streaming of games such as PUBG. |
Auto | Self-adaptive to network conditions | 2-8s | Hybrid | The better network conditions at the audience end, the lower the latency. |
// Auto mode
mLivePlayer.setCacheParams(1.0f, 5.0f);
// Speedy mode
mLivePlayer.setCacheParams(1.0f, 1.0f);
// Smooth mode
mLivePlayer.setCacheParams(5.0f, 5.0f);
// Start playback after configuration
Note:For more information on stuttering and latency control, see Video Stutter.
You can bind a V2TXLivePlayerObserver to your V2TXLivePlayer
object to receive callback notifications about the player status, playback volume, first audio/video frame, statistics, warning and error messages, etc.
Parameter | Description |
---|---|
appCpu | CPU usage (%) of the application |
systemCpu | CPU usage (%) of the system |
width | Video width |
height | Video height |
fps | Frame rate (fps) |
audioBitrate | Audio bitrate (Kbps) |
videoBitrate | Video bitrate (Kbps) |
intervalMs
parameter of enableVolumeEvaluation
.Other callbacks are triggered when specific events occur.
Was this page helpful?