Skip to content

Conversation

@danal97
Copy link
Contributor

@danal97 danal97 commented Sep 15, 2025

Enhanced the Rivermax RX manager to support multiple streams on the same thread with stream-specific packet processing and queueing capabilities.
Enhance TX manager to support sending multiple streams on the same thread.

Key changes:

  • Enhanced RDK applications (ipo_receiver, rtp_receiver and media_sender) to use an extension of RDK AppSetting in order to set threads setting. Each thread has it's dedicated core, ID and streams settings.
  • Enhanced burst manager to support per-stream ID burst queues. (Each stream ID has its own dedicated burst queue for packet segregation).
  • Maintained backward compatibility: bench RX processes bursts regardless of stream ID.
  • Add new application for receiving and processing multiple video streams simultaneously using the advanced networking framework with Rivermax manager. This application serves as a reference implementation for multi-stream media reception scenarios in advanced networking deployments.
  • Rivermax TX manager also supports multiple streams - bench TX application sends the same data via multiple streams

This PR is rebased to Rony's PR/970.
The last 4 commits are new.

ronyrad and others added 18 commits September 15, 2025 12:28
- Remove duplicate docstring headers from source files and overridden functions
- Centralize documentation in class definitions to reduce maintenance overhead
- Improve code readability by eliminating redundant comments

Signed-off-by: Rony Rado <[email protected]>
- Rename all code references from 'rmax' to 'rivermax' for consistency
- Update filenames containing 'rmax' to use full 'rivermax' naming
- Modify documentation/comments using abbreviated form
- Update CMakeLists.txt and build configurations

Affected components:
* rmax_config_manager → rivermax_config_manager
* rmax_utils → rivermax_utils
* RmaxParams → RivermaxParams
* All instances in source headers/docs/comments

Signed-off-by: Rony Rado <[email protected]>
- Update Rivermax SDK from 1.60.6 to 1.70.21
- Replace legacy rmax-ral-lib with modern rivermax-dev-kit components
- Implement multi-receiver architecture supporting:
  - IPO receivers SMPTE 2022-7
  - RTP receivers SMPTE 2210-20
  - Media Frame Transmitters (SMPTE 2110-20)
- Refactor configuration system with typed builders:
  - Strong type checking for queue parameters
  - Validation pipelines for settings
  - Auto-generated documentation hooks
- Update build system:
  - New CMake targets for dev-kit services
  - Dockerfile SDK version alignment
  - Dependency cleanup
- Improve memory management and resource cleanup.
- Add proper shutdown handling for services.
- Enhance error handling and logging.

Removed components:
- Legacy IPO receiver service implementation
- RMAX base service classes
- Obsolete chunk consumer interfaces

Added components:
- RivermaxQueueConfigs hierarchy
- TypedConfigBuilderHolder pattern
- MediaSenderService

Affected components:
- RivermaxMgr core implementation
- Burst management system
- Packet processing pipeline
- YAML configuration parsing
- Docker build infrastructure

Dependencies:
- Requires Rivermax SDK >=1.70.21

Signed-off-by: Rony Rado <[email protected]>
- Add hardware-accelerated video streaming with three memory modes:
 (GPU, host pinned, huge pages)
- Enable concurrent TX/RX operations with thread-safe buffer management
- Support multiple video formats:
  - YCbCr 4:2:2/4:4:4/4:2:0
  - RGB 8/10/12-bit
- Add Rivermax TX benchmarking tools for performance evaluation
- Update Rivermax SDK from 1.70.21 to 1.70.32

Key components:
- MediaSenderService with CUDA-accelerated frame processing
- BurstParams lifecycle management system
- YAML configuration support for:
  - Video resolution (HD/4K)
  - Frame rates (24-60 fps)
  - Traffic shaping parameters

Added configurations:
- TX-only scenario (adv_networking_bench_rivermax_tx.yaml)
- Combined TX+RX scenario (adv_networking_bench_rivermax_tx_rx.yaml)

Signed-off-by: Rony Rado <[email protected]>
- Add comprehensive tracing for TX burst lifecycle:
- Implement context-aware error reporting:
- Improve thread synchronization:
  - Add mutex guards for burst parameter access
  - Remove redundant lock from availability check
  - Implement RAII-style resource cleanup
- Strengthen packet validation:
  - Add auto-truncation for oversized chunks
  - Verify header-data split configuration
- Optimize configuration parameters:
  - Increase max_path_diff_us from 100μs → 10ms
  - Set sleep_between_operations_us to 0 for low latency
  - Update CPU core assignments in YAML examples
- Fix critical issues:
  - Memory leak in TX buffer release path
  - Shutdown sequence race conditions
  - Header-data split flag propagation
- Update Readme

Key components modified:
- MediaSenderService burst handling
- RivermaxManager shutdown sequence
- ANO benchmark TX operator
- Example configurations (TX/RX scenarios)

Signed-off-by: Rony Rado <[email protected]>
- Add burst_flags to burst header.
  Each manager would be able to set it's own flags for controlling flows/logic

Signed-off-by: Rony Rado <[email protected]>
- Add Media Sender service with Zero Copy support
- Service doesn't own frames memory pool and forwards received
  frames to the RDK Media Sender service

Signed-off-by: Rony Rado <[email protected]>
- Add yaml option "num_of_packets_in_chunk" .

Signed-off-by: Rony Rado <[email protected]>
Update apps installation command

