release 0.1
This commit is contained in:
parent
e347a9b324
commit
30a643e237
3 changed files with 58 additions and 2 deletions
12
Cargo.toml
12
Cargo.toml
|
@ -1,9 +1,19 @@
|
||||||
[package]
|
[package]
|
||||||
name = "iced_video_player"
|
name = "iced_video_player"
|
||||||
|
description = "A convenient video player widget for Iced"
|
||||||
|
homepage = "https://github.com/jazzfool/iced_video_player"
|
||||||
|
repository = "https://github.com/jazzfool/iced_video_player"
|
||||||
|
readme = "README.md"
|
||||||
|
keywords = ["gui", "iced", "video"]
|
||||||
|
categories = ["gui", "multimedia"]
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
authors = ["jazzfool"]
|
authors = ["jazzfool"]
|
||||||
edition = "2018"
|
edition = "2021"
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
exclude = [
|
||||||
|
".media/test.mp4"
|
||||||
|
]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
iced = { version = "0.12", features = ["image", "advanced", "wgpu"] }
|
iced = { version = "0.12", features = ["image", "advanced", "wgpu"] }
|
||||||
|
|
43
src/lib.rs
43
src/lib.rs
|
@ -1,3 +1,46 @@
|
||||||
|
//! # Iced Video Player
|
||||||
|
//!
|
||||||
|
//! A convenient video player widget for Iced.
|
||||||
|
//!
|
||||||
|
//! To get started, load a video from a URI (e.g., a file path prefixed with `file:///`) using [`Video::new`](crate::Video::new),
|
||||||
|
//! then use it like any other Iced widget in your `view` function by creating a [`VideoPlayer`].
|
||||||
|
//!
|
||||||
|
//! Example:
|
||||||
|
//! ```rust
|
||||||
|
//! use iced_video_player::{Video, VideoPlayer};
|
||||||
|
//! use iced::{Sandbox, Element};
|
||||||
|
//!
|
||||||
|
//! fn main() {
|
||||||
|
//! App::run(Default::default());
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! struct App {
|
||||||
|
//! video: Video,
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! impl Sandbox for App {
|
||||||
|
//! type Message = ();
|
||||||
|
//!
|
||||||
|
//! fn new() -> Self {
|
||||||
|
//! App {
|
||||||
|
//! video: Video::new(&url::Url::parse("file:///C:/my_video.mp4").unwrap()).unwrap(),
|
||||||
|
//! }
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! fn title(&self) -> String {
|
||||||
|
//! String::from("Video Player")
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! fn update(&mut self, _message: ()) {}
|
||||||
|
//!
|
||||||
|
//! fn view(&mut self) -> Element<()> {
|
||||||
|
//! VideoPlayer::new(&self.video).into()
|
||||||
|
//! }
|
||||||
|
//! }
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//! You can programmatically control the video (e.g., seek, pause, loop, grab thumbnails) by accessing various methods on [`Video`].
|
||||||
|
|
||||||
mod pipeline;
|
mod pipeline;
|
||||||
mod video;
|
mod video;
|
||||||
mod video_player;
|
mod video_player;
|
||||||
|
|
|
@ -8,7 +8,7 @@ use iced_wgpu::primitive::pipeline::Renderer as PrimitiveRenderer;
|
||||||
use std::{marker::PhantomData, sync::atomic::Ordering};
|
use std::{marker::PhantomData, sync::atomic::Ordering};
|
||||||
use std::{sync::Arc, time::Duration};
|
use std::{sync::Arc, time::Duration};
|
||||||
|
|
||||||
/// Video player which displays the current frame of a [`Video`](crate::Video).
|
/// Video player widget which displays the current frame of a [`Video`](crate::Video).
|
||||||
pub struct VideoPlayer<'a, Message, Theme = iced::Theme, Renderer = iced::Renderer>
|
pub struct VideoPlayer<'a, Message, Theme = iced::Theme, Renderer = iced::Renderer>
|
||||||
where
|
where
|
||||||
Renderer: PrimitiveRenderer,
|
Renderer: PrimitiveRenderer,
|
||||||
|
@ -23,6 +23,7 @@ impl<'a, Message, Theme, Renderer> VideoPlayer<'a, Message, Theme, Renderer>
|
||||||
where
|
where
|
||||||
Renderer: PrimitiveRenderer,
|
Renderer: PrimitiveRenderer,
|
||||||
{
|
{
|
||||||
|
/// Creates a new video player widget for a given video.
|
||||||
pub fn new(video: &'a Video) -> Self {
|
pub fn new(video: &'a Video) -> Self {
|
||||||
VideoPlayer {
|
VideoPlayer {
|
||||||
video,
|
video,
|
||||||
|
@ -32,6 +33,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Message to send when the video reaches the end of stream (i.e., the video ends).
|
||||||
pub fn on_end_of_stream(self, on_end_of_stream: Message) -> Self {
|
pub fn on_end_of_stream(self, on_end_of_stream: Message) -> Self {
|
||||||
VideoPlayer {
|
VideoPlayer {
|
||||||
on_end_of_stream: Some(on_end_of_stream),
|
on_end_of_stream: Some(on_end_of_stream),
|
||||||
|
@ -39,6 +41,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Message to send when the video receives a new frame.
|
||||||
pub fn on_new_frame(self, on_new_frame: Message) -> Self {
|
pub fn on_new_frame(self, on_new_frame: Message) -> Self {
|
||||||
VideoPlayer {
|
VideoPlayer {
|
||||||
on_new_frame: Some(on_new_frame),
|
on_new_frame: Some(on_new_frame),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue