flet-video


Nameflet-video JSON
Version 0.1.1 PyPI version JSON
download
home_pageNone
SummaryVideo control for Flet
upload_time2025-06-18 19:04:43
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Flet Video control

`Video` control for Flet.

## Usage

Add `flet-video` as dependency (`pyproject.toml` or `requirements.txt`) to your Flet project.

## Example

```py
import random

import flet as ft

import flet_video as ftv


def main(page: ft.Page):
    page.theme_mode = ft.ThemeMode.LIGHT
    page.title = "TheEthicalVideo"
    page.window.always_on_top = True
    page.spacing = 20
    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER

    def handle_pause(e):
        video.pause()
        print("Video.pause()")

    def handle_play_or_pause(e):
        video.play_or_pause()
        print("Video.play_or_pause()")

    def handle_play(e):
        video.play()
        print("Video.play()")

    def handle_stop(e):
        video.stop()
        print("Video.stop()")

    def handle_next(e):
        video.next()
        print("Video.next()")

    def handle_previous(e):
        video.previous()
        print("Video.previous()")

    def handle_volume_change(e):
        video.volume = e.control.value
        page.update()
        print(f"Video.volume = {e.control.value}")

    def handle_playback_rate_change(e):
        video.playback_rate = e.control.value
        page.update()
        print(f"Video.playback_rate = {e.control.value}")

    def handle_seek(e):
        video.seek(10000)
        print(f"Video.seek(10000)")

    def handle_add_media(e):
        video.playlist_add(random.choice(sample_media))
        print(f"Video.playlist_add(random.choice(sample_media))")

    def handle_remove_media(e):
        r = random.randint(0, len(video.playlist) - 1)
        video.playlist_remove(r)
        print(f"Popped Item at index: {r} (position {r+1})")

    def handle_jump(e):
        print(f"Video.jump_to(0)")
        video.jump_to(0)

    sample_media = [
        ftv.VideoMedia(
            "https://user-images.githubusercontent.com/28951144/229373720-14d69157-1a56-4a78-a2f4-d7a134d7c3e9.mp4"
        ),
        ftv.VideoMedia(
            "https://user-images.githubusercontent.com/28951144/229373718-86ce5e1d-d195-45d5-baa6-ef94041d0b90.mp4"
        ),
        ftv.VideoMedia(
            "https://user-images.githubusercontent.com/28951144/229373716-76da0a4e-225a-44e4-9ee7-3e9006dbc3e3.mp4"
        ),
        ftv.VideoMedia(
            "https://user-images.githubusercontent.com/28951144/229373695-22f88f13-d18f-4288-9bf1-c3e078d83722.mp4"
        ),
        ftv.VideoMedia(
            "https://user-images.githubusercontent.com/28951144/229373709-603a7a89-2105-4e1b-a5a5-a6c3567c9a59.mp4",
            extras={
                "artist": "Thousand Foot Krutch",
                "album": "The End Is Where We Begin",
            },
            http_headers={
                "Foo": "Bar",
                "Accept": "*/*",
            },
        ),
    ]

    page.add(
        video := ftv.Video(
            expand=True,
            playlist=sample_media[0:2],
            playlist_mode=ftv.PlaylistMode.LOOP,
            fill_color=ft.Colors.BLUE_400,
            aspect_ratio=16 / 9,
            volume=100,
            autoplay=False,
            filter_quality=ft.FilterQuality.HIGH,
            muted=False,
            on_loaded=lambda e: print("Video loaded successfully!"),
            on_enter_fullscreen=lambda e: print("Video entered fullscreen!"),
            on_exit_fullscreen=lambda e: print("Video exited fullscreen!"),
        ),
        ft.Row(
            wrap=True,
            alignment=ft.MainAxisAlignment.CENTER,
            controls=[
                ft.ElevatedButton("Play", on_click=handle_play),
                ft.ElevatedButton("Pause", on_click=handle_pause),
                ft.ElevatedButton("Play Or Pause", on_click=handle_play_or_pause),
                ft.ElevatedButton("Stop", on_click=handle_stop),
                ft.ElevatedButton("Next", on_click=handle_next),
                ft.ElevatedButton("Previous", on_click=handle_previous),
                ft.ElevatedButton("Seek s=10", on_click=handle_seek),
                ft.ElevatedButton("Jump to first Media", on_click=handle_jump),
                ft.ElevatedButton("Add Random Media", on_click=handle_add_media),
                ft.ElevatedButton("Remove Random Media", on_click=handle_remove_media),
            ],
        ),
        ft.Slider(
            min=0,
            value=100,
            max=100,
            label="Volume = {value}%",
            divisions=10,
            width=400,
            on_change=handle_volume_change,
        ),
        ft.Slider(
            min=1,
            value=1,
            max=3,
            label="PlaybackRate = {value}X",
            divisions=6,
            width=400,
            on_change=handle_playback_rate_change,
        ),
    )


ft.app(main)
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "flet-video",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "Flet contributors <hello@flet.dev>",
    "download_url": "https://files.pythonhosted.org/packages/d7/bb/52b9d0ed3fdbf062dd62a62c01d34656e39939d08c511a32f8a174819c05/flet_video-0.1.1.tar.gz",
    "platform": null,
    "description": "# Flet Video control\n\n`Video` control for Flet.\n\n## Usage\n\nAdd `flet-video` as dependency (`pyproject.toml` or `requirements.txt`) to your Flet project.\n\n## Example\n\n```py\nimport random\n\nimport flet as ft\n\nimport flet_video as ftv\n\n\ndef main(page: ft.Page):\n    page.theme_mode = ft.ThemeMode.LIGHT\n    page.title = \"TheEthicalVideo\"\n    page.window.always_on_top = True\n    page.spacing = 20\n    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER\n\n    def handle_pause(e):\n        video.pause()\n        print(\"Video.pause()\")\n\n    def handle_play_or_pause(e):\n        video.play_or_pause()\n        print(\"Video.play_or_pause()\")\n\n    def handle_play(e):\n        video.play()\n        print(\"Video.play()\")\n\n    def handle_stop(e):\n        video.stop()\n        print(\"Video.stop()\")\n\n    def handle_next(e):\n        video.next()\n        print(\"Video.next()\")\n\n    def handle_previous(e):\n        video.previous()\n        print(\"Video.previous()\")\n\n    def handle_volume_change(e):\n        video.volume = e.control.value\n        page.update()\n        print(f\"Video.volume = {e.control.value}\")\n\n    def handle_playback_rate_change(e):\n        video.playback_rate = e.control.value\n        page.update()\n        print(f\"Video.playback_rate = {e.control.value}\")\n\n    def handle_seek(e):\n        video.seek(10000)\n        print(f\"Video.seek(10000)\")\n\n    def handle_add_media(e):\n        video.playlist_add(random.choice(sample_media))\n        print(f\"Video.playlist_add(random.choice(sample_media))\")\n\n    def handle_remove_media(e):\n        r = random.randint(0, len(video.playlist) - 1)\n        video.playlist_remove(r)\n        print(f\"Popped Item at index: {r} (position {r+1})\")\n\n    def handle_jump(e):\n        print(f\"Video.jump_to(0)\")\n        video.jump_to(0)\n\n    sample_media = [\n        ftv.VideoMedia(\n            \"https://user-images.githubusercontent.com/28951144/229373720-14d69157-1a56-4a78-a2f4-d7a134d7c3e9.mp4\"\n        ),\n        ftv.VideoMedia(\n            \"https://user-images.githubusercontent.com/28951144/229373718-86ce5e1d-d195-45d5-baa6-ef94041d0b90.mp4\"\n        ),\n        ftv.VideoMedia(\n            \"https://user-images.githubusercontent.com/28951144/229373716-76da0a4e-225a-44e4-9ee7-3e9006dbc3e3.mp4\"\n        ),\n        ftv.VideoMedia(\n            \"https://user-images.githubusercontent.com/28951144/229373695-22f88f13-d18f-4288-9bf1-c3e078d83722.mp4\"\n        ),\n        ftv.VideoMedia(\n            \"https://user-images.githubusercontent.com/28951144/229373709-603a7a89-2105-4e1b-a5a5-a6c3567c9a59.mp4\",\n            extras={\n                \"artist\": \"Thousand Foot Krutch\",\n                \"album\": \"The End Is Where We Begin\",\n            },\n            http_headers={\n                \"Foo\": \"Bar\",\n                \"Accept\": \"*/*\",\n            },\n        ),\n    ]\n\n    page.add(\n        video := ftv.Video(\n            expand=True,\n            playlist=sample_media[0:2],\n            playlist_mode=ftv.PlaylistMode.LOOP,\n            fill_color=ft.Colors.BLUE_400,\n            aspect_ratio=16 / 9,\n            volume=100,\n            autoplay=False,\n            filter_quality=ft.FilterQuality.HIGH,\n            muted=False,\n            on_loaded=lambda e: print(\"Video loaded successfully!\"),\n            on_enter_fullscreen=lambda e: print(\"Video entered fullscreen!\"),\n            on_exit_fullscreen=lambda e: print(\"Video exited fullscreen!\"),\n        ),\n        ft.Row(\n            wrap=True,\n            alignment=ft.MainAxisAlignment.CENTER,\n            controls=[\n                ft.ElevatedButton(\"Play\", on_click=handle_play),\n                ft.ElevatedButton(\"Pause\", on_click=handle_pause),\n                ft.ElevatedButton(\"Play Or Pause\", on_click=handle_play_or_pause),\n                ft.ElevatedButton(\"Stop\", on_click=handle_stop),\n                ft.ElevatedButton(\"Next\", on_click=handle_next),\n                ft.ElevatedButton(\"Previous\", on_click=handle_previous),\n                ft.ElevatedButton(\"Seek s=10\", on_click=handle_seek),\n                ft.ElevatedButton(\"Jump to first Media\", on_click=handle_jump),\n                ft.ElevatedButton(\"Add Random Media\", on_click=handle_add_media),\n                ft.ElevatedButton(\"Remove Random Media\", on_click=handle_remove_media),\n            ],\n        ),\n        ft.Slider(\n            min=0,\n            value=100,\n            max=100,\n            label=\"Volume = {value}%\",\n            divisions=10,\n            width=400,\n            on_change=handle_volume_change,\n        ),\n        ft.Slider(\n            min=1,\n            value=1,\n            max=3,\n            label=\"PlaybackRate = {value}X\",\n            divisions=6,\n            width=400,\n            on_change=handle_playback_rate_change,\n        ),\n    )\n\n\nft.app(main)\n```\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Video control for Flet",
    "version": "0.1.1",
    "project_urls": {
        "Documentation": "https://flet.dev/docs/controls/video",
        "Homepage": "https://flet.dev",
        "Issues": "https://github.com/flet-dev/flet-video/issues",
        "Repository": "https://github.com/flet-dev/flet-video"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0948daf6fbe8dd49ebf89687a3a8151bbf7bfa7fa2aa24ac3de10b2d743da380",
                "md5": "4fab3552f31c9be6402f2cb0e4b5ad28",
                "sha256": "068283f79248bc702e9633d1c145d7888a5486c6448eb62f493b0a62f9d7e5e8"
            },
            "downloads": -1,
            "filename": "flet_video-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4fab3552f31c9be6402f2cb0e4b5ad28",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 23440,
            "upload_time": "2025-06-18T19:04:42",
            "upload_time_iso_8601": "2025-06-18T19:04:42.185799Z",
            "url": "https://files.pythonhosted.org/packages/09/48/daf6fbe8dd49ebf89687a3a8151bbf7bfa7fa2aa24ac3de10b2d743da380/flet_video-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d7bb52b9d0ed3fdbf062dd62a62c01d34656e39939d08c511a32f8a174819c05",
                "md5": "fcafaae9703baa1e4581a1bd54622baa",
                "sha256": "49bfc9a4eec97f7301cb25666e5973025f7eb3cd82252d14b7f1477b275f9b74"
            },
            "downloads": -1,
            "filename": "flet_video-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "fcafaae9703baa1e4581a1bd54622baa",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 23399,
            "upload_time": "2025-06-18T19:04:43",
            "upload_time_iso_8601": "2025-06-18T19:04:43.301396Z",
            "url": "https://files.pythonhosted.org/packages/d7/bb/52b9d0ed3fdbf062dd62a62c01d34656e39939d08c511a32f8a174819c05/flet_video-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-06-18 19:04:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "flet-dev",
    "github_project": "flet-video",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "appveyor": true,
    "lcname": "flet-video"
}
        
Elapsed time: 0.49997s