The previous parts covered AVTP, ACF, and the ARXML configuration conceptually and structurally. This part shows two complete end-to-end examples — both followable with the real example programs from Open1722.
Example 1: A camera stream from capture to delivery
As noted in Part 1:
the AUTOSAR module |
Sender side: reading video and sending it as an AVTPDU
cvf-talker reads an H.264 byte stream from stdin and packs it into CVF
AVTPDUs. In practice, this is combined with GStreamer to feed in a real
video source (or a synthetic test pattern for testing):
gst-launch-1.0 -e -q videotestsrc pattern=ball \
! video/x-raw,width=192,height=144 ! x264enc \
! video/x-h264,stream-format=byte-stream ! filesink location=/dev/stdout \
| cvf-talker <args>Prerequisite for a clean stream: the system clock must be synchronized with
the NIC’s PTP hardware clock (PHC), and that clock in turn with the network’s
PTP time ( |
Switch side: stream identification + time-aware shaping
For the stream to actually be forwarded deterministically by the switch, it needs the mechanisms already covered in the EthSwt series:
Stream identification maps the stream (via its stream ID) to an egress port
Time-aware shaping reserves the time slot during which the stream is guaranteed to be forwarded
Without both of these mechanisms in the switch, the stream remains an ordinary best-effort packet — deterministic delivery is a switch property, not purely an endpoint property.
Receiver side: presenting at the right time
cvf-listener receives the CVF AVTPDUs, waits until the presentation time
encoded in the timestamp, and only then outputs the video data:
cvf-listener <args> | gst-launch-1.0 filesrc location=/dev/stdin \
! h264parse ! avdec_h264 ! videoconvert ! autovideosinkDeliberately waiting for the presentation time is the actual point of AVTP streaming: the receiver doesn’t display the frame the moment it arrives, but exactly at the time encoded in the header — that’s what keeps multiple synchronously running streams (e.g. surround view from four cameras) in sync in the first place. |
Example 2: Transparently tunneling a CAN subnet via ACF.CAN
Unlike the camera example, this one is a direct match for the AUTOSAR
ACF_CAN subtype from
Part 2,
since Open1722 ships a matching dedicated example for it: acf-can-talker,
acf-can-listener, and acf-can-bridge.
Sender side: reading a CAN frame and tunneling it
# Reads CAN frames from a SocketCAN interface (e.g. can0) and tunnels them
# as ACF_CAN messages over the given Ethernet interface
acf-can-talker <ethernet-interface> <can-interface> <destination-mac>Receiver side: converting ACF_CAN back into CAN
# Receives ACF_CAN messages and replays them on a local SocketCAN interface
acf-can-listener <ethernet-interface> <can-interface>Both commands together form a unidirectional bridge (CAN bus A → CAN bus
B). For bidirectional traffic, Open1722 additionally offers
|
With |
Summary
| Example | Key takeaway |
|---|---|
Camera stream (video) | AUTOSAR uses IIDC, Open1722 demonstrates the same principle only via CVF — the end-to-end flow (PTP sync, stream identification, time-aware shaping, presentation time) still carries over |
CAN tunnel (ACF_CAN) | A direct match for the AUTOSAR subtype — |
Determinism | Comes from the switch (stream identification + time-aware shaping) in both cases, not from the endpoint alone |
Next step | Part 5 rebuilds the CAN-tunnel example as a hands-on project on two real BeagleBone Black boards — with the Open1722 kernel module instead of user-space apps |