librist-rust

Crates.iolibrist-rust
lib.rslibrist-rust
version0.6.3
sourcesrc
created_at2020-06-25 17:16:47.555989
updated_at2022-03-07 10:32:50.390986
descriptionRust wapper for librist
homepage
repositoryhttps://code.videolan.org/rist/librist-rust
max_upload_size
id257946
size26,820
David Holroyd (dholroyd)

documentation

README

librist-rust

crates.io version Documentation

Rust wapper for librist, allowing you to use the RIST protocol within Rust applications.

Feature support

This wrapper is in very early stages and currently does not support a number of librist features:

  • Sending - not supported
  • Receiving - basic support
  • Custom authentication hooks - not supported
  • Out-of-band data - not supported
  • librist logging configuration supported
  • stats reporting - not supported
  • data callback - not supported
  • NAK control - not supported

Example

Receive and hex-dump RIST packets,

use librist_rust::{LoggingSettings, LogLevel, ReceiverContext, Profile, PeerConfig, RistError, DataReadResponse};
use std::io::stderr;

fn main() {
   let url = std::env::args().skip(1).next()
       .expect("Please supply one URL argument");
   let peer_config = PeerConfig::parse_address(&url)
       .expect(&format!("Unable to parse {:?}",url));
   let logging_settings = LoggingSettings::file(LogLevel::Info, stderr())
       .expect("LoggingSettings::file() failed");
   let mut ctx = ReceiverContext::create(Profile::Main, logging_settings)
       .expect("Context::receiver_create failed");

   ctx.peer_create(peer_config)
       .expect("peer_create() failed");

   // Have to call these or the connection with the librist 'ristsender' tool will not be
   // established
   ctx.auth_handler_set().expect("auth_handler_set() failed");
   ctx.oob_callback_set().expect("oob_callback_set() failed");

   ctx.start();
   loop {
       match ctx.data_read(std::time::Duration::from_secs(1)) {
           Ok(DataReadResponse::NoData) => {
               println!("No data received within timeout window")
           },
           Ok(DataReadResponse::Data { block, queue_size }) => {
               println!("Got a data block; queue now at {} items", queue_size);
               hexdump::hexdump(block.payload())
           },
           Err(e) => {
               println!("data_read() failed {:?}", e);
               return;
           },
       }
   }
}

The above example is in this project, so from a checked-out copy you can run the following to dump payloads of RIST packets sent to port 12344 on localhost,

cargo run --release --example receiver rist://@127.0.0.1:12344
Commit count: 0

cargo fmt