createPlayer method
Create a Native player, it is recommended to call this first, immediately after the constructor.
Implementation
Future<String> createPlayer(
{String? vid, bool preCreated = false, bool useDrm = false}) async {
TTFLogger.i(_logTag, 'createPlayer: hashCode: $hashCode');
if (_playerIsCreated) {
TTFLogger.i(
_logTag, 'createPlayer didCreated before: hashCode: $hashCode');
return "";
}
engineInstanceMethodChannel.setMethodCallHandler((MethodCall call) async {
TTFLogger.e(_logTag, 'native to flutter methodChanel call: $call.method');
switch (call.method) {
case 'seekCompleted':
int seekCount = call.arguments['seekSerialNo'];
bool success = call.arguments['success'];
final callbackId = '${hashCode}_$seekCount';
TTFLogger.i(_logTag, 'seekCompleted: $callbackId');
if (_seekCompletedCallbacks.containsKey(hashCode)) {
_seekCompletedCallbacks[hashCode]?[callbackId]?.call(success);
_seekCompletedCallbacks[hashCode]?.remove(callbackId);
}
break;
case 'seekRenderCompleted':
int seekCount = call.arguments['seekSerialNo'];
final callbackId = '${hashCode}_$seekCount';
TTFLogger.i(_logTag, 'seekRenderCompleted: $callbackId');
if (_seekRenderCompletedCallbacks.containsKey(hashCode)) {
_seekRenderCompletedCallbacks[hashCode]?[callbackId]?.call();
_seekRenderCompletedCallbacks[hashCode]?.remove(callbackId);
}
break;
case 'getHlsStreamInfos':
TTFLogger.i(_logTag, 'getHlsStreamInfos');
String json = call.arguments;
Map<String, dynamic> decodedJson = jsonDecode(json);
TTMasterPlaylist playlist = TTMasterPlaylist.fromJson(decodedJson);
if (_getHlsStreamInfosCallbacks.containsKey(hashCode)) {
_getHlsStreamInfosCallbacks[hashCode]!.call(playlist);
}
break;
case 'selectHlsVideoStream':
if (_selectHlsVideoStreamCallbacks.containsKey(hashCode)) {
int? res = _selectHlsVideoStreamCallbacks[hashCode]!.call();
return res;
}
break;
case 'selectHlsRendition':
int variantIndex = call.arguments;
if (_selectHlsRenditionCallbacks.containsKey(hashCode)) {
int? res =
_selectHlsRenditionCallbacks[hashCode]!.call(variantIndex);
return res;
}
break;
case 'switchHlsBitrate':
int bitrate = call.arguments;
if (_hlsStreamSwitchCallbacks.containsKey(hashCode)) {
_hlsStreamSwitchCallbacks[hashCode]!.call(bitrate);
}
break;
case 'resolutionConfigCompletion':
bool success = call.arguments['success'];
int resValue = call.arguments['completeResolution'];
TTVideoEngineResolutionType resolutionType =
TTVideoEngineResolutionType.transFromValue(resValue);
resolutionConfigCompletion!.call(success, resolutionType);
break;
case 'snapshotCompletion':
bool success = call.arguments['success'];
String snapshotPath = call.arguments['filePath'];
snapshotCompletion!.call(success, snapshotPath);
break;
case 'onVideoEngineAutoSelectResolution':
int resolution = call.arguments['resolution'];
TTVideoEngineResolutionType resolutionType =
TTVideoEngineResolutionType.transFromValue(resolution);
if (onVideoEngineAutoSelectResolution != null) {
onVideoEngineAutoSelectResolution!(resolutionType);
}
break;
default:
break;
}
});
String coreHashHex = await engineStaticMethodChannel.invokeMethod(
'createPlayer', {
'hashCode': hashCode,
'vid': vid,
'preCreated': preCreated,
'useDrm': useDrm
});
_playerIsCreated = true;
_subscription = engineInstanceEventChannel
.receiveBroadcastStream()
.listen(_onEvent, onError: _onError);
return coreHashHex;
}