Skip to content

RUNE-2001: Media Export Driver Proposed

Updated2026-08-23

Summary

There is no public MediaExportDriver in the current design. Export orchestration prepares caller-owned IVideoTrack and optional IAudioTrack inputs, and a single IMediaEncoder pulls timestamped samples until end of stream.

Design

  • Video export is render-bound: StoryRenderTrack chooses timestamps frame-by-frame, seeks StoryPlayback, renders one frame, and surfaces VideoSample values through IVideoTrack.
  • Audio export is sample-domain: orchestration prepares one IAudioBuffer graph, wraps it as AudioBufferTrack, and lets the encoder pull timestamped AudioSample chunks.
  • Final container assembly is now an internal concern of IMediaEncoder, not a separate public step.
  • StoryExporter builds a StoryPlayback, creates StoryRenderTrack plus optional AudioBufferTrack, and passes them to IMediaEncoder.Encode(...).

Ownership

  • IVideoTrack and IAudioTrack are caller-supplied transport adapters, not backend-owned driver abstractions.
  • VideoSample and AudioSample carry timestamp, duration, and disposal semantics with each returned unit.
  • The encoder owns encode/mux policy; orchestration owns scheduling and prepared-track lifetime.

Boundaries

There is no combined driver and no separate export-source abstraction in Rune.Media. Story/orchestration code owns scheduling and track generation, while media backends own encoding, decoding, and container details behind IMediaEncoder/IMediaDecoder.

Rune Project brings Rune Story authoring together with the Rune Engine rendering foundation.