steep-balloon-41261
11/18/2023, 8:22 AMdry-farmer-50272
11/18/2023, 8:23 AMconst FB_WIDTH: usize = 640;
const FB_HEIGHT: usize = 360;
const PIXEL_SIZE: usize = 4;
#[derive(Clone)]
struct FrameData {
framebuffer: Arc<Mutex<Vec<u8>>>,
video_frame: Arc<Mutex<VideoFrame<I420Buffer>>>,
}
let source = NativeVideoSource::new(VideoResolution {
width: FB_WIDTH as u32,
height: FB_HEIGHT as u32,
});
let track = LocalVideoTrack::create_video_track("file", RtcVideoSource::Native(source.clone()));
room.local_participant().publish_track(LocalTrack::Video(track), TrackPublishOptions {
source: TrackSource::Camera,
..Default::default()
}).await.unwrap();
tokio::spawn(async move {
let file = File::open("test.h264").unwrap();
let reader = BufReader::new(file);
let mut h264 = H264Reader::new(reader, 1_048_576);
let mut ticker = tokio::time::interval(Duration::from_millis(33));
let mut data = FrameData {
framebuffer: Arc::new(Mutex::new(vec![0u8; FB_WIDTH * FB_HEIGHT * 4])),
video_frame: Arc::new(Mutex::new(VideoFrame {
rotation: VideoRotation::VideoRotation0,
buffer: I420Buffer::new(FB_WIDTH as u32, FB_HEIGHT as u32),
timestamp_us: 0,
})),
};
loop {
let nal = match h264.next_nal() {
Ok(nal) => nal,
Err(err) => {
println!("All video frames parsed and sent: {err}");
break;
}
};
let data1 = nal.data.freeze();
println!("{}", data1.len());
let mut framebuffer = data.framebuffer.lock().await;
let mut video_frame = data.video_frame.lock().await;
let i420_buffer = &mut video_frame.buffer;
let (stride_y, stride_u, stride_v) = i420_buffer.strides();
let (data_y, data_u, data_v) = i420_buffer.data_mut();
*framebuffer = data1.to_vec();
println!("{}", framebuffer.len());
println!("{}", (FB_WIDTH * PIXEL_SIZE) * FB_HEIGHT);
yuv_helper::abgr_to_i420(
&framebuffer,
(FB_WIDTH * PIXEL_SIZE) as u32,
data_y,
stride_y,
data_u,
stride_u,
data_v,
stride_v,
FB_WIDTH as i32,
FB_HEIGHT as i32,
).expect("panic");
source.capture_frame(&*video_frame);
let _ = ticker.tick().await;
}
Result::<(), ()>::Ok(())
}).await.unwrap().unwrap();
enough-zebra-80131
11/18/2023, 8:36 AMenough-zebra-80131
11/18/2023, 8:37 AMenough-zebra-80131
11/18/2023, 8:37 AMvideo_frame
you are getting should be a decoded frameenough-zebra-80131
11/18/2023, 8:38 AMenough-zebra-80131
11/18/2023, 8:39 AMdry-farmer-50272
11/18/2023, 8:39 AMdry-farmer-50272
11/18/2023, 8:39 AMdry-farmer-50272
11/18/2023, 8:40 AMenough-zebra-80131
11/18/2023, 8:40 AMdry-farmer-50272
11/18/2023, 8:40 AMdry-farmer-50272
11/18/2023, 8:41 AMenough-zebra-80131
11/18/2023, 8:41 AMdry-farmer-50272
11/18/2023, 8:42 AMenough-zebra-80131
11/18/2023, 8:42 AMdry-farmer-50272
11/18/2023, 8:43 AMenough-zebra-80131
11/18/2023, 8:43 AMenough-zebra-80131
11/18/2023, 8:43 AMenough-zebra-80131
11/18/2023, 8:43 AMexport RUST_LOG=libwebrtc=debug
dry-farmer-50272
11/18/2023, 8:44 AMenough-zebra-80131
11/18/2023, 8:46 AMenough-zebra-80131
11/18/2023, 8:46 AMdry-farmer-50272
11/18/2023, 8:47 AMdry-farmer-50272
11/18/2023, 8:47 AMenough-zebra-80131
11/18/2023, 8:47 AMdry-farmer-50272
11/18/2023, 8:48 AMdst isn't large enough
errordry-farmer-50272
11/18/2023, 8:48 AMdry-farmer-50272
11/18/2023, 8:49 AMenough-zebra-80131
11/18/2023, 8:49 AMenough-zebra-80131
11/18/2023, 8:49 AMenough-zebra-80131
11/18/2023, 8:50 AMso now I should found some raw video data to ensure that video send and receive to livekit are working correctlyah yep!
dry-farmer-50272
11/18/2023, 8:51 AMenough-zebra-80131
11/18/2023, 8:52 AMenough-zebra-80131
11/18/2023, 8:52 AMenough-zebra-80131
11/18/2023, 8:53 AMabgr_to_i420
enough-zebra-80131
11/18/2023, 8:53 AMenough-zebra-80131
11/18/2023, 8:54 AMenough-zebra-80131
11/18/2023, 8:54 AMdry-farmer-50272
11/18/2023, 8:56 AMdry-farmer-50272
11/18/2023, 8:58 AMenough-zebra-80131
11/18/2023, 8:59 AMenough-zebra-80131
11/18/2023, 9:03 AMenough-zebra-80131
11/18/2023, 9:03 AMdry-farmer-50272
11/18/2023, 9:05 AMdry-farmer-50272
11/18/2023, 9:06 AMenough-zebra-80131
11/18/2023, 9:10 AMdry-farmer-50272
11/18/2023, 9:14 AMenough-zebra-80131
11/18/2023, 9:17 AMenough-zebra-80131
11/18/2023, 9:17 AMdry-farmer-50272
11/18/2023, 9:18 AMexport RUST_LOG=libwebrtc=debug
enough-zebra-80131
11/18/2023, 9:18 AMdry-farmer-50272
11/18/2023, 9:18 AMdry-farmer-50272
11/18/2023, 9:18 AMenough-zebra-80131
11/18/2023, 9:19 AMdry-farmer-50272
11/18/2023, 9:19 AMRUST_LOG=libwebrtc=debug cargo run
RUST_LOG=debug cargo run
enough-zebra-80131
11/18/2023, 9:21 AMenough-zebra-80131
11/18/2023, 9:22 AMenv_logger::init();
or equivalent)dry-farmer-50272
11/18/2023, 9:23 AMenough-zebra-80131
11/18/2023, 9:24 AMdry-farmer-50272
11/18/2023, 9:27 AMenough-zebra-80131
11/18/2023, 9:46 AMenough-zebra-80131
11/18/2023, 9:47 AMenough-zebra-80131
11/18/2023, 9:47 AMdry-farmer-50272
11/18/2023, 9:47 AMdry-farmer-50272
11/18/2023, 9:48 AMenough-zebra-80131
11/18/2023, 9:51 AMenough-zebra-80131
11/18/2023, 9:52 AMdry-farmer-50272
11/18/2023, 9:52 AMenough-zebra-80131
11/18/2023, 9:53 AMenough-zebra-80131
11/18/2023, 9:53 AMenough-zebra-80131
11/18/2023, 9:54 AMexport LK_CUSTOM_WEBRTC=<path_to_repo>/webrtc-sys/libwebrtc/
enough-zebra-80131
11/18/2023, 9:55 AMdry-farmer-50272
11/18/2023, 9:55 AMenough-zebra-80131
11/18/2023, 9:55 AMenough-zebra-80131
11/18/2023, 9:55 AMenough-zebra-80131
11/18/2023, 9:55 AMdry-farmer-50272
11/18/2023, 9:55 AMenough-zebra-80131
11/18/2023, 9:56 AMdry-farmer-50272
11/18/2023, 9:56 AMenough-zebra-80131
11/18/2023, 9:57 AMdry-farmer-50272
11/18/2023, 10:03 AMdry-farmer-50272
11/18/2023, 10:03 AMlivekit = "*"
livekit-api = "*"
livekit-protocol = "*"
livekit-webrtc = "*"
and I ran cargo update command but still getting this error ...dry-farmer-50272
11/18/2023, 10:17 AMdry-farmer-50272
11/18/2023, 10:17 AM