ebml 1.0.1 copy "ebml: ^1.0.1" to clipboard
ebml: ^1.0.1 copied to clipboard

An RFC 8749 compliant Extensible Binary Meta Language parser.

example/example.dart

import 'package:http/http.dart';
import 'package:xml/xml.dart';

import 'package:ebml/ebml.dart';

// Matroska (.mkv files) is a format defined as an EBML schema
final matroskaSchemaUrl = Uri.parse(
    'https://raw.githubusercontent.com/ietf-wg-cellar/matroska-specification/master/ebml_matroska.xml');
final sampleMatroskaFileUrl = Uri.parse(
    'https://github.com/ietf-wg-cellar/matroska-test-files/raw/master/test_files/test1.mkv');

void main() async {
  final http = Client();

  final matroskaSchemaContent = (await http.get(matroskaSchemaUrl)).body;
  final matroskaSchema = ebmlSchema.decode(
    XmlDocument.parse(matroskaSchemaContent),
  );

  print('Matroska doctype: ${matroskaSchema.docType}');
  print('Matroska schema element count: ${matroskaSchema.elements.length}');

  // Create an instance of the EBML codec using the schema to decode EBML
  // documents of that schema type.
  final matroska = EbmlCodec(matroskaSchema);

  final streamedSampleContent =
      (await http.send(Request('GET', sampleMatroskaFileUrl))).stream;
  final streamedSample = streamedSampleContent.transform(matroska.decoder);

  await for (final element in streamedSample) {
    // Use switch (element) and an object pattern for better typing on
    // element.data
    switch (element) {
      case BinaryElement(:final name, :final data):
        print('Found binary element $name with ${data.length} bytes of data');
      case MasterElement(:final name, :final data):
        print('Found master element $name with ${data.length} children');
      case _:
        print(
          'Found binary element ${element.name} with data: ${element.data}',
        );
    }
  }
}
0
likes
150
points
35
downloads

Publisher

unverified uploader

Weekly Downloads

An RFC 8749 compliant Extensible Binary Meta Language parser.

Repository (GitHub)

Topics

#ebml #codec

Documentation

API reference

License

MIT (license)

Dependencies

collection, petitparser, xml

More

Packages that depend on ebml