Crates.io | libogg |
lib.rs | libogg |
version | 0.2.0 |
source | src |
created_at | 2024-02-02 09:10:48.132532 |
updated_at | 2024-02-02 09:10:48.132532 |
description | Safe bindings for libogg. |
homepage | |
repository | |
max_upload_size | |
id | 1124143 |
size | 25,945 |
Simple bindings for libogg.
In most cases it should be preferable to use the ogg crate.
However, their README states that the encoder is not well tested.
It does at the time of writing not offer some options (e.g. setting a stream id).
Still, you are probably better off using ogg
unless it's a very special case.
These bindings are not zero-copy! The functions producing a page don't return a reference as modeling their invalidation would make the API more complicated.
extern crate libogg;
use libogg::{Packet, Stream};
fn main() {
let mut stream = Stream::new(1234); // provide a unique stream id
// This loop puts data into the stream until a page is returned
loop {
match stream.pageout() {
Some(page) => {
// `page` holds a header and body, write them to a file
println!("header: {:?}/body {:?}", page.header, page.body);
break;
},
None => {
let mut vec = Vec::new();
for x in 0..255 {
vec.push(x);
}
// Push in new data
let mut pkt = Packet::new(&mut vec);
stream.packetin(&mut pkt)
}
}
}
}
This crate has some sporadic documentation, check out the libogg docs for details.