Skip to content
Roboto
Esc
↑↓navigate↵open⌘Jpreview
On this page

roboto.formats.mcap.reader

Module Contents

END_OF_STREAM

roboto.formats.mcap.reader.END_OF_STREAM#View Source

Sentinel returned by McapReader.next_decoded() when the stream is exhausted.

A decoded message value can legitimately be None (a JSON null payload), so exhaustion cannot be signaled with None without making a real null-valued message indistinguishable from end-of-stream. Callers test result is END_OF_STREAM to detect exhaustion and treat every other value – None included – as a delivered message.

McapEnvelopeTimestamp

class roboto.formats.mcap.reader.McapEnvelopeTimestamp#View Source

Bases: NamedTuple

The pair of timestamps an MCAP message envelope carries.

Every MCAP message records two times in nanoseconds: 1. log_time, when the message was written to the file, and 2. publish_time, when its producer published it.

Both fields are math.inf when the reader is exhausted.

Attributes

McapEnvelopeTimestamp.log_time

log_time int | float #

McapEnvelopeTimestamp.publish_time

publish_time int | float #

McapReader

class roboto.formats.mcap.reader.McapReader(stream, fields, start_time=None, end_time=None, log_time_order=True, topic_name=None)#View Source

Reader for processing MCAP files with field projection.

Provides an iterator interface for reading decoded messages from MCAP files, filtered by log time and optionally by topic, and projected to selected fields. Handles JSON, msgpack, and the ROS/CDR encodings (ros1msg / ros2msg / ros2idl / omgidl).

Parameters

stream IO[bytes]
fields collections.abc.Sequence[roboto.formats.fields.FieldSelection]
start_time Optional[int]
end_time Optional[int]
log_time_order bool
topic_name Optional[str]

Properties

McapReader.field_paths

field_paths list[tuple[str, ...]] #

Get the path of each field being projected, in the order the fields were given at initialization.

Returns

list[tuple[str, ...]]

One tuple per field, its path_in_schema:

the path components from the schema root to the field.

McapReader.has_next

has_next bool #

Check if there are more messages available to read.

Returns

bool

True if there are more messages to read, False otherwise.

McapReader.next()

next()#View Source

Read and return the next decoded message.

Advances the reader to the next message and returns it as a DecodedMessage object, or None if no more messages are available.

Returns

DecodedMessage containing the next message data, or None if no more messages.

Usage

while reader.has_next:
    message = reader.next()
    if message:
        data = message.to_dict()
        print(f"Message at {data.get('log_time')}: {data}")

McapReader.next_decoded()

next_decoded()#View Source

Read and return the next message’s raw decoded value, advancing the reader.

The raw value is what the format decoder produced – a dict for JSON-encoded messages, and nested dict / sequence / scalar values for ROS/CDR encodings – with no projection applied. Callers that want projected dictionary output use next() and DecodedMessage.to_dict() instead.

A decoded value of None is a real message (a JSON null payload) and is delivered as such. Exhaustion is signaled with the dedicated END_OF_STREAM sentinel instead, so callers must test result is END_OF_STREAM rather than result is None to detect the end.

Returns

Any

The decoded message value, or END_OF_STREAM if no more messages are available.

Properties

McapReader.next_envelope_timestamp

next_envelope_timestamp McapEnvelopeTimestamp #

Get the envelope timestamps of the next message to be read.

Returns

The next message’s log_time and publish_time in nanoseconds, or both math.inf if no more messages.

McapReader.next_message_is_time_aligned()

next_message_is_time_aligned(timestamp)#View Source

Check if the next message has the specified timestamp.

Used for time-aligned reading when merging data from multiple readers.

Parameters

timestamp Union[int, float]

Timestamp to check against in nanoseconds.

Returns

bool

True if the next message has the specified timestamp, False otherwise.

Was this page helpful?