pub struct VideoEncoder { /* private fields */ }展开描述
对视频帧(以及可选的音频)进行编码,并将其写入文件或流。
帧以 Direct3D 表面或原始 BGRA 缓冲区的形式提供。音频可以以交错 PCM 字节推入。
- Use
VideoEncoder::newfor file output orVideoEncoder::new_from_streamfor stream output. - 使用
VideoEncoder::send_frame或VideoEncoder::send_frame_buffer推送视频帧。 - 可选择使用
VideoEncoder::send_audio_buffer推送音频,或使用VideoEncoder::send_frame_with_audio。 - Call
VideoEncoder::finishto finalize the container.
§Example
use windows_capture::encoder::{
AudioSettingsBuilder, ContainerSettingsBuilder, VideoEncoder, VideoSettingsBuilder,
};
// 创建一个在 MP4 容器中输出 H.265 的编码器
let mut encoder = VideoEncoder::new(
VideoSettingsBuilder::new(1920, 1080),
AudioSettingsBuilder::new().disabled(true),
ContainerSettingsBuilder::new(),
"capture.mp4",
)
.unwrap();
// 在你的捕获循环中,推送视频帧:
// encoder.send_frame(&frame).unwrap();
// 完成后:
// encoder.finish().unwrap();Implementations§
源代码§impl VideoEncoder
impl VideoEncoder
源代码pub fn new<P: AsRef<Path>>(
video_settings: VideoSettingsBuilder,
audio_settings: AudioSettingsBuilder,
container_settings: ContainerSettingsBuilder,
path: P,
) -> Result<Self, VideoEncoderError>
pub fn new<P: AsRef<Path>>( video_settings: VideoSettingsBuilder, audio_settings: AudioSettingsBuilder, container_settings: ContainerSettingsBuilder, path: P, ) -> Result<Self, VideoEncoderError>
构造一个新的 VideoEncoder,将数据写入文件路径。
源代码pub fn new_from_stream(
video_settings: VideoSettingsBuilder,
audio_settings: AudioSettingsBuilder,
container_settings: ContainerSettingsBuilder,
stream: IRandomAccessStream,
) -> Result<Self, VideoEncoderError>
pub fn new_from_stream( video_settings: VideoSettingsBuilder, audio_settings: AudioSettingsBuilder, container_settings: ContainerSettingsBuilder, stream: IRandomAccessStream, ) -> Result<Self, VideoEncoderError>
构造一个新的 VideoEncoder,将数据写入给定的流。
Unlike VideoEncoder::new, which writes directly to a file, this constructor writes
encoded output into any [IRandomAccessStream]. Use [InMemoryRandomAccessStream] to
keep the encoded video in memory (e.g., for network streaming or further processing).
§Example
use windows::Storage::Streams::InMemoryRandomAccessStream;
use windows::core::Interface;
use windows_capture::encoder::{
AudioSettingsBuilder, ContainerSettingsBuilder, VideoEncoder, VideoSettingsBuilder,
};
let stream = InMemoryRandomAccessStream::new().unwrap();
let encoder = VideoEncoder::new_from_stream(
VideoSettingsBuilder::new(1920, 1080),
AudioSettingsBuilder::new().disabled(true),
ContainerSettingsBuilder::new(),
stream.cast().unwrap(),
)
.unwrap();源代码pub fn send_frame(&mut self, frame: &Frame<'_>) -> Result<(), VideoEncoderError>
pub fn send_frame(&mut self, frame: &Frame<'_>) -> Result<(), VideoEncoderError>
发送一帧视频(DirectX)。立即返回。
源代码pub fn send_frame_with_audio(
&mut self,
frame: &mut Frame<'_>,
audio_buffer: &[u8],
) -> Result<(), VideoEncoderError>
pub fn send_frame_with_audio( &mut self, frame: &mut Frame<'_>, audio_buffer: &[u8], ) -> Result<(), VideoEncoderError>
发送一帧视频和一个音频缓冲区(拥有所有权)。立即返回。 音频时间戳由迄今为止发送的总样本数(单调递增)推导而来。
源代码pub fn send_frame_buffer(
&mut self,
buffer: &[u8],
timestamp: i64,
) -> Result<(), VideoEncoderError>
pub fn send_frame_buffer( &mut self, buffer: &[u8], timestamp: i64, ) -> Result<(), VideoEncoderError>
发送一帧原始缓冲区(内部拥有所有权)。立即返回。 对于此路径,Windows 期望 BGRA 以及自底向上的内存布局。
源代码pub fn send_audio_buffer(
&mut self,
buffer: &[u8],
_timestamp: i64,
) -> Result<(), VideoEncoderError>
pub fn send_audio_buffer( &mut self, buffer: &[u8], _timestamp: i64, ) -> Result<(), VideoEncoderError>
发送一个音频缓冲区(内部拥有所有权)。立即返回。 注意:所提供的时间戳会被忽略;我们使用单调递增的音频时钟。
源代码pub fn finish(self) -> Result<(), VideoEncoderError>
pub fn finish(self) -> Result<(), VideoEncoderError>
结束编码并执行任何必要的清理。
Trait 实现§
impl Send for VideoEncoder
自动 Trait 实现§
impl Freeze for VideoEncoder
impl !RefUnwindSafe for VideoEncoder
impl !Sync for VideoEncoder
impl Unpin for VideoEncoder
impl UnsafeUnpin for VideoEncoder
impl !UnwindSafe for VideoEncoder
通用实现§
源代码§impl<T> IntoEither for T
impl<T> IntoEither for T
源代码§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
将
self 转换为 Left 变体,如果 Either<Self, Self>
当 into_left is true.
Converts self into a Right 变体,如果 Either<Self, Self>
否则。 阅读更多源代码§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
将
self 转换为 Left 变体,如果 Either<Self, Self>
当 into_left(&self) returns true.
Converts self into a Right 变体,如果 Either<Self, Self>
否则。 阅读更多