Signed-off-by: Rony Rado <[email protected]>
This commit introduces basic testing for Rivermax manager
- New pytest test case for Rivermax TX/RX validation (with both receiver
  applications - ipo_receiver and rtp_receiver)
- Rivermax applications uses the NIC IP address, therefore this commit
  enhance the network interface utilities with IP address detection.

Note: Validation currently relies on receiver-side metrics only. Future
enhancement will include sender-side packet comparison once
Rivermax-dev-kit provides sender logging capabilities.

Signed-off-by: Dana Lessner <[email protected]>
- Introduced Python network initialization function `adv_net_init` to handle Holoscan config objects.
- Updated various functions for burst creation, packet management, and network interface operations.

Signed-off-by: Rony Rado <[email protected]>
- Add AdvNetworkMediaRxOp for receiving media streams over Rivermax
  - Supports packet-to-frame conversion with ANO Burst processing
  - Configurable video formats, bit depths, and frame dimensions
  - Output as VideoBuffer or Tensor entities

- Add AdvNetworkMediaTxOp for transmitting media streams over Rivermax
  - Processes VideoBuffer/Tensor inputs for network transmission
  - Configurable network interface and queue management
  - Support for various video formats

Features:
  - SMPTE 2110 compliance for professional media over IP
  - GPU acceleration and GPUDirect support
  - Low latency optimizations
  - Python bindings for both operators

These operators build upon the Advanced Network library to provide
specialized functionality for broadcast and media streaming
use cases requiring strict timing and high throughput performance.

Signed-off-by: Rony Rado <[email protected]>
- Add high-performance media streaming application built on Advanced Network Media Tx operator
  - Utilizes AdvNetworkMediaTxOp for media transmission over Rivermax
  - Integrates with Advanced Network Manager for optimized network resource management
  - SMPTE 2110 compliant for professional broadcast applications
  - Real-time transmission of media files with precise timing control

- Support multiple video formats and resolutions
  - RGB888, YUV420, NV12 and other common video formats
  - Configurable bit depths (8, 10, 12, 16-bit)
  - Multiple resolution support up to 4K and beyond
  - GPU acceleration with GPUDirect for zero-copy operations

* Implement dual language support
  - C++ implementation for maximum performance
  - Python implementation for ease of use and development

* Support professional broadcast features
  - Frame-accurate timing for live streaming applications
  - Looping playback for continuous streaming
  - VideoStreamReplayer integration for file-based sources

Pipeline: VideoStreamReplayer → AdvNetworkMediaTxOp → Advanced Network Manager → Network Interface

This application demonstrates how to use the Advanced Network Media operators
for professional-grade media transmission in broadcast and media production
environments requiring ultra-low latency and high throughput performance.

Signed-off-by: Rony Rado <[email protected]>
- Add high-performance media receiving application built on Advanced Network Media Rx operator
  - Utilizes AdvNetworkMediaRxOp for professional media reception over Rivermax
  - Integrates with Advanced Network Manager for optimized network resource management
  - SMPTE 2110 compliant for professional broadcast applications
  - Real-time reception and processing of media streams with ultra-low latency

- Support flexible output modes and format handling
  - Real-time visualization using HolovizOp for live monitoring
  - File output capability for recording and analysis
  - Format conversion support for optimal display

- Support multiple video formats and resolutions
  - RGB888, YUV420, NV12, RGBA and other common video formats
  - Configurable bit depths (8, 10, 12, 16-bit)
  - Multiple resolution support up to 4K and beyond
  - GPU acceleration with GPUDirect for zero-copy operations

- Implement dual language support
  - C++ implementation for maximum performance
  - Python implementation for ease of use and development

Pipeline: Network Interface → Advanced Network Manager → AdvNetworkMediaRxOp → [FormatConverter] → HolovizOp/FramesWriter

This application demonstrates how to use the Advanced Network Media operators
for professional-grade media reception in broadcast and media production
environments requiring ultra-low latency and high throughput performance.

Signed-off-by: Rony Rado <[email protected]>
@danal97 danal97 force-pushed the october branch 5 times, most recently from f580e1c to df42744 Compare September 17, 2025 05:18
@danal97 danal97 force-pushed the october branch 4 times, most recently from 5db2626 to 3c8f9f3 Compare October 12, 2025 14:54
@bhashemian
Copy link
Member

@danal97 could you please resolve the conflicts and update this PR with the latest changes in the main branch? Thanks

Enhanced the Rivermax manager to support multiple streams on the same
thread with stream-specific packet processing and queueing capabilities.

Key changes:
- Enhanced RDK applications (ipo_receiver and rtp_receiver) to get an
  extension to RDK AppSetting in order to set threads setting. Each
  thread has it's dedicated core, ID and streams settings.
- Enhanced burst manager to support per-stream ID burst queues. (Each
  stream ID gets its own dedicated burst queue for packet segregation).
- Maintained backward compatibility: bench RX processes bursts
  regardless of stream ID.

Signed-off-by: Dana Lessner <[email protected]>
Enhance the media player application to receive and process multiple
video streams simultaneously using the advanced networking with Rivermax
manager.
This application served as a reference implementation for multi-stream
media reception scenarios in advanced networking deployment.

Key changes:
- Receive multiple streams with Rivermax manager.
- Save each stream to different file.
- Add MockReceiverOp to simulate data reception for testing

Note: The application supports visualization using holoviz - this is
currently limited and allowed only when receiving a single stream.

Signed-off-by: Dana Lessner <[email protected]>
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Oct 26, 2025

Skipped: This PR changes more files than the configured file change limit: (100)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants