ToneSnap_FSX_Flutter/lib/data/models/player_model.dart
fengshengxiong c7cbdb04be 个人曲库
2024-07-14 16:13:46 +08:00

2194 lines
80 KiB
Dart

// Author: fengshengxiong
// Date: 2024/6/23
// Description: 播放歌曲模型
import 'dart:convert';
class PlayerModel {
ResponseContext? responseContext;
PlayabilityStatus? playabilityStatus;
StreamingData? streamingData;
PlaybackTracking? playbackTracking;
VideoDetails? videoDetails;
PlayerConfig? playerConfig;
Storyboards? storyboards;
String? trackingParams;
Attestation? attestation;
String? adBreakHeartbeatParams;
PlayerModel({
this.responseContext,
this.playabilityStatus,
this.streamingData,
this.playbackTracking,
this.videoDetails,
this.playerConfig,
this.storyboards,
this.trackingParams,
this.attestation,
this.adBreakHeartbeatParams,
});
factory PlayerModel.fromJson(String str) => PlayerModel.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory PlayerModel.fromMap(Map<String, dynamic> json) => PlayerModel(
responseContext: json["responseContext"] == null ? null : ResponseContext.fromMap(json["responseContext"]),
playabilityStatus: json["playabilityStatus"] == null ? null : PlayabilityStatus.fromMap(json["playabilityStatus"]),
streamingData: json["streamingData"] == null ? null : StreamingData.fromMap(json["streamingData"]),
playbackTracking: json["playbackTracking"] == null ? null : PlaybackTracking.fromMap(json["playbackTracking"]),
videoDetails: json["videoDetails"] == null ? null : VideoDetails.fromMap(json["videoDetails"]),
playerConfig: json["playerConfig"] == null ? null : PlayerConfig.fromMap(json["playerConfig"]),
storyboards: json["storyboards"] == null ? null : Storyboards.fromMap(json["storyboards"]),
trackingParams: json["trackingParams"],
attestation: json["attestation"] == null ? null : Attestation.fromMap(json["attestation"]),
adBreakHeartbeatParams: json["adBreakHeartbeatParams"],
);
Map<String, dynamic> toMap() => {
"responseContext": responseContext?.toMap(),
"playabilityStatus": playabilityStatus?.toMap(),
"streamingData": streamingData?.toMap(),
"playbackTracking": playbackTracking?.toMap(),
"videoDetails": videoDetails?.toMap(),
"playerConfig": playerConfig?.toMap(),
"storyboards": storyboards?.toMap(),
"trackingParams": trackingParams,
"attestation": attestation?.toMap(),
"adBreakHeartbeatParams": adBreakHeartbeatParams,
};
}
class Attestation {
PlayerAttestationRenderer? playerAttestationRenderer;
Attestation({
this.playerAttestationRenderer,
});
factory Attestation.fromJson(String str) => Attestation.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Attestation.fromMap(Map<String, dynamic> json) => Attestation(
playerAttestationRenderer: json["playerAttestationRenderer"] == null ? null : PlayerAttestationRenderer.fromMap(json["playerAttestationRenderer"]),
);
Map<String, dynamic> toMap() => {
"playerAttestationRenderer": playerAttestationRenderer?.toMap(),
};
}
class PlayerAttestationRenderer {
String? challenge;
PlayerAttestationRenderer({
this.challenge,
});
factory PlayerAttestationRenderer.fromJson(String str) => PlayerAttestationRenderer.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory PlayerAttestationRenderer.fromMap(Map<String, dynamic> json) => PlayerAttestationRenderer(
challenge: json["challenge"],
);
Map<String, dynamic> toMap() => {
"challenge": challenge,
};
}
class PlayabilityStatus {
String? status;
bool? playableInEmbed;
Backgroundability? backgroundability;
AudioOnlyPlayability? audioOnlyPlayability;
Miniplayer? miniplayer;
String? contextParams;
PlayabilityStatus({
this.status,
this.playableInEmbed,
this.backgroundability,
this.audioOnlyPlayability,
this.miniplayer,
this.contextParams,
});
factory PlayabilityStatus.fromJson(String str) => PlayabilityStatus.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory PlayabilityStatus.fromMap(Map<String, dynamic> json) => PlayabilityStatus(
status: json["status"],
playableInEmbed: json["playableInEmbed"],
backgroundability: json["backgroundability"] == null ? null : Backgroundability.fromMap(json["backgroundability"]),
audioOnlyPlayability: json["audioOnlyPlayability"] == null ? null : AudioOnlyPlayability.fromMap(json["audioOnlyPlayability"]),
miniplayer: json["miniplayer"] == null ? null : Miniplayer.fromMap(json["miniplayer"]),
contextParams: json["contextParams"],
);
Map<String, dynamic> toMap() => {
"status": status,
"playableInEmbed": playableInEmbed,
"backgroundability": backgroundability?.toMap(),
"audioOnlyPlayability": audioOnlyPlayability?.toMap(),
"miniplayer": miniplayer?.toMap(),
"contextParams": contextParams,
};
}
class AudioOnlyPlayability {
AudioOnlyPlayabilityRenderer? audioOnlyPlayabilityRenderer;
AudioOnlyPlayability({
this.audioOnlyPlayabilityRenderer,
});
factory AudioOnlyPlayability.fromJson(String str) => AudioOnlyPlayability.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AudioOnlyPlayability.fromMap(Map<String, dynamic> json) => AudioOnlyPlayability(
audioOnlyPlayabilityRenderer: json["audioOnlyPlayabilityRenderer"] == null ? null : AudioOnlyPlayabilityRenderer.fromMap(json["audioOnlyPlayabilityRenderer"]),
);
Map<String, dynamic> toMap() => {
"audioOnlyPlayabilityRenderer": audioOnlyPlayabilityRenderer?.toMap(),
};
}
class AudioOnlyPlayabilityRenderer {
String? trackingParams;
String? audioOnlyAvailability;
AudioOnlyPlayabilityRenderer({
this.trackingParams,
this.audioOnlyAvailability,
});
factory AudioOnlyPlayabilityRenderer.fromJson(String str) => AudioOnlyPlayabilityRenderer.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AudioOnlyPlayabilityRenderer.fromMap(Map<String, dynamic> json) => AudioOnlyPlayabilityRenderer(
trackingParams: json["trackingParams"],
audioOnlyAvailability: json["audioOnlyAvailability"],
);
Map<String, dynamic> toMap() => {
"trackingParams": trackingParams,
"audioOnlyAvailability": audioOnlyAvailability,
};
}
class Backgroundability {
BackgroundabilityRenderer? backgroundabilityRenderer;
Backgroundability({
this.backgroundabilityRenderer,
});
factory Backgroundability.fromJson(String str) => Backgroundability.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Backgroundability.fromMap(Map<String, dynamic> json) => Backgroundability(
backgroundabilityRenderer: json["backgroundabilityRenderer"] == null ? null : BackgroundabilityRenderer.fromMap(json["backgroundabilityRenderer"]),
);
Map<String, dynamic> toMap() => {
"backgroundabilityRenderer": backgroundabilityRenderer?.toMap(),
};
}
class BackgroundabilityRenderer {
bool? backgroundable;
BackgroundabilityRenderer({
this.backgroundable,
});
factory BackgroundabilityRenderer.fromJson(String str) => BackgroundabilityRenderer.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory BackgroundabilityRenderer.fromMap(Map<String, dynamic> json) => BackgroundabilityRenderer(
backgroundable: json["backgroundable"],
);
Map<String, dynamic> toMap() => {
"backgroundable": backgroundable,
};
}
class Miniplayer {
MiniplayerRenderer? miniplayerRenderer;
Miniplayer({
this.miniplayerRenderer,
});
factory Miniplayer.fromJson(String str) => Miniplayer.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Miniplayer.fromMap(Map<String, dynamic> json) => Miniplayer(
miniplayerRenderer: json["miniplayerRenderer"] == null ? null : MiniplayerRenderer.fromMap(json["miniplayerRenderer"]),
);
Map<String, dynamic> toMap() => {
"miniplayerRenderer": miniplayerRenderer?.toMap(),
};
}
class MiniplayerRenderer {
String? playbackMode;
MiniplayerRenderer({
this.playbackMode,
});
factory MiniplayerRenderer.fromJson(String str) => MiniplayerRenderer.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory MiniplayerRenderer.fromMap(Map<String, dynamic> json) => MiniplayerRenderer(
playbackMode: json["playbackMode"],
);
Map<String, dynamic> toMap() => {
"playbackMode": playbackMode,
};
}
class PlaybackTracking {
Url? videostatsPlaybackUrl;
Url? videostatsDelayplayUrl;
Url? videostatsWatchtimeUrl;
Url? ptrackingUrl;
Url? qoeUrl;
AtrUrl? atrUrl;
List<int>? videostatsScheduledFlushWalltimeSeconds;
int? videostatsDefaultFlushIntervalSeconds;
PlaybackTracking({
this.videostatsPlaybackUrl,
this.videostatsDelayplayUrl,
this.videostatsWatchtimeUrl,
this.ptrackingUrl,
this.qoeUrl,
this.atrUrl,
this.videostatsScheduledFlushWalltimeSeconds,
this.videostatsDefaultFlushIntervalSeconds,
});
factory PlaybackTracking.fromJson(String str) => PlaybackTracking.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory PlaybackTracking.fromMap(Map<String, dynamic> json) => PlaybackTracking(
videostatsPlaybackUrl: json["videostatsPlaybackUrl"] == null ? null : Url.fromMap(json["videostatsPlaybackUrl"]),
videostatsDelayplayUrl: json["videostatsDelayplayUrl"] == null ? null : Url.fromMap(json["videostatsDelayplayUrl"]),
videostatsWatchtimeUrl: json["videostatsWatchtimeUrl"] == null ? null : Url.fromMap(json["videostatsWatchtimeUrl"]),
ptrackingUrl: json["ptrackingUrl"] == null ? null : Url.fromMap(json["ptrackingUrl"]),
qoeUrl: json["qoeUrl"] == null ? null : Url.fromMap(json["qoeUrl"]),
atrUrl: json["atrUrl"] == null ? null : AtrUrl.fromMap(json["atrUrl"]),
videostatsScheduledFlushWalltimeSeconds: json["videostatsScheduledFlushWalltimeSeconds"] == null ? [] : List<int>.from(json["videostatsScheduledFlushWalltimeSeconds"]!.map((x) => x)),
videostatsDefaultFlushIntervalSeconds: json["videostatsDefaultFlushIntervalSeconds"],
);
Map<String, dynamic> toMap() => {
"videostatsPlaybackUrl": videostatsPlaybackUrl?.toMap(),
"videostatsDelayplayUrl": videostatsDelayplayUrl?.toMap(),
"videostatsWatchtimeUrl": videostatsWatchtimeUrl?.toMap(),
"ptrackingUrl": ptrackingUrl?.toMap(),
"qoeUrl": qoeUrl?.toMap(),
"atrUrl": atrUrl?.toMap(),
"videostatsScheduledFlushWalltimeSeconds": videostatsScheduledFlushWalltimeSeconds == null ? [] : List<dynamic>.from(videostatsScheduledFlushWalltimeSeconds!.map((x) => x)),
"videostatsDefaultFlushIntervalSeconds": videostatsDefaultFlushIntervalSeconds,
};
}
class AtrUrl {
String? baseUrl;
int? elapsedMediaTimeSeconds;
List<Header>? headers;
AtrUrl({
this.baseUrl,
this.elapsedMediaTimeSeconds,
this.headers,
});
factory AtrUrl.fromJson(String str) => AtrUrl.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AtrUrl.fromMap(Map<String, dynamic> json) => AtrUrl(
baseUrl: json["baseUrl"],
elapsedMediaTimeSeconds: json["elapsedMediaTimeSeconds"],
headers: json["headers"] == null ? [] : List<Header>.from(json["headers"]!.map((x) => Header.fromMap(x))),
);
Map<String, dynamic> toMap() => {
"baseUrl": baseUrl,
"elapsedMediaTimeSeconds": elapsedMediaTimeSeconds,
"headers": headers == null ? [] : List<dynamic>.from(headers!.map((x) => x.toMap())),
};
}
class Header {
String? headerType;
Header({
this.headerType,
});
factory Header.fromJson(String str) => Header.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Header.fromMap(Map<String, dynamic> json) => Header(
headerType: json["headerType"],
);
Map<String, dynamic> toMap() => {
"headerType": headerType,
};
}
class Url {
String? baseUrl;
List<Header>? headers;
Url({
this.baseUrl,
this.headers,
});
factory Url.fromJson(String str) => Url.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Url.fromMap(Map<String, dynamic> json) => Url(
baseUrl: json["baseUrl"],
headers: json["headers"] == null ? [] : List<Header>.from(json["headers"]!.map((x) => Header.fromMap(x))),
);
Map<String, dynamic> toMap() => {
"baseUrl": baseUrl,
"headers": headers == null ? [] : List<dynamic>.from(headers!.map((x) => x.toMap())),
};
}
class PlayerConfig {
AudioConfig? audioConfig;
ExoPlayerConfig? exoPlayerConfig;
AdRequestConfig? adRequestConfig;
NetworkProtocolConfig? networkProtocolConfig;
AndroidNetworkStackConfig? androidNetworkStackConfig;
LidarSdkConfig? lidarSdkConfig;
AndroidMedialibConfig? androidMedialibConfig;
VariableSpeedConfig? variableSpeedConfig;
DecodeQualityConfig? decodeQualityConfig;
PlayerRestorationConfig? playerRestorationConfig;
AndroidPlayerStatsConfig? androidPlayerStatsConfig;
RetryConfig? retryConfig;
CmsPathProbeConfig? cmsPathProbeConfig;
MediaCommonConfig? mediaCommonConfig;
TaskCoordinatorConfig? taskCoordinatorConfig;
PlayerConfig({
this.audioConfig,
this.exoPlayerConfig,
this.adRequestConfig,
this.networkProtocolConfig,
this.androidNetworkStackConfig,
this.lidarSdkConfig,
this.androidMedialibConfig,
this.variableSpeedConfig,
this.decodeQualityConfig,
this.playerRestorationConfig,
this.androidPlayerStatsConfig,
this.retryConfig,
this.cmsPathProbeConfig,
this.mediaCommonConfig,
this.taskCoordinatorConfig,
});
factory PlayerConfig.fromJson(String str) => PlayerConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory PlayerConfig.fromMap(Map<String, dynamic> json) => PlayerConfig(
audioConfig: json["audioConfig"] == null ? null : AudioConfig.fromMap(json["audioConfig"]),
exoPlayerConfig: json["exoPlayerConfig"] == null ? null : ExoPlayerConfig.fromMap(json["exoPlayerConfig"]),
adRequestConfig: json["adRequestConfig"] == null ? null : AdRequestConfig.fromMap(json["adRequestConfig"]),
networkProtocolConfig: json["networkProtocolConfig"] == null ? null : NetworkProtocolConfig.fromMap(json["networkProtocolConfig"]),
androidNetworkStackConfig: json["androidNetworkStackConfig"] == null ? null : AndroidNetworkStackConfig.fromMap(json["androidNetworkStackConfig"]),
lidarSdkConfig: json["lidarSdkConfig"] == null ? null : LidarSdkConfig.fromMap(json["lidarSdkConfig"]),
androidMedialibConfig: json["androidMedialibConfig"] == null ? null : AndroidMedialibConfig.fromMap(json["androidMedialibConfig"]),
variableSpeedConfig: json["variableSpeedConfig"] == null ? null : VariableSpeedConfig.fromMap(json["variableSpeedConfig"]),
decodeQualityConfig: json["decodeQualityConfig"] == null ? null : DecodeQualityConfig.fromMap(json["decodeQualityConfig"]),
playerRestorationConfig: json["playerRestorationConfig"] == null ? null : PlayerRestorationConfig.fromMap(json["playerRestorationConfig"]),
androidPlayerStatsConfig: json["androidPlayerStatsConfig"] == null ? null : AndroidPlayerStatsConfig.fromMap(json["androidPlayerStatsConfig"]),
retryConfig: json["retryConfig"] == null ? null : RetryConfig.fromMap(json["retryConfig"]),
cmsPathProbeConfig: json["cmsPathProbeConfig"] == null ? null : CmsPathProbeConfig.fromMap(json["cmsPathProbeConfig"]),
mediaCommonConfig: json["mediaCommonConfig"] == null ? null : MediaCommonConfig.fromMap(json["mediaCommonConfig"]),
taskCoordinatorConfig: json["taskCoordinatorConfig"] == null ? null : TaskCoordinatorConfig.fromMap(json["taskCoordinatorConfig"]),
);
Map<String, dynamic> toMap() => {
"audioConfig": audioConfig?.toMap(),
"exoPlayerConfig": exoPlayerConfig?.toMap(),
"adRequestConfig": adRequestConfig?.toMap(),
"networkProtocolConfig": networkProtocolConfig?.toMap(),
"androidNetworkStackConfig": androidNetworkStackConfig?.toMap(),
"lidarSdkConfig": lidarSdkConfig?.toMap(),
"androidMedialibConfig": androidMedialibConfig?.toMap(),
"variableSpeedConfig": variableSpeedConfig?.toMap(),
"decodeQualityConfig": decodeQualityConfig?.toMap(),
"playerRestorationConfig": playerRestorationConfig?.toMap(),
"androidPlayerStatsConfig": androidPlayerStatsConfig?.toMap(),
"retryConfig": retryConfig?.toMap(),
"cmsPathProbeConfig": cmsPathProbeConfig?.toMap(),
"mediaCommonConfig": mediaCommonConfig?.toMap(),
"taskCoordinatorConfig": taskCoordinatorConfig?.toMap(),
};
}
class AdRequestConfig {
bool? useCriticalExecOnAdsPrep;
bool? userCriticalExecOnAdsProcessing;
AdRequestConfig({
this.useCriticalExecOnAdsPrep,
this.userCriticalExecOnAdsProcessing,
});
factory AdRequestConfig.fromJson(String str) => AdRequestConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AdRequestConfig.fromMap(Map<String, dynamic> json) => AdRequestConfig(
useCriticalExecOnAdsPrep: json["useCriticalExecOnAdsPrep"],
userCriticalExecOnAdsProcessing: json["userCriticalExecOnAdsProcessing"],
);
Map<String, dynamic> toMap() => {
"useCriticalExecOnAdsPrep": useCriticalExecOnAdsPrep,
"userCriticalExecOnAdsProcessing": userCriticalExecOnAdsProcessing,
};
}
class AndroidMedialibConfig {
bool? isItag18MainProfile;
double? viewportSizeFraction;
AndroidMedialibConfig({
this.isItag18MainProfile,
this.viewportSizeFraction,
});
factory AndroidMedialibConfig.fromJson(String str) => AndroidMedialibConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AndroidMedialibConfig.fromMap(Map<String, dynamic> json) => AndroidMedialibConfig(
isItag18MainProfile: json["isItag18MainProfile"],
viewportSizeFraction: json["viewportSizeFraction"]?.toDouble(),
);
Map<String, dynamic> toMap() => {
"isItag18MainProfile": isItag18MainProfile,
"viewportSizeFraction": viewportSizeFraction,
};
}
class AndroidNetworkStackConfig {
String? networkStack;
AndroidMetadataNetworkConfig? androidMetadataNetworkConfig;
AndroidNetworkStackConfig({
this.networkStack,
this.androidMetadataNetworkConfig,
});
factory AndroidNetworkStackConfig.fromJson(String str) => AndroidNetworkStackConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AndroidNetworkStackConfig.fromMap(Map<String, dynamic> json) => AndroidNetworkStackConfig(
networkStack: json["networkStack"],
androidMetadataNetworkConfig: json["androidMetadataNetworkConfig"] == null ? null : AndroidMetadataNetworkConfig.fromMap(json["androidMetadataNetworkConfig"]),
);
Map<String, dynamic> toMap() => {
"networkStack": networkStack,
"androidMetadataNetworkConfig": androidMetadataNetworkConfig?.toMap(),
};
}
class AndroidMetadataNetworkConfig {
bool? coalesceRequests;
AndroidMetadataNetworkConfig({
this.coalesceRequests,
});
factory AndroidMetadataNetworkConfig.fromJson(String str) => AndroidMetadataNetworkConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AndroidMetadataNetworkConfig.fromMap(Map<String, dynamic> json) => AndroidMetadataNetworkConfig(
coalesceRequests: json["coalesceRequests"],
);
Map<String, dynamic> toMap() => {
"coalesceRequests": coalesceRequests,
};
}
class AndroidPlayerStatsConfig {
bool? usePblForAttestationReporting;
bool? usePblForHeartbeatReporting;
bool? usePblForPlaybacktrackingReporting;
bool? usePblForQoeReporting;
bool? changeCpnOnFatalPlaybackError;
AndroidPlayerStatsConfig({
this.usePblForAttestationReporting,
this.usePblForHeartbeatReporting,
this.usePblForPlaybacktrackingReporting,
this.usePblForQoeReporting,
this.changeCpnOnFatalPlaybackError,
});
factory AndroidPlayerStatsConfig.fromJson(String str) => AndroidPlayerStatsConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AndroidPlayerStatsConfig.fromMap(Map<String, dynamic> json) => AndroidPlayerStatsConfig(
usePblForAttestationReporting: json["usePblForAttestationReporting"],
usePblForHeartbeatReporting: json["usePblForHeartbeatReporting"],
usePblForPlaybacktrackingReporting: json["usePblForPlaybacktrackingReporting"],
usePblForQoeReporting: json["usePblForQoeReporting"],
changeCpnOnFatalPlaybackError: json["changeCpnOnFatalPlaybackError"],
);
Map<String, dynamic> toMap() => {
"usePblForAttestationReporting": usePblForAttestationReporting,
"usePblForHeartbeatReporting": usePblForHeartbeatReporting,
"usePblForPlaybacktrackingReporting": usePblForPlaybacktrackingReporting,
"usePblForQoeReporting": usePblForQoeReporting,
"changeCpnOnFatalPlaybackError": changeCpnOnFatalPlaybackError,
};
}
class AudioConfig {
double? loudnessDb;
double? perceptualLoudnessDb;
bool? playAudioOnly;
bool? enablePerFormatLoudness;
AudioConfig({
this.loudnessDb,
this.perceptualLoudnessDb,
this.playAudioOnly,
this.enablePerFormatLoudness,
});
factory AudioConfig.fromJson(String str) => AudioConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AudioConfig.fromMap(Map<String, dynamic> json) => AudioConfig(
loudnessDb: json["loudnessDb"]?.toDouble(),
perceptualLoudnessDb: json["perceptualLoudnessDb"]?.toDouble(),
playAudioOnly: json["playAudioOnly"],
enablePerFormatLoudness: json["enablePerFormatLoudness"],
);
Map<String, dynamic> toMap() => {
"loudnessDb": loudnessDb,
"perceptualLoudnessDb": perceptualLoudnessDb,
"playAudioOnly": playAudioOnly,
"enablePerFormatLoudness": enablePerFormatLoudness,
};
}
class CmsPathProbeConfig {
int? cmsPathProbeDelayMs;
CmsPathProbeConfig({
this.cmsPathProbeDelayMs,
});
factory CmsPathProbeConfig.fromJson(String str) => CmsPathProbeConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory CmsPathProbeConfig.fromMap(Map<String, dynamic> json) => CmsPathProbeConfig(
cmsPathProbeDelayMs: json["cmsPathProbeDelayMs"],
);
Map<String, dynamic> toMap() => {
"cmsPathProbeDelayMs": cmsPathProbeDelayMs,
};
}
class DecodeQualityConfig {
int? maximumVideoDecodeVerticalResolution;
DecodeQualityConfig({
this.maximumVideoDecodeVerticalResolution,
});
factory DecodeQualityConfig.fromJson(String str) => DecodeQualityConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory DecodeQualityConfig.fromMap(Map<String, dynamic> json) => DecodeQualityConfig(
maximumVideoDecodeVerticalResolution: json["maximumVideoDecodeVerticalResolution"],
);
Map<String, dynamic> toMap() => {
"maximumVideoDecodeVerticalResolution": maximumVideoDecodeVerticalResolution,
};
}
class ExoPlayerConfig {
bool? useExoPlayer;
bool? useAdaptiveBitrate;
int? maxInitialByteRate;
int? minDurationForQualityIncreaseMs;
int? maxDurationForQualityDecreaseMs;
int? minDurationToRetainAfterDiscardMs;
int? lowWatermarkMs;
int? highWatermarkMs;
double? lowPoolLoad;
double? highPoolLoad;
double? sufficientBandwidthOverhead;
int? bufferChunkSizeKb;
int? httpConnectTimeoutMs;
int? httpReadTimeoutMs;
int? numAudioSegmentsPerFetch;
int? numVideoSegmentsPerFetch;
int? minDurationForPlaybackStartMs;
bool? enableExoplayerReuse;
bool? useRadioTypeForInitialQualitySelection;
bool? blacklistFormatOnError;
bool? enableBandaidHttpDataSource;
int? httpLoadTimeoutMs;
bool? canPlayHdDrm;
int? videoBufferSegmentCount;
int? audioBufferSegmentCount;
bool? useAbruptSplicing;
int? minRetryCount;
int? minChunksNeededToPreferOffline;
int? secondsToMaxAggressiveness;
bool? enableSurfaceviewResizeWorkaround;
bool? enableVp9IfThresholdsPass;
bool? matchQualityToViewportOnUnfullscreen;
List<String>? lowAudioQualityConnTypes;
bool? useDashForLiveStreams;
bool? enableLibvpxVideoTrackRenderer;
int? lowAudioQualityBandwidthThresholdBps;
bool? enableVariableSpeedPlayback;
bool? preferOnesieBufferedFormat;
int? minimumBandwidthSampleBytes;
bool? useDashForOtfAndCompletedLiveStreams;
bool? disableCacheAwareVideoFormatEvaluation;
bool? useLiveDvrForDashLiveStreams;
bool? cronetResetTimeoutOnRedirects;
bool? emitVideoDecoderChangeEvents;
String? onesieVideoBufferLoadTimeoutMs;
String? onesieVideoBufferReadTimeoutMs;
bool? libvpxEnableGl;
bool? enableVp9EncryptedIfThresholdsPass;
bool? enableOpus;
bool? usePredictedBuffer;
int? maxReadAheadMediaTimeMs;
bool? useMediaTimeCappedLoadControl;
int? allowCacheOverrideToLowerQualitiesWithinRange;
bool? allowDroppingUndecodedFrames;
int? minDurationForPlaybackRestartMs;
String? serverProvidedBandwidthHeader;
String? liveOnlyPegStrategy;
bool? enableRedirectorHostFallback;
bool? enableHighlyAvailableFormatFallbackOnPcr;
bool? recordTrackRendererTimingEvents;
int? minErrorsForRedirectorHostFallback;
List<String>? nonHardwareMediaCodecNames;
bool? enableVp9IfInHardware;
bool? enableVp9EncryptedIfInHardware;
bool? useOpusMedAsLowQualityAudio;
int? minErrorsForPcrFallback;
bool? useStickyRedirectHttpDataSource;
bool? onlyVideoBandwidth;
bool? useRedirectorOnNetworkChange;
bool? enableMaxReadaheadAbrThreshold;
bool? cacheCheckDirectoryWritabilityOnce;
String? predictorType;
double? slidingPercentile;
int? slidingWindowSize;
int? maxFrameDropIntervalMs;
bool? ignoreLoadTimeoutForFallback;
int? serverBweMultiplier;
int? drmMaxKeyfetchDelayMs;
int? maxResolutionForWhiteNoise;
String? whiteNoiseRenderEffectMode;
bool? enableLibvpxHdr;
bool? enableCacheAwareStreamSelection;
bool? useExoCronetDataSource;
int? whiteNoiseScale;
int? whiteNoiseOffset;
bool? preventVideoFrameLaggingWithLibvpx;
bool? enableMediaCodecHdr;
bool? enableMediaCodecSwHdr;
int? liveOnlyWindowChunks;
List<int>? bearerMinDurationToRetainAfterDiscardMs;
bool? forceWidevineL3;
bool? useAverageBitrate;
bool? useMedialibAudioTrackRendererForLive;
bool? useExoPlayerV2;
bool? logMediaRequestEventsToCsi;
bool? onesieFixNonZeroStartTimeFormatSelection;
int? liveOnlyReadaheadStepSizeChunks;
int? liveOnlyBufferHealthHalfLifeSeconds;
double? liveOnlyMinBufferHealthRatio;
int? liveOnlyMinLatencyToSeekRatio;
String? manifestlessPartialChunkStrategy;
bool? ignoreViewportSizeWhenSticky;
bool? enableLibvpxFallback;
bool? disableLibvpxLoopFilter;
bool? enableVpxMediaView;
int? hdrMinScreenBrightness;
int? hdrMaxScreenBrightnessThreshold;
bool? onesieDataSourceAboveCacheDataSource;
int? httpNonplayerLoadTimeoutMs;
String? numVideoSegmentsPerFetchStrategy;
int? maxVideoDurationPerFetchMs;
int? maxVideoEstimatedLoadDurationMs;
int? estimatedServerClockHalfLife;
bool? estimatedServerClockStrictOffset;
int? minReadAheadMediaTimeMs;
int? readAheadGrowthRate;
bool? useDynamicReadAhead;
bool? useYtVodMediaSourceForV2;
bool? enableV2Gapless;
bool? useLiveHeadTimeMillis;
bool? allowTrackSelectionWithUpdatedVideoItagsForExoV2;
int? maxAllowableTimeBeforeMediaTimeUpdateSec;
bool? enableDynamicHdr;
bool? v2PerformEarlyStreamSelection;
bool? v2UsePlaybackStreamSelectionResult;
int? v2MinTimeBetweenAbrReevaluationMs;
bool? avoidReusePlaybackAcrossLoadvideos;
bool? enableInfiniteNetworkLoadingRetries;
bool? reportExoPlayerStateOnTransition;
String? manifestlessSequenceMethod;
bool? useLiveHeadWindow;
bool? enableDynamicHdrInHardware;
int? ultralowAudioQualityBandwidthThresholdBps;
bool? retryLiveNetNocontentWithDelay;
bool? ignoreUnneededSeeksToLiveHead;
double? drmMetricsQoeLoggingFraction;
int? liveNetNocontentMaximumErrors;
int? slidingPercentileScalar;
int? minAdaptiveVideoQuality;
int? platypusBackBufferDurationMs;
ExoPlayerConfig({
this.useExoPlayer,
this.useAdaptiveBitrate,
this.maxInitialByteRate,
this.minDurationForQualityIncreaseMs,
this.maxDurationForQualityDecreaseMs,
this.minDurationToRetainAfterDiscardMs,
this.lowWatermarkMs,
this.highWatermarkMs,
this.lowPoolLoad,
this.highPoolLoad,
this.sufficientBandwidthOverhead,
this.bufferChunkSizeKb,
this.httpConnectTimeoutMs,
this.httpReadTimeoutMs,
this.numAudioSegmentsPerFetch,
this.numVideoSegmentsPerFetch,
this.minDurationForPlaybackStartMs,
this.enableExoplayerReuse,
this.useRadioTypeForInitialQualitySelection,
this.blacklistFormatOnError,
this.enableBandaidHttpDataSource,
this.httpLoadTimeoutMs,
this.canPlayHdDrm,
this.videoBufferSegmentCount,
this.audioBufferSegmentCount,
this.useAbruptSplicing,
this.minRetryCount,
this.minChunksNeededToPreferOffline,
this.secondsToMaxAggressiveness,
this.enableSurfaceviewResizeWorkaround,
this.enableVp9IfThresholdsPass,
this.matchQualityToViewportOnUnfullscreen,
this.lowAudioQualityConnTypes,
this.useDashForLiveStreams,
this.enableLibvpxVideoTrackRenderer,
this.lowAudioQualityBandwidthThresholdBps,
this.enableVariableSpeedPlayback,
this.preferOnesieBufferedFormat,
this.minimumBandwidthSampleBytes,
this.useDashForOtfAndCompletedLiveStreams,
this.disableCacheAwareVideoFormatEvaluation,
this.useLiveDvrForDashLiveStreams,
this.cronetResetTimeoutOnRedirects,
this.emitVideoDecoderChangeEvents,
this.onesieVideoBufferLoadTimeoutMs,
this.onesieVideoBufferReadTimeoutMs,
this.libvpxEnableGl,
this.enableVp9EncryptedIfThresholdsPass,
this.enableOpus,
this.usePredictedBuffer,
this.maxReadAheadMediaTimeMs,
this.useMediaTimeCappedLoadControl,
this.allowCacheOverrideToLowerQualitiesWithinRange,
this.allowDroppingUndecodedFrames,
this.minDurationForPlaybackRestartMs,
this.serverProvidedBandwidthHeader,
this.liveOnlyPegStrategy,
this.enableRedirectorHostFallback,
this.enableHighlyAvailableFormatFallbackOnPcr,
this.recordTrackRendererTimingEvents,
this.minErrorsForRedirectorHostFallback,
this.nonHardwareMediaCodecNames,
this.enableVp9IfInHardware,
this.enableVp9EncryptedIfInHardware,
this.useOpusMedAsLowQualityAudio,
this.minErrorsForPcrFallback,
this.useStickyRedirectHttpDataSource,
this.onlyVideoBandwidth,
this.useRedirectorOnNetworkChange,
this.enableMaxReadaheadAbrThreshold,
this.cacheCheckDirectoryWritabilityOnce,
this.predictorType,
this.slidingPercentile,
this.slidingWindowSize,
this.maxFrameDropIntervalMs,
this.ignoreLoadTimeoutForFallback,
this.serverBweMultiplier,
this.drmMaxKeyfetchDelayMs,
this.maxResolutionForWhiteNoise,
this.whiteNoiseRenderEffectMode,
this.enableLibvpxHdr,
this.enableCacheAwareStreamSelection,
this.useExoCronetDataSource,
this.whiteNoiseScale,
this.whiteNoiseOffset,
this.preventVideoFrameLaggingWithLibvpx,
this.enableMediaCodecHdr,
this.enableMediaCodecSwHdr,
this.liveOnlyWindowChunks,
this.bearerMinDurationToRetainAfterDiscardMs,
this.forceWidevineL3,
this.useAverageBitrate,
this.useMedialibAudioTrackRendererForLive,
this.useExoPlayerV2,
this.logMediaRequestEventsToCsi,
this.onesieFixNonZeroStartTimeFormatSelection,
this.liveOnlyReadaheadStepSizeChunks,
this.liveOnlyBufferHealthHalfLifeSeconds,
this.liveOnlyMinBufferHealthRatio,
this.liveOnlyMinLatencyToSeekRatio,
this.manifestlessPartialChunkStrategy,
this.ignoreViewportSizeWhenSticky,
this.enableLibvpxFallback,
this.disableLibvpxLoopFilter,
this.enableVpxMediaView,
this.hdrMinScreenBrightness,
this.hdrMaxScreenBrightnessThreshold,
this.onesieDataSourceAboveCacheDataSource,
this.httpNonplayerLoadTimeoutMs,
this.numVideoSegmentsPerFetchStrategy,
this.maxVideoDurationPerFetchMs,
this.maxVideoEstimatedLoadDurationMs,
this.estimatedServerClockHalfLife,
this.estimatedServerClockStrictOffset,
this.minReadAheadMediaTimeMs,
this.readAheadGrowthRate,
this.useDynamicReadAhead,
this.useYtVodMediaSourceForV2,
this.enableV2Gapless,
this.useLiveHeadTimeMillis,
this.allowTrackSelectionWithUpdatedVideoItagsForExoV2,
this.maxAllowableTimeBeforeMediaTimeUpdateSec,
this.enableDynamicHdr,
this.v2PerformEarlyStreamSelection,
this.v2UsePlaybackStreamSelectionResult,
this.v2MinTimeBetweenAbrReevaluationMs,
this.avoidReusePlaybackAcrossLoadvideos,
this.enableInfiniteNetworkLoadingRetries,
this.reportExoPlayerStateOnTransition,
this.manifestlessSequenceMethod,
this.useLiveHeadWindow,
this.enableDynamicHdrInHardware,
this.ultralowAudioQualityBandwidthThresholdBps,
this.retryLiveNetNocontentWithDelay,
this.ignoreUnneededSeeksToLiveHead,
this.drmMetricsQoeLoggingFraction,
this.liveNetNocontentMaximumErrors,
this.slidingPercentileScalar,
this.minAdaptiveVideoQuality,
this.platypusBackBufferDurationMs,
});
factory ExoPlayerConfig.fromJson(String str) => ExoPlayerConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory ExoPlayerConfig.fromMap(Map<String, dynamic> json) => ExoPlayerConfig(
useExoPlayer: json["useExoPlayer"],
useAdaptiveBitrate: json["useAdaptiveBitrate"],
maxInitialByteRate: json["maxInitialByteRate"],
minDurationForQualityIncreaseMs: json["minDurationForQualityIncreaseMs"],
maxDurationForQualityDecreaseMs: json["maxDurationForQualityDecreaseMs"],
minDurationToRetainAfterDiscardMs: json["minDurationToRetainAfterDiscardMs"],
lowWatermarkMs: json["lowWatermarkMs"],
highWatermarkMs: json["highWatermarkMs"],
lowPoolLoad: json["lowPoolLoad"]?.toDouble(),
highPoolLoad: json["highPoolLoad"]?.toDouble(),
sufficientBandwidthOverhead: json["sufficientBandwidthOverhead"]?.toDouble(),
bufferChunkSizeKb: json["bufferChunkSizeKb"],
httpConnectTimeoutMs: json["httpConnectTimeoutMs"],
httpReadTimeoutMs: json["httpReadTimeoutMs"],
numAudioSegmentsPerFetch: json["numAudioSegmentsPerFetch"],
numVideoSegmentsPerFetch: json["numVideoSegmentsPerFetch"],
minDurationForPlaybackStartMs: json["minDurationForPlaybackStartMs"],
enableExoplayerReuse: json["enableExoplayerReuse"],
useRadioTypeForInitialQualitySelection: json["useRadioTypeForInitialQualitySelection"],
blacklistFormatOnError: json["blacklistFormatOnError"],
enableBandaidHttpDataSource: json["enableBandaidHttpDataSource"],
httpLoadTimeoutMs: json["httpLoadTimeoutMs"],
canPlayHdDrm: json["canPlayHdDrm"],
videoBufferSegmentCount: json["videoBufferSegmentCount"],
audioBufferSegmentCount: json["audioBufferSegmentCount"],
useAbruptSplicing: json["useAbruptSplicing"],
minRetryCount: json["minRetryCount"],
minChunksNeededToPreferOffline: json["minChunksNeededToPreferOffline"],
secondsToMaxAggressiveness: json["secondsToMaxAggressiveness"],
enableSurfaceviewResizeWorkaround: json["enableSurfaceviewResizeWorkaround"],
enableVp9IfThresholdsPass: json["enableVp9IfThresholdsPass"],
matchQualityToViewportOnUnfullscreen: json["matchQualityToViewportOnUnfullscreen"],
lowAudioQualityConnTypes: json["lowAudioQualityConnTypes"] == null ? [] : List<String>.from(json["lowAudioQualityConnTypes"]!.map((x) => x)),
useDashForLiveStreams: json["useDashForLiveStreams"],
enableLibvpxVideoTrackRenderer: json["enableLibvpxVideoTrackRenderer"],
lowAudioQualityBandwidthThresholdBps: json["lowAudioQualityBandwidthThresholdBps"],
enableVariableSpeedPlayback: json["enableVariableSpeedPlayback"],
preferOnesieBufferedFormat: json["preferOnesieBufferedFormat"],
minimumBandwidthSampleBytes: json["minimumBandwidthSampleBytes"],
useDashForOtfAndCompletedLiveStreams: json["useDashForOtfAndCompletedLiveStreams"],
disableCacheAwareVideoFormatEvaluation: json["disableCacheAwareVideoFormatEvaluation"],
useLiveDvrForDashLiveStreams: json["useLiveDvrForDashLiveStreams"],
cronetResetTimeoutOnRedirects: json["cronetResetTimeoutOnRedirects"],
emitVideoDecoderChangeEvents: json["emitVideoDecoderChangeEvents"],
onesieVideoBufferLoadTimeoutMs: json["onesieVideoBufferLoadTimeoutMs"],
onesieVideoBufferReadTimeoutMs: json["onesieVideoBufferReadTimeoutMs"],
libvpxEnableGl: json["libvpxEnableGl"],
enableVp9EncryptedIfThresholdsPass: json["enableVp9EncryptedIfThresholdsPass"],
enableOpus: json["enableOpus"],
usePredictedBuffer: json["usePredictedBuffer"],
maxReadAheadMediaTimeMs: json["maxReadAheadMediaTimeMs"],
useMediaTimeCappedLoadControl: json["useMediaTimeCappedLoadControl"],
allowCacheOverrideToLowerQualitiesWithinRange: json["allowCacheOverrideToLowerQualitiesWithinRange"],
allowDroppingUndecodedFrames: json["allowDroppingUndecodedFrames"],
minDurationForPlaybackRestartMs: json["minDurationForPlaybackRestartMs"],
serverProvidedBandwidthHeader: json["serverProvidedBandwidthHeader"],
liveOnlyPegStrategy: json["liveOnlyPegStrategy"],
enableRedirectorHostFallback: json["enableRedirectorHostFallback"],
enableHighlyAvailableFormatFallbackOnPcr: json["enableHighlyAvailableFormatFallbackOnPcr"],
recordTrackRendererTimingEvents: json["recordTrackRendererTimingEvents"],
minErrorsForRedirectorHostFallback: json["minErrorsForRedirectorHostFallback"],
nonHardwareMediaCodecNames: json["nonHardwareMediaCodecNames"] == null ? [] : List<String>.from(json["nonHardwareMediaCodecNames"]!.map((x) => x)),
enableVp9IfInHardware: json["enableVp9IfInHardware"],
enableVp9EncryptedIfInHardware: json["enableVp9EncryptedIfInHardware"],
useOpusMedAsLowQualityAudio: json["useOpusMedAsLowQualityAudio"],
minErrorsForPcrFallback: json["minErrorsForPcrFallback"],
useStickyRedirectHttpDataSource: json["useStickyRedirectHttpDataSource"],
onlyVideoBandwidth: json["onlyVideoBandwidth"],
useRedirectorOnNetworkChange: json["useRedirectorOnNetworkChange"],
enableMaxReadaheadAbrThreshold: json["enableMaxReadaheadAbrThreshold"],
cacheCheckDirectoryWritabilityOnce: json["cacheCheckDirectoryWritabilityOnce"],
predictorType: json["predictorType"],
slidingPercentile: json["slidingPercentile"]?.toDouble(),
slidingWindowSize: json["slidingWindowSize"],
maxFrameDropIntervalMs: json["maxFrameDropIntervalMs"],
ignoreLoadTimeoutForFallback: json["ignoreLoadTimeoutForFallback"],
serverBweMultiplier: json["serverBweMultiplier"],
drmMaxKeyfetchDelayMs: json["drmMaxKeyfetchDelayMs"],
maxResolutionForWhiteNoise: json["maxResolutionForWhiteNoise"],
whiteNoiseRenderEffectMode: json["whiteNoiseRenderEffectMode"],
enableLibvpxHdr: json["enableLibvpxHdr"],
enableCacheAwareStreamSelection: json["enableCacheAwareStreamSelection"],
useExoCronetDataSource: json["useExoCronetDataSource"],
whiteNoiseScale: json["whiteNoiseScale"],
whiteNoiseOffset: json["whiteNoiseOffset"],
preventVideoFrameLaggingWithLibvpx: json["preventVideoFrameLaggingWithLibvpx"],
enableMediaCodecHdr: json["enableMediaCodecHdr"],
enableMediaCodecSwHdr: json["enableMediaCodecSwHdr"],
liveOnlyWindowChunks: json["liveOnlyWindowChunks"],
bearerMinDurationToRetainAfterDiscardMs: json["bearerMinDurationToRetainAfterDiscardMs"] == null ? [] : List<int>.from(json["bearerMinDurationToRetainAfterDiscardMs"]!.map((x) => x)),
forceWidevineL3: json["forceWidevineL3"],
useAverageBitrate: json["useAverageBitrate"],
useMedialibAudioTrackRendererForLive: json["useMedialibAudioTrackRendererForLive"],
useExoPlayerV2: json["useExoPlayerV2"],
logMediaRequestEventsToCsi: json["logMediaRequestEventsToCsi"],
onesieFixNonZeroStartTimeFormatSelection: json["onesieFixNonZeroStartTimeFormatSelection"],
liveOnlyReadaheadStepSizeChunks: json["liveOnlyReadaheadStepSizeChunks"],
liveOnlyBufferHealthHalfLifeSeconds: json["liveOnlyBufferHealthHalfLifeSeconds"],
liveOnlyMinBufferHealthRatio: json["liveOnlyMinBufferHealthRatio"]?.toDouble(),
liveOnlyMinLatencyToSeekRatio: json["liveOnlyMinLatencyToSeekRatio"],
manifestlessPartialChunkStrategy: json["manifestlessPartialChunkStrategy"],
ignoreViewportSizeWhenSticky: json["ignoreViewportSizeWhenSticky"],
enableLibvpxFallback: json["enableLibvpxFallback"],
disableLibvpxLoopFilter: json["disableLibvpxLoopFilter"],
enableVpxMediaView: json["enableVpxMediaView"],
hdrMinScreenBrightness: json["hdrMinScreenBrightness"],
hdrMaxScreenBrightnessThreshold: json["hdrMaxScreenBrightnessThreshold"],
onesieDataSourceAboveCacheDataSource: json["onesieDataSourceAboveCacheDataSource"],
httpNonplayerLoadTimeoutMs: json["httpNonplayerLoadTimeoutMs"],
numVideoSegmentsPerFetchStrategy: json["numVideoSegmentsPerFetchStrategy"],
maxVideoDurationPerFetchMs: json["maxVideoDurationPerFetchMs"],
maxVideoEstimatedLoadDurationMs: json["maxVideoEstimatedLoadDurationMs"],
estimatedServerClockHalfLife: json["estimatedServerClockHalfLife"],
estimatedServerClockStrictOffset: json["estimatedServerClockStrictOffset"],
minReadAheadMediaTimeMs: json["minReadAheadMediaTimeMs"],
readAheadGrowthRate: json["readAheadGrowthRate"],
useDynamicReadAhead: json["useDynamicReadAhead"],
useYtVodMediaSourceForV2: json["useYtVodMediaSourceForV2"],
enableV2Gapless: json["enableV2Gapless"],
useLiveHeadTimeMillis: json["useLiveHeadTimeMillis"],
allowTrackSelectionWithUpdatedVideoItagsForExoV2: json["allowTrackSelectionWithUpdatedVideoItagsForExoV2"],
maxAllowableTimeBeforeMediaTimeUpdateSec: json["maxAllowableTimeBeforeMediaTimeUpdateSec"],
enableDynamicHdr: json["enableDynamicHdr"],
v2PerformEarlyStreamSelection: json["v2PerformEarlyStreamSelection"],
v2UsePlaybackStreamSelectionResult: json["v2UsePlaybackStreamSelectionResult"],
v2MinTimeBetweenAbrReevaluationMs: json["v2MinTimeBetweenAbrReevaluationMs"],
avoidReusePlaybackAcrossLoadvideos: json["avoidReusePlaybackAcrossLoadvideos"],
enableInfiniteNetworkLoadingRetries: json["enableInfiniteNetworkLoadingRetries"],
reportExoPlayerStateOnTransition: json["reportExoPlayerStateOnTransition"],
manifestlessSequenceMethod: json["manifestlessSequenceMethod"],
useLiveHeadWindow: json["useLiveHeadWindow"],
enableDynamicHdrInHardware: json["enableDynamicHdrInHardware"],
ultralowAudioQualityBandwidthThresholdBps: json["ultralowAudioQualityBandwidthThresholdBps"],
retryLiveNetNocontentWithDelay: json["retryLiveNetNocontentWithDelay"],
ignoreUnneededSeeksToLiveHead: json["ignoreUnneededSeeksToLiveHead"],
drmMetricsQoeLoggingFraction: json["drmMetricsQoeLoggingFraction"]?.toDouble(),
liveNetNocontentMaximumErrors: json["liveNetNocontentMaximumErrors"],
slidingPercentileScalar: json["slidingPercentileScalar"],
minAdaptiveVideoQuality: json["minAdaptiveVideoQuality"],
platypusBackBufferDurationMs: json["platypusBackBufferDurationMs"],
);
Map<String, dynamic> toMap() => {
"useExoPlayer": useExoPlayer,
"useAdaptiveBitrate": useAdaptiveBitrate,
"maxInitialByteRate": maxInitialByteRate,
"minDurationForQualityIncreaseMs": minDurationForQualityIncreaseMs,
"maxDurationForQualityDecreaseMs": maxDurationForQualityDecreaseMs,
"minDurationToRetainAfterDiscardMs": minDurationToRetainAfterDiscardMs,
"lowWatermarkMs": lowWatermarkMs,
"highWatermarkMs": highWatermarkMs,
"lowPoolLoad": lowPoolLoad,
"highPoolLoad": highPoolLoad,
"sufficientBandwidthOverhead": sufficientBandwidthOverhead,
"bufferChunkSizeKb": bufferChunkSizeKb,
"httpConnectTimeoutMs": httpConnectTimeoutMs,
"httpReadTimeoutMs": httpReadTimeoutMs,
"numAudioSegmentsPerFetch": numAudioSegmentsPerFetch,
"numVideoSegmentsPerFetch": numVideoSegmentsPerFetch,
"minDurationForPlaybackStartMs": minDurationForPlaybackStartMs,
"enableExoplayerReuse": enableExoplayerReuse,
"useRadioTypeForInitialQualitySelection": useRadioTypeForInitialQualitySelection,
"blacklistFormatOnError": blacklistFormatOnError,
"enableBandaidHttpDataSource": enableBandaidHttpDataSource,
"httpLoadTimeoutMs": httpLoadTimeoutMs,
"canPlayHdDrm": canPlayHdDrm,
"videoBufferSegmentCount": videoBufferSegmentCount,
"audioBufferSegmentCount": audioBufferSegmentCount,
"useAbruptSplicing": useAbruptSplicing,
"minRetryCount": minRetryCount,
"minChunksNeededToPreferOffline": minChunksNeededToPreferOffline,
"secondsToMaxAggressiveness": secondsToMaxAggressiveness,
"enableSurfaceviewResizeWorkaround": enableSurfaceviewResizeWorkaround,
"enableVp9IfThresholdsPass": enableVp9IfThresholdsPass,
"matchQualityToViewportOnUnfullscreen": matchQualityToViewportOnUnfullscreen,
"lowAudioQualityConnTypes": lowAudioQualityConnTypes == null ? [] : List<dynamic>.from(lowAudioQualityConnTypes!.map((x) => x)),
"useDashForLiveStreams": useDashForLiveStreams,
"enableLibvpxVideoTrackRenderer": enableLibvpxVideoTrackRenderer,
"lowAudioQualityBandwidthThresholdBps": lowAudioQualityBandwidthThresholdBps,
"enableVariableSpeedPlayback": enableVariableSpeedPlayback,
"preferOnesieBufferedFormat": preferOnesieBufferedFormat,
"minimumBandwidthSampleBytes": minimumBandwidthSampleBytes,
"useDashForOtfAndCompletedLiveStreams": useDashForOtfAndCompletedLiveStreams,
"disableCacheAwareVideoFormatEvaluation": disableCacheAwareVideoFormatEvaluation,
"useLiveDvrForDashLiveStreams": useLiveDvrForDashLiveStreams,
"cronetResetTimeoutOnRedirects": cronetResetTimeoutOnRedirects,
"emitVideoDecoderChangeEvents": emitVideoDecoderChangeEvents,
"onesieVideoBufferLoadTimeoutMs": onesieVideoBufferLoadTimeoutMs,
"onesieVideoBufferReadTimeoutMs": onesieVideoBufferReadTimeoutMs,
"libvpxEnableGl": libvpxEnableGl,
"enableVp9EncryptedIfThresholdsPass": enableVp9EncryptedIfThresholdsPass,
"enableOpus": enableOpus,
"usePredictedBuffer": usePredictedBuffer,
"maxReadAheadMediaTimeMs": maxReadAheadMediaTimeMs,
"useMediaTimeCappedLoadControl": useMediaTimeCappedLoadControl,
"allowCacheOverrideToLowerQualitiesWithinRange": allowCacheOverrideToLowerQualitiesWithinRange,
"allowDroppingUndecodedFrames": allowDroppingUndecodedFrames,
"minDurationForPlaybackRestartMs": minDurationForPlaybackRestartMs,
"serverProvidedBandwidthHeader": serverProvidedBandwidthHeader,
"liveOnlyPegStrategy": liveOnlyPegStrategy,
"enableRedirectorHostFallback": enableRedirectorHostFallback,
"enableHighlyAvailableFormatFallbackOnPcr": enableHighlyAvailableFormatFallbackOnPcr,
"recordTrackRendererTimingEvents": recordTrackRendererTimingEvents,
"minErrorsForRedirectorHostFallback": minErrorsForRedirectorHostFallback,
"nonHardwareMediaCodecNames": nonHardwareMediaCodecNames == null ? [] : List<dynamic>.from(nonHardwareMediaCodecNames!.map((x) => x)),
"enableVp9IfInHardware": enableVp9IfInHardware,
"enableVp9EncryptedIfInHardware": enableVp9EncryptedIfInHardware,
"useOpusMedAsLowQualityAudio": useOpusMedAsLowQualityAudio,
"minErrorsForPcrFallback": minErrorsForPcrFallback,
"useStickyRedirectHttpDataSource": useStickyRedirectHttpDataSource,
"onlyVideoBandwidth": onlyVideoBandwidth,
"useRedirectorOnNetworkChange": useRedirectorOnNetworkChange,
"enableMaxReadaheadAbrThreshold": enableMaxReadaheadAbrThreshold,
"cacheCheckDirectoryWritabilityOnce": cacheCheckDirectoryWritabilityOnce,
"predictorType": predictorType,
"slidingPercentile": slidingPercentile,
"slidingWindowSize": slidingWindowSize,
"maxFrameDropIntervalMs": maxFrameDropIntervalMs,
"ignoreLoadTimeoutForFallback": ignoreLoadTimeoutForFallback,
"serverBweMultiplier": serverBweMultiplier,
"drmMaxKeyfetchDelayMs": drmMaxKeyfetchDelayMs,
"maxResolutionForWhiteNoise": maxResolutionForWhiteNoise,
"whiteNoiseRenderEffectMode": whiteNoiseRenderEffectMode,
"enableLibvpxHdr": enableLibvpxHdr,
"enableCacheAwareStreamSelection": enableCacheAwareStreamSelection,
"useExoCronetDataSource": useExoCronetDataSource,
"whiteNoiseScale": whiteNoiseScale,
"whiteNoiseOffset": whiteNoiseOffset,
"preventVideoFrameLaggingWithLibvpx": preventVideoFrameLaggingWithLibvpx,
"enableMediaCodecHdr": enableMediaCodecHdr,
"enableMediaCodecSwHdr": enableMediaCodecSwHdr,
"liveOnlyWindowChunks": liveOnlyWindowChunks,
"bearerMinDurationToRetainAfterDiscardMs": bearerMinDurationToRetainAfterDiscardMs == null ? [] : List<dynamic>.from(bearerMinDurationToRetainAfterDiscardMs!.map((x) => x)),
"forceWidevineL3": forceWidevineL3,
"useAverageBitrate": useAverageBitrate,
"useMedialibAudioTrackRendererForLive": useMedialibAudioTrackRendererForLive,
"useExoPlayerV2": useExoPlayerV2,
"logMediaRequestEventsToCsi": logMediaRequestEventsToCsi,
"onesieFixNonZeroStartTimeFormatSelection": onesieFixNonZeroStartTimeFormatSelection,
"liveOnlyReadaheadStepSizeChunks": liveOnlyReadaheadStepSizeChunks,
"liveOnlyBufferHealthHalfLifeSeconds": liveOnlyBufferHealthHalfLifeSeconds,
"liveOnlyMinBufferHealthRatio": liveOnlyMinBufferHealthRatio,
"liveOnlyMinLatencyToSeekRatio": liveOnlyMinLatencyToSeekRatio,
"manifestlessPartialChunkStrategy": manifestlessPartialChunkStrategy,
"ignoreViewportSizeWhenSticky": ignoreViewportSizeWhenSticky,
"enableLibvpxFallback": enableLibvpxFallback,
"disableLibvpxLoopFilter": disableLibvpxLoopFilter,
"enableVpxMediaView": enableVpxMediaView,
"hdrMinScreenBrightness": hdrMinScreenBrightness,
"hdrMaxScreenBrightnessThreshold": hdrMaxScreenBrightnessThreshold,
"onesieDataSourceAboveCacheDataSource": onesieDataSourceAboveCacheDataSource,
"httpNonplayerLoadTimeoutMs": httpNonplayerLoadTimeoutMs,
"numVideoSegmentsPerFetchStrategy": numVideoSegmentsPerFetchStrategy,
"maxVideoDurationPerFetchMs": maxVideoDurationPerFetchMs,
"maxVideoEstimatedLoadDurationMs": maxVideoEstimatedLoadDurationMs,
"estimatedServerClockHalfLife": estimatedServerClockHalfLife,
"estimatedServerClockStrictOffset": estimatedServerClockStrictOffset,
"minReadAheadMediaTimeMs": minReadAheadMediaTimeMs,
"readAheadGrowthRate": readAheadGrowthRate,
"useDynamicReadAhead": useDynamicReadAhead,
"useYtVodMediaSourceForV2": useYtVodMediaSourceForV2,
"enableV2Gapless": enableV2Gapless,
"useLiveHeadTimeMillis": useLiveHeadTimeMillis,
"allowTrackSelectionWithUpdatedVideoItagsForExoV2": allowTrackSelectionWithUpdatedVideoItagsForExoV2,
"maxAllowableTimeBeforeMediaTimeUpdateSec": maxAllowableTimeBeforeMediaTimeUpdateSec,
"enableDynamicHdr": enableDynamicHdr,
"v2PerformEarlyStreamSelection": v2PerformEarlyStreamSelection,
"v2UsePlaybackStreamSelectionResult": v2UsePlaybackStreamSelectionResult,
"v2MinTimeBetweenAbrReevaluationMs": v2MinTimeBetweenAbrReevaluationMs,
"avoidReusePlaybackAcrossLoadvideos": avoidReusePlaybackAcrossLoadvideos,
"enableInfiniteNetworkLoadingRetries": enableInfiniteNetworkLoadingRetries,
"reportExoPlayerStateOnTransition": reportExoPlayerStateOnTransition,
"manifestlessSequenceMethod": manifestlessSequenceMethod,
"useLiveHeadWindow": useLiveHeadWindow,
"enableDynamicHdrInHardware": enableDynamicHdrInHardware,
"ultralowAudioQualityBandwidthThresholdBps": ultralowAudioQualityBandwidthThresholdBps,
"retryLiveNetNocontentWithDelay": retryLiveNetNocontentWithDelay,
"ignoreUnneededSeeksToLiveHead": ignoreUnneededSeeksToLiveHead,
"drmMetricsQoeLoggingFraction": drmMetricsQoeLoggingFraction,
"liveNetNocontentMaximumErrors": liveNetNocontentMaximumErrors,
"slidingPercentileScalar": slidingPercentileScalar,
"minAdaptiveVideoQuality": minAdaptiveVideoQuality,
"platypusBackBufferDurationMs": platypusBackBufferDurationMs,
};
}
class LidarSdkConfig {
bool? enableActiveViewReporter;
bool? useMediaTime;
bool? sendTosMetrics;
bool? usePlayerState;
bool? enableIosAppStateCheck;
bool? enableIsAndroidVideoAlwaysMeasurable;
bool? enableActiveViewAudioMeasurementAndroid;
LidarSdkConfig({
this.enableActiveViewReporter,
this.useMediaTime,
this.sendTosMetrics,
this.usePlayerState,
this.enableIosAppStateCheck,
this.enableIsAndroidVideoAlwaysMeasurable,
this.enableActiveViewAudioMeasurementAndroid,
});
factory LidarSdkConfig.fromJson(String str) => LidarSdkConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory LidarSdkConfig.fromMap(Map<String, dynamic> json) => LidarSdkConfig(
enableActiveViewReporter: json["enableActiveViewReporter"],
useMediaTime: json["useMediaTime"],
sendTosMetrics: json["sendTosMetrics"],
usePlayerState: json["usePlayerState"],
enableIosAppStateCheck: json["enableIosAppStateCheck"],
enableIsAndroidVideoAlwaysMeasurable: json["enableIsAndroidVideoAlwaysMeasurable"],
enableActiveViewAudioMeasurementAndroid: json["enableActiveViewAudioMeasurementAndroid"],
);
Map<String, dynamic> toMap() => {
"enableActiveViewReporter": enableActiveViewReporter,
"useMediaTime": useMediaTime,
"sendTosMetrics": sendTosMetrics,
"usePlayerState": usePlayerState,
"enableIosAppStateCheck": enableIosAppStateCheck,
"enableIsAndroidVideoAlwaysMeasurable": enableIsAndroidVideoAlwaysMeasurable,
"enableActiveViewAudioMeasurementAndroid": enableActiveViewAudioMeasurementAndroid,
};
}
class MediaCommonConfig {
DynamicReadaheadConfig? dynamicReadaheadConfig;
MediaUstreamerRequestConfig? mediaUstreamerRequestConfig;
PredictedReadaheadConfig? predictedReadaheadConfig;
MediaFetchRetryConfig? mediaFetchRetryConfig;
int? mediaFetchMaximumServerErrors;
int? mediaFetchMaximumNetworkErrors;
int? mediaFetchMaximumErrors;
ServerReadaheadConfig? serverReadaheadConfig;
bool? useServerDrivenAbr;
SabrClientConfig? sabrClientConfig;
MediaCommonConfig({
this.dynamicReadaheadConfig,
this.mediaUstreamerRequestConfig,
this.predictedReadaheadConfig,
this.mediaFetchRetryConfig,
this.mediaFetchMaximumServerErrors,
this.mediaFetchMaximumNetworkErrors,
this.mediaFetchMaximumErrors,
this.serverReadaheadConfig,
this.useServerDrivenAbr,
this.sabrClientConfig,
});
factory MediaCommonConfig.fromJson(String str) => MediaCommonConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory MediaCommonConfig.fromMap(Map<String, dynamic> json) => MediaCommonConfig(
dynamicReadaheadConfig: json["dynamicReadaheadConfig"] == null ? null : DynamicReadaheadConfig.fromMap(json["dynamicReadaheadConfig"]),
mediaUstreamerRequestConfig: json["mediaUstreamerRequestConfig"] == null ? null : MediaUstreamerRequestConfig.fromMap(json["mediaUstreamerRequestConfig"]),
predictedReadaheadConfig: json["predictedReadaheadConfig"] == null ? null : PredictedReadaheadConfig.fromMap(json["predictedReadaheadConfig"]),
mediaFetchRetryConfig: json["mediaFetchRetryConfig"] == null ? null : MediaFetchRetryConfig.fromMap(json["mediaFetchRetryConfig"]),
mediaFetchMaximumServerErrors: json["mediaFetchMaximumServerErrors"],
mediaFetchMaximumNetworkErrors: json["mediaFetchMaximumNetworkErrors"],
mediaFetchMaximumErrors: json["mediaFetchMaximumErrors"],
serverReadaheadConfig: json["serverReadaheadConfig"] == null ? null : ServerReadaheadConfig.fromMap(json["serverReadaheadConfig"]),
useServerDrivenAbr: json["useServerDrivenAbr"],
sabrClientConfig: json["sabrClientConfig"] == null ? null : SabrClientConfig.fromMap(json["sabrClientConfig"]),
);
Map<String, dynamic> toMap() => {
"dynamicReadaheadConfig": dynamicReadaheadConfig?.toMap(),
"mediaUstreamerRequestConfig": mediaUstreamerRequestConfig?.toMap(),
"predictedReadaheadConfig": predictedReadaheadConfig?.toMap(),
"mediaFetchRetryConfig": mediaFetchRetryConfig?.toMap(),
"mediaFetchMaximumServerErrors": mediaFetchMaximumServerErrors,
"mediaFetchMaximumNetworkErrors": mediaFetchMaximumNetworkErrors,
"mediaFetchMaximumErrors": mediaFetchMaximumErrors,
"serverReadaheadConfig": serverReadaheadConfig?.toMap(),
"useServerDrivenAbr": useServerDrivenAbr,
"sabrClientConfig": sabrClientConfig?.toMap(),
};
}
class DynamicReadaheadConfig {
int? maxReadAheadMediaTimeMs;
int? minReadAheadMediaTimeMs;
int? readAheadGrowthRateMs;
int? readAheadWatermarkMarginRatio;
int? minReadAheadWatermarkMarginMs;
int? maxReadAheadWatermarkMarginMs;
bool? shouldIncorporateNetworkActiveState;
DynamicReadaheadConfig({
this.maxReadAheadMediaTimeMs,
this.minReadAheadMediaTimeMs,
this.readAheadGrowthRateMs,
this.readAheadWatermarkMarginRatio,
this.minReadAheadWatermarkMarginMs,
this.maxReadAheadWatermarkMarginMs,
this.shouldIncorporateNetworkActiveState,
});
factory DynamicReadaheadConfig.fromJson(String str) => DynamicReadaheadConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory DynamicReadaheadConfig.fromMap(Map<String, dynamic> json) => DynamicReadaheadConfig(
maxReadAheadMediaTimeMs: json["maxReadAheadMediaTimeMs"],
minReadAheadMediaTimeMs: json["minReadAheadMediaTimeMs"],
readAheadGrowthRateMs: json["readAheadGrowthRateMs"],
readAheadWatermarkMarginRatio: json["readAheadWatermarkMarginRatio"],
minReadAheadWatermarkMarginMs: json["minReadAheadWatermarkMarginMs"],
maxReadAheadWatermarkMarginMs: json["maxReadAheadWatermarkMarginMs"],
shouldIncorporateNetworkActiveState: json["shouldIncorporateNetworkActiveState"],
);
Map<String, dynamic> toMap() => {
"maxReadAheadMediaTimeMs": maxReadAheadMediaTimeMs,
"minReadAheadMediaTimeMs": minReadAheadMediaTimeMs,
"readAheadGrowthRateMs": readAheadGrowthRateMs,
"readAheadWatermarkMarginRatio": readAheadWatermarkMarginRatio,
"minReadAheadWatermarkMarginMs": minReadAheadWatermarkMarginMs,
"maxReadAheadWatermarkMarginMs": maxReadAheadWatermarkMarginMs,
"shouldIncorporateNetworkActiveState": shouldIncorporateNetworkActiveState,
};
}
class MediaFetchRetryConfig {
int? initialDelayMs;
double? backoffFactor;
int? maximumDelayMs;
double? jitterFactor;
MediaFetchRetryConfig({
this.initialDelayMs,
this.backoffFactor,
this.maximumDelayMs,
this.jitterFactor,
});
factory MediaFetchRetryConfig.fromJson(String str) => MediaFetchRetryConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory MediaFetchRetryConfig.fromMap(Map<String, dynamic> json) => MediaFetchRetryConfig(
initialDelayMs: json["initialDelayMs"],
backoffFactor: json["backoffFactor"]?.toDouble(),
maximumDelayMs: json["maximumDelayMs"],
jitterFactor: json["jitterFactor"]?.toDouble(),
);
Map<String, dynamic> toMap() => {
"initialDelayMs": initialDelayMs,
"backoffFactor": backoffFactor,
"maximumDelayMs": maximumDelayMs,
"jitterFactor": jitterFactor,
};
}
class MediaUstreamerRequestConfig {
bool? enableVideoPlaybackRequest;
String? videoPlaybackUstreamerConfig;
bool? videoPlaybackPostEmptyBody;
bool? isVideoPlaybackRequestIdempotent;
MediaUstreamerRequestConfig({
this.enableVideoPlaybackRequest,
this.videoPlaybackUstreamerConfig,
this.videoPlaybackPostEmptyBody,
this.isVideoPlaybackRequestIdempotent,
});
factory MediaUstreamerRequestConfig.fromJson(String str) => MediaUstreamerRequestConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory MediaUstreamerRequestConfig.fromMap(Map<String, dynamic> json) => MediaUstreamerRequestConfig(
enableVideoPlaybackRequest: json["enableVideoPlaybackRequest"],
videoPlaybackUstreamerConfig: json["videoPlaybackUstreamerConfig"],
videoPlaybackPostEmptyBody: json["videoPlaybackPostEmptyBody"],
isVideoPlaybackRequestIdempotent: json["isVideoPlaybackRequestIdempotent"],
);
Map<String, dynamic> toMap() => {
"enableVideoPlaybackRequest": enableVideoPlaybackRequest,
"videoPlaybackUstreamerConfig": videoPlaybackUstreamerConfig,
"videoPlaybackPostEmptyBody": videoPlaybackPostEmptyBody,
"isVideoPlaybackRequestIdempotent": isVideoPlaybackRequestIdempotent,
};
}
class PredictedReadaheadConfig {
int? minReadaheadMs;
int? maxReadaheadMs;
PredictedReadaheadConfig({
this.minReadaheadMs,
this.maxReadaheadMs,
});
factory PredictedReadaheadConfig.fromJson(String str) => PredictedReadaheadConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory PredictedReadaheadConfig.fromMap(Map<String, dynamic> json) => PredictedReadaheadConfig(
minReadaheadMs: json["minReadaheadMs"],
maxReadaheadMs: json["maxReadaheadMs"],
);
Map<String, dynamic> toMap() => {
"minReadaheadMs": minReadaheadMs,
"maxReadaheadMs": maxReadaheadMs,
};
}
class SabrClientConfig {
int? defaultBackOffTimeMs;
bool? enableHostFallback;
int? primaryProbingDelayMs;
int? maxFailureAttemptsBeforeFallback;
SabrClientConfig({
this.defaultBackOffTimeMs,
this.enableHostFallback,
this.primaryProbingDelayMs,
this.maxFailureAttemptsBeforeFallback,
});
factory SabrClientConfig.fromJson(String str) => SabrClientConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory SabrClientConfig.fromMap(Map<String, dynamic> json) => SabrClientConfig(
defaultBackOffTimeMs: json["defaultBackOffTimeMs"],
enableHostFallback: json["enableHostFallback"],
primaryProbingDelayMs: json["primaryProbingDelayMs"],
maxFailureAttemptsBeforeFallback: json["maxFailureAttemptsBeforeFallback"],
);
Map<String, dynamic> toMap() => {
"defaultBackOffTimeMs": defaultBackOffTimeMs,
"enableHostFallback": enableHostFallback,
"primaryProbingDelayMs": primaryProbingDelayMs,
"maxFailureAttemptsBeforeFallback": maxFailureAttemptsBeforeFallback,
};
}
class ServerReadaheadConfig {
bool? enable;
NextRequestPolicy? nextRequestPolicy;
ServerReadaheadConfig({
this.enable,
this.nextRequestPolicy,
});
factory ServerReadaheadConfig.fromJson(String str) => ServerReadaheadConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory ServerReadaheadConfig.fromMap(Map<String, dynamic> json) => ServerReadaheadConfig(
enable: json["enable"],
nextRequestPolicy: json["nextRequestPolicy"] == null ? null : NextRequestPolicy.fromMap(json["nextRequestPolicy"]),
);
Map<String, dynamic> toMap() => {
"enable": enable,
"nextRequestPolicy": nextRequestPolicy?.toMap(),
};
}
class NextRequestPolicy {
int? targetAudioReadaheadMs;
int? targetVideoReadaheadMs;
NextRequestPolicy({
this.targetAudioReadaheadMs,
this.targetVideoReadaheadMs,
});
factory NextRequestPolicy.fromJson(String str) => NextRequestPolicy.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory NextRequestPolicy.fromMap(Map<String, dynamic> json) => NextRequestPolicy(
targetAudioReadaheadMs: json["targetAudioReadaheadMs"],
targetVideoReadaheadMs: json["targetVideoReadaheadMs"],
);
Map<String, dynamic> toMap() => {
"targetAudioReadaheadMs": targetAudioReadaheadMs,
"targetVideoReadaheadMs": targetVideoReadaheadMs,
};
}
class NetworkProtocolConfig {
bool? useQuic;
NetworkProtocolConfig({
this.useQuic,
});
factory NetworkProtocolConfig.fromJson(String str) => NetworkProtocolConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory NetworkProtocolConfig.fromMap(Map<String, dynamic> json) => NetworkProtocolConfig(
useQuic: json["useQuic"],
);
Map<String, dynamic> toMap() => {
"useQuic": useQuic,
};
}
class PlayerRestorationConfig {
bool? restoreIntoStoppedState;
PlayerRestorationConfig({
this.restoreIntoStoppedState,
});
factory PlayerRestorationConfig.fromJson(String str) => PlayerRestorationConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory PlayerRestorationConfig.fromMap(Map<String, dynamic> json) => PlayerRestorationConfig(
restoreIntoStoppedState: json["restoreIntoStoppedState"],
);
Map<String, dynamic> toMap() => {
"restoreIntoStoppedState": restoreIntoStoppedState,
};
}
class RetryConfig {
List<String>? retryEligibleErrors;
int? retryUnderSameConditionAttempts;
int? retryWithNewSurfaceAttempts;
bool? progressiveFallbackOnNonNetworkErrors;
bool? l3FallbackOnDrmErrors;
bool? retryAfterCacheRemoval;
bool? widevineL3EnforcedFallbackOnDrmErrors;
bool? exoProxyableFormatFallback;
int? maxPlayerRetriesWhenNetworkUnavailable;
bool? suppressFatalErrorAfterStop;
bool? fallbackToSwDecoderOnFormatDecodeError;
RetryConfig({
this.retryEligibleErrors,
this.retryUnderSameConditionAttempts,
this.retryWithNewSurfaceAttempts,
this.progressiveFallbackOnNonNetworkErrors,
this.l3FallbackOnDrmErrors,
this.retryAfterCacheRemoval,
this.widevineL3EnforcedFallbackOnDrmErrors,
this.exoProxyableFormatFallback,
this.maxPlayerRetriesWhenNetworkUnavailable,
this.suppressFatalErrorAfterStop,
this.fallbackToSwDecoderOnFormatDecodeError,
});
factory RetryConfig.fromJson(String str) => RetryConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory RetryConfig.fromMap(Map<String, dynamic> json) => RetryConfig(
retryEligibleErrors: json["retryEligibleErrors"] == null ? [] : List<String>.from(json["retryEligibleErrors"]!.map((x) => x)),
retryUnderSameConditionAttempts: json["retryUnderSameConditionAttempts"],
retryWithNewSurfaceAttempts: json["retryWithNewSurfaceAttempts"],
progressiveFallbackOnNonNetworkErrors: json["progressiveFallbackOnNonNetworkErrors"],
l3FallbackOnDrmErrors: json["l3FallbackOnDrmErrors"],
retryAfterCacheRemoval: json["retryAfterCacheRemoval"],
widevineL3EnforcedFallbackOnDrmErrors: json["widevineL3EnforcedFallbackOnDrmErrors"],
exoProxyableFormatFallback: json["exoProxyableFormatFallback"],
maxPlayerRetriesWhenNetworkUnavailable: json["maxPlayerRetriesWhenNetworkUnavailable"],
suppressFatalErrorAfterStop: json["suppressFatalErrorAfterStop"],
fallbackToSwDecoderOnFormatDecodeError: json["fallbackToSwDecoderOnFormatDecodeError"],
);
Map<String, dynamic> toMap() => {
"retryEligibleErrors": retryEligibleErrors == null ? [] : List<dynamic>.from(retryEligibleErrors!.map((x) => x)),
"retryUnderSameConditionAttempts": retryUnderSameConditionAttempts,
"retryWithNewSurfaceAttempts": retryWithNewSurfaceAttempts,
"progressiveFallbackOnNonNetworkErrors": progressiveFallbackOnNonNetworkErrors,
"l3FallbackOnDrmErrors": l3FallbackOnDrmErrors,
"retryAfterCacheRemoval": retryAfterCacheRemoval,
"widevineL3EnforcedFallbackOnDrmErrors": widevineL3EnforcedFallbackOnDrmErrors,
"exoProxyableFormatFallback": exoProxyableFormatFallback,
"maxPlayerRetriesWhenNetworkUnavailable": maxPlayerRetriesWhenNetworkUnavailable,
"suppressFatalErrorAfterStop": suppressFatalErrorAfterStop,
"fallbackToSwDecoderOnFormatDecodeError": fallbackToSwDecoderOnFormatDecodeError,
};
}
class TaskCoordinatorConfig {
int? prefetchCoordinatorBufferedPositionMillisRelease;
int? prefetchCoordinatorBufferedPositionMillisPause;
TaskCoordinatorConfig({
this.prefetchCoordinatorBufferedPositionMillisRelease,
this.prefetchCoordinatorBufferedPositionMillisPause,
});
factory TaskCoordinatorConfig.fromJson(String str) => TaskCoordinatorConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory TaskCoordinatorConfig.fromMap(Map<String, dynamic> json) => TaskCoordinatorConfig(
prefetchCoordinatorBufferedPositionMillisRelease: json["prefetchCoordinatorBufferedPositionMillisRelease"],
prefetchCoordinatorBufferedPositionMillisPause: json["prefetchCoordinatorBufferedPositionMillisPause"],
);
Map<String, dynamic> toMap() => {
"prefetchCoordinatorBufferedPositionMillisRelease": prefetchCoordinatorBufferedPositionMillisRelease,
"prefetchCoordinatorBufferedPositionMillisPause": prefetchCoordinatorBufferedPositionMillisPause,
};
}
class VariableSpeedConfig {
bool? showVariableSpeedDisabledDialog;
VariableSpeedConfig({
this.showVariableSpeedDisabledDialog,
});
factory VariableSpeedConfig.fromJson(String str) => VariableSpeedConfig.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory VariableSpeedConfig.fromMap(Map<String, dynamic> json) => VariableSpeedConfig(
showVariableSpeedDisabledDialog: json["showVariableSpeedDisabledDialog"],
);
Map<String, dynamic> toMap() => {
"showVariableSpeedDisabledDialog": showVariableSpeedDisabledDialog,
};
}
class ResponseContext {
String? visitorData;
List<ServiceTrackingParam>? serviceTrackingParams;
int? maxAgeSeconds;
ResponseContext({
this.visitorData,
this.serviceTrackingParams,
this.maxAgeSeconds,
});
factory ResponseContext.fromJson(String str) => ResponseContext.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory ResponseContext.fromMap(Map<String, dynamic> json) => ResponseContext(
visitorData: json["visitorData"],
serviceTrackingParams: json["serviceTrackingParams"] == null ? [] : List<ServiceTrackingParam>.from(json["serviceTrackingParams"]!.map((x) => ServiceTrackingParam.fromMap(x))),
maxAgeSeconds: json["maxAgeSeconds"],
);
Map<String, dynamic> toMap() => {
"visitorData": visitorData,
"serviceTrackingParams": serviceTrackingParams == null ? [] : List<dynamic>.from(serviceTrackingParams!.map((x) => x.toMap())),
"maxAgeSeconds": maxAgeSeconds,
};
}
class ServiceTrackingParam {
String? service;
List<Param>? params;
ServiceTrackingParam({
this.service,
this.params,
});
factory ServiceTrackingParam.fromJson(String str) => ServiceTrackingParam.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory ServiceTrackingParam.fromMap(Map<String, dynamic> json) => ServiceTrackingParam(
service: json["service"],
params: json["params"] == null ? [] : List<Param>.from(json["params"]!.map((x) => Param.fromMap(x))),
);
Map<String, dynamic> toMap() => {
"service": service,
"params": params == null ? [] : List<dynamic>.from(params!.map((x) => x.toMap())),
};
}
class Param {
String? key;
String? value;
Param({
this.key,
this.value,
});
factory Param.fromJson(String str) => Param.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Param.fromMap(Map<String, dynamic> json) => Param(
key: json["key"],
value: json["value"],
);
Map<String, dynamic> toMap() => {
"key": key,
"value": value,
};
}
class Storyboards {
PlayerStoryboardSpecRenderer? playerStoryboardSpecRenderer;
Storyboards({
this.playerStoryboardSpecRenderer,
});
factory Storyboards.fromJson(String str) => Storyboards.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Storyboards.fromMap(Map<String, dynamic> json) => Storyboards(
playerStoryboardSpecRenderer: json["playerStoryboardSpecRenderer"] == null ? null : PlayerStoryboardSpecRenderer.fromMap(json["playerStoryboardSpecRenderer"]),
);
Map<String, dynamic> toMap() => {
"playerStoryboardSpecRenderer": playerStoryboardSpecRenderer?.toMap(),
};
}
class PlayerStoryboardSpecRenderer {
String? spec;
int? recommendedLevel;
PlayerStoryboardSpecRenderer({
this.spec,
this.recommendedLevel,
});
factory PlayerStoryboardSpecRenderer.fromJson(String str) => PlayerStoryboardSpecRenderer.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory PlayerStoryboardSpecRenderer.fromMap(Map<String, dynamic> json) => PlayerStoryboardSpecRenderer(
spec: json["spec"],
recommendedLevel: json["recommendedLevel"],
);
Map<String, dynamic> toMap() => {
"spec": spec,
"recommendedLevel": recommendedLevel,
};
}
class StreamingData {
String? expiresInSeconds;
List<Format>? formats;
List<AdaptiveFormat>? adaptiveFormats;
StreamingData({
this.expiresInSeconds,
this.formats,
this.adaptiveFormats,
});
factory StreamingData.fromJson(String str) => StreamingData.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory StreamingData.fromMap(Map<String, dynamic> json) => StreamingData(
expiresInSeconds: json["expiresInSeconds"],
formats: json["formats"] == null ? [] : List<Format>.from(json["formats"]!.map((x) => Format.fromMap(x))),
adaptiveFormats: json["adaptiveFormats"] == null ? [] : List<AdaptiveFormat>.from(json["adaptiveFormats"]!.map((x) => AdaptiveFormat.fromMap(x))),
);
Map<String, dynamic> toMap() => {
"expiresInSeconds": expiresInSeconds,
"formats": formats == null ? [] : List<dynamic>.from(formats!.map((x) => x.toMap())),
"adaptiveFormats": adaptiveFormats == null ? [] : List<dynamic>.from(adaptiveFormats!.map((x) => x.toMap())),
};
}
class AdaptiveFormat {
int? itag;
String? url;
String? mimeType;
int? bitrate;
int? width;
int? height;
Range? initRange;
Range? indexRange;
String? lastModified;
String? contentLength;
String? quality;
int? fps;
String? qualityLabel;
String? projectionType;
int? averageBitrate;
String? approxDurationMs;
ColorInfo? colorInfo;
bool? highReplication;
String? audioQuality;
String? audioSampleRate;
int? audioChannels;
double? loudnessDb;
AdaptiveFormat({
this.itag,
this.url,
this.mimeType,
this.bitrate,
this.width,
this.height,
this.initRange,
this.indexRange,
this.lastModified,
this.contentLength,
this.quality,
this.fps,
this.qualityLabel,
this.projectionType,
this.averageBitrate,
this.approxDurationMs,
this.colorInfo,
this.highReplication,
this.audioQuality,
this.audioSampleRate,
this.audioChannels,
this.loudnessDb,
});
factory AdaptiveFormat.fromJson(String str) => AdaptiveFormat.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory AdaptiveFormat.fromMap(Map<String, dynamic> json) => AdaptiveFormat(
itag: json["itag"],
url: json["url"],
mimeType: json["mimeType"],
bitrate: json["bitrate"],
width: json["width"],
height: json["height"],
initRange: json["initRange"] == null ? null : Range.fromMap(json["initRange"]),
indexRange: json["indexRange"] == null ? null : Range.fromMap(json["indexRange"]),
lastModified: json["lastModified"],
contentLength: json["contentLength"],
quality: json["quality"],
fps: json["fps"],
qualityLabel: json["qualityLabel"],
projectionType: json["projectionType"],
averageBitrate: json["averageBitrate"],
approxDurationMs: json["approxDurationMs"],
colorInfo: json["colorInfo"] == null ? null : ColorInfo.fromMap(json["colorInfo"]),
highReplication: json["highReplication"],
audioQuality: json["audioQuality"],
audioSampleRate: json["audioSampleRate"],
audioChannels: json["audioChannels"],
loudnessDb: json["loudnessDb"]?.toDouble(),
);
Map<String, dynamic> toMap() => {
"itag": itag,
"url": url,
"mimeType": mimeType,
"bitrate": bitrate,
"width": width,
"height": height,
"initRange": initRange?.toMap(),
"indexRange": indexRange?.toMap(),
"lastModified": lastModified,
"contentLength": contentLength,
"quality": quality,
"fps": fps,
"qualityLabel": qualityLabel,
"projectionType": projectionType,
"averageBitrate": averageBitrate,
"approxDurationMs": approxDurationMs,
"colorInfo": colorInfo?.toMap(),
"highReplication": highReplication,
"audioQuality": audioQuality,
"audioSampleRate": audioSampleRate,
"audioChannels": audioChannels,
"loudnessDb": loudnessDb,
};
}
class ColorInfo {
String? primaries;
String? transferCharacteristics;
String? matrixCoefficients;
ColorInfo({
this.primaries,
this.transferCharacteristics,
this.matrixCoefficients,
});
factory ColorInfo.fromJson(String str) => ColorInfo.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory ColorInfo.fromMap(Map<String, dynamic> json) => ColorInfo(
primaries: json["primaries"],
transferCharacteristics: json["transferCharacteristics"],
matrixCoefficients: json["matrixCoefficients"],
);
Map<String, dynamic> toMap() => {
"primaries": primaries,
"transferCharacteristics": transferCharacteristics,
"matrixCoefficients": matrixCoefficients,
};
}
class Range {
String? start;
String? end;
Range({
this.start,
this.end,
});
factory Range.fromJson(String str) => Range.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Range.fromMap(Map<String, dynamic> json) => Range(
start: json["start"],
end: json["end"],
);
Map<String, dynamic> toMap() => {
"start": start,
"end": end,
};
}
class Format {
int? itag;
String? url;
String? mimeType;
int? bitrate;
int? width;
int? height;
String? lastModified;
String? quality;
int? fps;
String? qualityLabel;
String? projectionType;
String? audioQuality;
String? approxDurationMs;
String? audioSampleRate;
int? audioChannels;
Format({
this.itag,
this.url,
this.mimeType,
this.bitrate,
this.width,
this.height,
this.lastModified,
this.quality,
this.fps,
this.qualityLabel,
this.projectionType,
this.audioQuality,
this.approxDurationMs,
this.audioSampleRate,
this.audioChannels,
});
factory Format.fromJson(String str) => Format.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory Format.fromMap(Map<String, dynamic> json) => Format(
itag: json["itag"],
url: json["url"],
mimeType: json["mimeType"],
bitrate: json["bitrate"],
width: json["width"],
height: json["height"],
lastModified: json["lastModified"],
quality: json["quality"],
fps: json["fps"],
qualityLabel: json["qualityLabel"],
projectionType: json["projectionType"],
audioQuality: json["audioQuality"],
approxDurationMs: json["approxDurationMs"],
audioSampleRate: json["audioSampleRate"],
audioChannels: json["audioChannels"],
);
Map<String, dynamic> toMap() => {
"itag": itag,
"url": url,
"mimeType": mimeType,
"bitrate": bitrate,
"width": width,
"height": height,
"lastModified": lastModified,
"quality": quality,
"fps": fps,
"qualityLabel": qualityLabel,
"projectionType": projectionType,
"audioQuality": audioQuality,
"approxDurationMs": approxDurationMs,
"audioSampleRate": audioSampleRate,
"audioChannels": audioChannels,
};
}
class VideoDetails {
String? videoId;
String? title;
String? lengthSeconds;
String? channelId;
bool? isOwnerViewing;
bool? isCrawlable;
VideoDetailsThumbnail? thumbnail;
bool? allowRatings;
String? viewCount;
String? author;
bool? isPrivate;
bool? isUnpluggedCorpus;
String? musicVideoType;
bool? isLiveContent;
VideoDetails({
this.videoId,
this.title,
this.lengthSeconds,
this.channelId,
this.isOwnerViewing,
this.isCrawlable,
this.thumbnail,
this.allowRatings,
this.viewCount,
this.author,
this.isPrivate,
this.isUnpluggedCorpus,
this.musicVideoType,
this.isLiveContent,
});
factory VideoDetails.fromJson(String str) => VideoDetails.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory VideoDetails.fromMap(Map<String, dynamic> json) => VideoDetails(
videoId: json["videoId"],
title: json["title"],
lengthSeconds: json["lengthSeconds"],
channelId: json["channelId"],
isOwnerViewing: json["isOwnerViewing"],
isCrawlable: json["isCrawlable"],
thumbnail: json["thumbnail"] == null ? null : VideoDetailsThumbnail.fromMap(json["thumbnail"]),
allowRatings: json["allowRatings"],
viewCount: json["viewCount"],
author: json["author"],
isPrivate: json["isPrivate"],
isUnpluggedCorpus: json["isUnpluggedCorpus"],
musicVideoType: json["musicVideoType"],
isLiveContent: json["isLiveContent"],
);
Map<String, dynamic> toMap() => {
"videoId": videoId,
"title": title,
"lengthSeconds": lengthSeconds,
"channelId": channelId,
"isOwnerViewing": isOwnerViewing,
"isCrawlable": isCrawlable,
"thumbnail": thumbnail?.toMap(),
"allowRatings": allowRatings,
"viewCount": viewCount,
"author": author,
"isPrivate": isPrivate,
"isUnpluggedCorpus": isUnpluggedCorpus,
"musicVideoType": musicVideoType,
"isLiveContent": isLiveContent,
};
}
class VideoDetailsThumbnail {
List<ThumbnailElement>? thumbnails;
VideoDetailsThumbnail({
this.thumbnails,
});
factory VideoDetailsThumbnail.fromJson(String str) => VideoDetailsThumbnail.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory VideoDetailsThumbnail.fromMap(Map<String, dynamic> json) => VideoDetailsThumbnail(
thumbnails: json["thumbnails"] == null ? [] : List<ThumbnailElement>.from(json["thumbnails"]!.map((x) => ThumbnailElement.fromMap(x))),
);
Map<String, dynamic> toMap() => {
"thumbnails": thumbnails == null ? [] : List<dynamic>.from(thumbnails!.map((x) => x.toMap())),
};
}
class ThumbnailElement {
String? url;
int? width;
int? height;
ThumbnailElement({
this.url,
this.width,
this.height,
});
factory ThumbnailElement.fromJson(String str) => ThumbnailElement.fromMap(json.decode(str));
String toJson() => json.encode(toMap());
factory ThumbnailElement.fromMap(Map<String, dynamic> json) => ThumbnailElement(
url: json["url"],
width: json["width"],
height: json["height"],
);
Map<String, dynamic> toMap() => {
"url": url,
"width": width,
"height": height,
};
}