youtube_explode/lib/src/videos/streams/stream_container.dart

48 lines
1.3 KiB
Dart

import 'package:freezed_annotation/freezed_annotation.dart';
part 'stream_container.freezed.dart';
part 'stream_container.g.dart';
/// Stream container.
@freezed
class StreamContainer with _$StreamContainer {
/// Initializes an instance of [StreamContainer]
const factory StreamContainer._internal(
/// Container name.
/// Can be used as file extension
String name) = _StreamContainer;
factory StreamContainer.fromJson(Map<String, dynamic> json) =>
StreamContainer.parse(json['name'] as String);
const StreamContainer._();
/// MPEG-4 Part 14 (.mp4).
static const StreamContainer mp4 = StreamContainer._internal('mp4');
/// Web Media (.webm).
static const StreamContainer webM = StreamContainer._internal('webm');
/// 3rd Generation Partnership Project (.3gpp).
static const StreamContainer tgpp = StreamContainer._internal('3gpp');
/// Parse a container from name.
factory StreamContainer.parse(String name) {
if (name.toLowerCase() == 'mp4') {
return StreamContainer.mp4;
}
if (name.toLowerCase() == 'webm') {
return StreamContainer.webM;
}
if (name.toLowerCase() == '3gpp') {
return StreamContainer.tgpp;
}
throw ArgumentError.value(name, 'name', 'Valid values: mp4, webm, 3gpp');
}
@override
String toString() => name;
}