#![allow(clippy::unnecessary_wraps)]
#[cfg(not(feature = "macos_15_0"))]
fn main() {
eprintln!("This example requires the 'macos_15_0' feature flag.");
eprintln!("Run with: cargo run --example 10_recording_output --features macos_15_0");
}
#[cfg(feature = "macos_15_0")]
fn main() -> Result<(), Box<dyn std::error::Error>> {
use screencapturekit::recording_output::{
SCRecordingOutput, SCRecordingOutputCodec, SCRecordingOutputConfiguration,
SCRecordingOutputFileType,
};
use std::path::PathBuf;
println!("=== Recording Output Example (macOS 15.0+) ===\n");
let output_path = PathBuf::from("/tmp/screen_recording.mp4");
let config = SCRecordingOutputConfiguration::new()
.with_output_url(&output_path)
.with_video_codec(SCRecordingOutputCodec::H264)
.with_output_file_type(SCRecordingOutputFileType::MP4);
println!("📁 Output path: {}", output_path.display());
println!("🎬 Video codec: {:?}", config.video_codec());
println!("📄 File type: {:?}", config.output_file_type());
println!("\n📋 Available Options:");
println!(
" Video codecs available: {}",
config.available_video_codecs_count()
);
println!(
" File types available: {}",
config.available_output_file_types_count()
);
println!("\n🎬 Supported Codecs:");
for codec in config.available_video_codecs() {
println!(" - {codec} ({})", codec.identifier());
}
println!("\n📄 Supported File Types:");
for file_type in config.available_output_file_types() {
println!(" - {file_type} ({})", file_type.identifier());
}
println!("\n🎥 Creating recording output...");
if let Some(recording_output) = SCRecordingOutput::new(&config) {
println!(" ✅ Recording output created successfully!");
let duration = recording_output.recorded_duration();
let file_size = recording_output.recorded_file_size();
println!("\n📊 Recording Stats:");
println!(
" Duration: {}/{} seconds",
duration.value, duration.timescale
);
println!(" File size: {file_size} bytes");
let _cloned = recording_output;
println!("\n 📋 Clone test: passed");
} else {
println!(" ⚠️ Recording output creation failed.");
println!(" This may happen if macOS 15.0+ is not available.");
}
let config_clone = config;
println!("\n📋 Configuration Debug:");
println!(" {config_clone:?}");
println!("\n🔄 Testing HEVC + MOV configuration...");
let hevc_config = SCRecordingOutputConfiguration::new()
.with_video_codec(SCRecordingOutputCodec::HEVC)
.with_output_file_type(SCRecordingOutputFileType::MOV);
println!(" Codec: {:?}", hevc_config.video_codec());
println!(" File type: {:?}", hevc_config.output_file_type());
println!("\n✅ Recording output example completed!");
Ok(())
}