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.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString * const licenceURL = @"<your licenseUrl>";
NSString * const licenceKey = @"<your key>";
[V2TXLivePremier setEnvironment:@"GDPR"];// set your environment
// V2TXLivePremier located in "V2TXLivePremier.h"
[V2TXLivePremier setLicence:licenceURL key:licenceKey];
[V2TXLivePremier setObserver:self];
NSLog(@"SDK Version = %@", [V2TXLivePremier getSDKVersionStr]);
return YES;
}
#pragma mark - V2TXLivePremierObserver
- (void)onLicenceLoaded:(int)result Reason:(NSString *)reason {
NSLog(@"onLicenceLoaded: result:%d reason:%@", result, reason);
}
@end
Note:The packageName configured in the license must be the same as the application itself, otherwise the play stream will fail.
The V2TXLivePlayer module in Tencent Cloud SDK is responsible for implementing the live broadcast function.
V2TXLivePlayer *_txLivePlayer = [[V2TXLivePlayer alloc] init];
In iOS, a view is used as the basic UI rendering unit. Therefore, you need to configure a view, whose size and position you can adjust, for the player to display video images on.
// Use setRenderView to bind a rendering view to the player
[_txLivePlayer setRenderView:_myView];
Technically, the player does not render video images directly on the view (_myView
in the sample code) you provide. Instead, it creates a subview for OpenGL rendering over the view.
You can adjust the size of video images by changing the size and position of the view. The SDK will make changes to the video images accordingly.
How can I animate views?
You are allowed great flexibility in view animation, but note that you need to modify the transform
rather than frame
attribute of the view.
[UIView animateWithDuration:0.5 animations:^{
_myView.transform = CGAffineTransformMakeScale(0.3, 0.3); // Shrink by 1/3
}];
NSString* url = @"http://2157.liveplay.myqcloud.com/live/2157_xxxx.flv";
[_txLivePlayer startPlay:url];
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 |
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
[_txLivePlayer pauseAudio];
[_txLivePlayer pauseVideo];
// Resume playback
[_txLivePlayer resumeAudio];
[_txLivePlayer resumeVideo];
// Stop playback
[_txLivePlayer stopPlay];
Call snapshot to take a screenshot of the live video streamed. You can get the screenshot taken in the onSnapshotComplete callback of V2TXLivePlayerObserver
. This method captures a frame of the streamed video. To capture the UI, use the corresponding API of the iOS system.
...
[_txLivePlayer setObserver:self];
[_txLivePlayer snapshot];
...
- (void)onSnapshotComplete:(id<V2TXLivePlayer>)player image:(TXImage *)image {
if (image != nil) {
dispatch_async(dispatch_get_main_queue(), ^{
[self handle:image];
});
}
}
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
[_txLivePlayer setCacheParams:1 maxTime:5];
// Speedy mode
[_txLivePlayer setCacheParams:1 maxTime:1];
// Smooth mode
[_txLivePlayer setCacheParams:5 maxTime:5];
// 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?