CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-python-vlc

VLC bindings for Python providing comprehensive multimedia functionality through LibVLC API.

Pending
Overview
Eval results
Files

data-structures.mddocs/

Data Structures and Enums

Complete type definitions, enumerations, and data structures used throughout the Python-VLC API. These structures provide the foundation for all VLC operations and state management.

Capabilities

Player State Enumeration

Core player state definitions for tracking playback status.

class State:
    """Media player state enumeration."""
    NothingSpecial = 0  # No media loaded
    Opening = 1         # Media is opening
    Buffering = 2       # Media is buffering
    Playing = 3         # Media is playing
    Paused = 4          # Media is paused
    Stopped = 5         # Media is stopped
    Ended = 6           # Media playback ended
    Error = 7           # Error occurred

Media Type Classification

Enumeration for different types of media sources.

class MediaType:
    """Media type enumeration."""
    Unknown = 0      # Unknown media type
    File = 1         # File-based media
    Directory = 2    # Directory (playlist)
    Disc = 3         # Physical disc (DVD, CD, etc.)
    Stream = 4       # Network stream
    Playlist = 5     # Playlist file

Metadata Type Definitions

Enumeration for media metadata types.

class Meta:
    """Media metadata type enumeration."""
    Title = 0           # Media title
    Artist = 1          # Artist name
    Genre = 2           # Genre
    Copyright = 3       # Copyright information
    Album = 4           # Album name
    TrackNumber = 5     # Track number
    Description = 6     # Description
    Rating = 7          # Rating
    Date = 8            # Release date
    Setting = 9         # Setting
    URL = 10            # URL
    Language = 11       # Language
    NowPlaying = 12     # Now playing
    Publisher = 13      # Publisher
    EncodedBy = 14      # Encoded by
    ArtworkURL = 15     # Artwork URL
    TrackID = 16        # Track ID
    TrackTotal = 17     # Total tracks
    Director = 18       # Director
    Season = 19         # Season number
    Episode = 20        # Episode number
    ShowName = 21       # Show name
    Actors = 22         # Actors
    AlbumArtist = 23    # Album artist
    DiscNumber = 24     # Disc number
    DiscTotal = 25      # Total discs

Audio Output Configuration

Enumerations for audio output settings and device types.

class AudioOutputChannel:
    """Audio output channel configuration."""
    Error = -1      # Error state
    Stereo = 1      # Stereo output
    RStereo = 2     # Reverse stereo
    Left = 3        # Left channel only
    Right = 4       # Right channel only
    Dolby = 5       # Dolby surround

class AudioOutputDeviceType:
    """Audio output device types."""
    Error = -1      # Error state
    Mono = 1        # Mono output
    Stereo = 2      # Stereo output
    _2F2R = 4       # 2 front, 2 rear
    _3F2R = 5       # 3 front, 2 rear
    _5_1 = 6        # 5.1 surround
    _6_1 = 7        # 6.1 surround
    _7_1 = 8        # 7.1 surround
    SPDIF = 10      # S/PDIF output

Video Adjustment Parameters

Enumerations for video filter and adjustment options.

class VideoAdjustOption:
    """Video adjustment options for filters."""
    Enable = 0          # Enable adjustment
    Contrast = 1        # Contrast level
    Brightness = 2      # Brightness level
    Hue = 3            # Hue adjustment
    Saturation = 4     # Saturation level
    Gamma = 5          # Gamma correction

class VideoLogoOption:
    """Video logo overlay options."""
    Enable = 0         # Enable logo
    File = 1           # Logo file path
    X = 2              # X position
    Y = 3              # Y position
    Delay = 4          # Display delay
    Repeat = 5         # Repeat count
    Opacity = 6        # Opacity level
    Position = 7       # Position mode
    Size = 8           # Logo size

class VideoMarqueeOption:
    """Video marquee text overlay options."""
    Enable = 0         # Enable marquee
    Text = 1           # Text content
    Color = 2          # Text color
    Opacity = 3        # Text opacity
    Position = 4       # Text position
    Refresh = 5        # Refresh rate
    Size = 6           # Text size
    Timeout = 7        # Display timeout
    X = 8              # X position
    Y = 9              # Y position

Track Type Classification

Enumeration for different types of media tracks.

class TrackType:
    """Media track type enumeration."""
    Unknown = -1       # Unknown track type
    Audio = 0          # Audio track
    Video = 1          # Video track
    Text = 2           # Subtitle/text track

Playback Mode Configuration

Enumeration for media list playback modes.

class PlaybackMode:
    """Media list playback modes."""
    Default = 0        # Play once through
    Loop = 1           # Loop entire list
    Repeat = 2         # Repeat current item

Media Discovery Categories

Enumeration for media discovery service categories.

class MediaDiscovererCategory:
    """Media discovery service categories."""
    Devices = 0        # Local devices
    Lan = 1            # LAN services
    Podcasts = 2       # Podcast services
    LocalDirs = 3      # Local directories

Media Parsing Configuration

Enumerations for media parsing options and status.

class MediaParseFlag:
    """Media parsing flags."""
    ParseLocal = 0x00         # Parse local media only
    ParseNetwork = 0x01       # Parse network media
    FetchLocal = 0x02         # Fetch local metadata
    FetchNetwork = 0x04       # Fetch network metadata
    DoInteract = 0x08         # Allow user interaction

class MediaParsedStatus:
    """Media parsing status enumeration."""
    Skipped = 1        # Parsing skipped
    Failed = 2         # Parsing failed
    Timeout = 3        # Parsing timed out
    Done = 4           # Parsing completed successfully

Event Type Definitions

Comprehensive event type enumeration for all VLC events.

class EventType:
    """VLC event type enumeration."""
    
    # Media Events (0x000 - 0x0FF)
    MediaMetaChanged = 0x000
    MediaSubItemAdded = 0x001
    MediaDurationChanged = 0x002
    MediaParsedChanged = 0x003
    MediaFreed = 0x004
    MediaStateChanged = 0x005
    MediaSubItemTreeAdded = 0x006
    MediaThumbnailGenerated = 0x007
    MediaAttachedThumbnailsFound = 0x008
    
    # Media Player Events (0x100 - 0x1FF)
    MediaPlayerMediaChanged = 0x100
    MediaPlayerNothingSpecial = 0x101
    MediaPlayerOpening = 0x102
    MediaPlayerBuffering = 0x103
    MediaPlayerPlaying = 0x104
    MediaPlayerPaused = 0x105
    MediaPlayerStopped = 0x106
    MediaPlayerForward = 0x107
    MediaPlayerBackward = 0x108
    MediaPlayerEndReached = 0x109
    MediaPlayerEncounteredError = 0x10a
    MediaPlayerTimeChanged = 0x10b
    MediaPlayerPositionChanged = 0x10c
    MediaPlayerSeekableChanged = 0x10d
    MediaPlayerPausableChanged = 0x10e
    MediaPlayerTitleChanged = 0x10f
    MediaPlayerSnapshotTaken = 0x110
    MediaPlayerLengthChanged = 0x111
    MediaPlayerVout = 0x112
    MediaPlayerScrambledChanged = 0x113
    MediaPlayerESAdded = 0x114
    MediaPlayerESDeleted = 0x115
    MediaPlayerESSelected = 0x116
    MediaPlayerCorked = 0x117
    MediaPlayerUncorked = 0x118
    MediaPlayerMuted = 0x119
    MediaPlayerUnmuted = 0x11a
    MediaPlayerAudioVolume = 0x11b
    MediaPlayerAudioDevice = 0x11c
    MediaPlayerChapterChanged = 0x11d
    
    # Media List Events (0x200 - 0x2FF)
    MediaListItemAdded = 0x200
    MediaListWillAddItem = 0x201
    MediaListItemDeleted = 0x202
    MediaListWillDeleteItem = 0x203
    MediaListEndReached = 0x204
    
    # Media List Player Events (0x400 - 0x4FF)
    MediaListPlayerPlayed = 0x400
    MediaListPlayerNextItemSet = 0x401
    MediaListPlayerStopped = 0x402
    
    # Media Discoverer Events (0x500 - 0x5FF)
    MediaDiscovererStarted = 0x500
    MediaDiscovererEnded = 0x501
    
    # VLM Events (0x600 - 0x6FF)
    VlmMediaAdded = 0x600
    VlmMediaRemoved = 0x601
    VlmMediaChanged = 0x602
    VlmMediaInstanceStarted = 0x603
    VlmMediaInstanceStopped = 0x604
    VlmMediaInstanceStatusInit = 0x605
    VlmMediaInstanceStatusOpening = 0x606
    VlmMediaInstanceStatusPlaying = 0x607
    VlmMediaInstanceStatusPause = 0x608
    VlmMediaInstanceStatusEnd = 0x609
    VlmMediaInstanceStatusError = 0x60a
    
    # Renderer Discoverer Events (0x700 - 0x7FF)
    RendererDiscovererItemAdded = 0x700
    RendererDiscovererItemDeleted = 0x701

Logging Configuration

Enumeration for logging levels and log message types.

class LogLevel:
    """Logging level enumeration."""
    Debug = 0          # Debug messages
    Notice = 1         # Notice messages
    Warning = 2        # Warning messages
    Error = 3          # Error messages

Navigation and Control

Enumerations for navigation modes and teletext control.

class NavigateMode:
    """Navigation mode for DVD/Blu-ray."""
    Activate = 0       # Activate navigation
    Up = 1             # Navigate up
    Down = 2           # Navigate down
    Left = 3           # Navigate left
    Right = 4          # Navigate right
    Popup = 5          # Show popup menu

class TeletextKey:
    """Teletext key definitions."""
    Red = 0            # Red key
    Green = 1          # Green key
    Yellow = 2         # Yellow key
    Blue = 3           # Blue key
    Index = 4          # Index key

class Position:
    """Position constants."""
    Disable = -1       # Disable positioning
    Center = 0         # Center position
    Left = 1           # Left position
    Right = 2          # Right position
    Top = 4            # Top position
    TopLeft = 5        # Top-left position
    TopRight = 6       # Top-right position
    Bottom = 8         # Bottom position
    BottomLeft = 9     # Bottom-left position
    BottomRight = 10   # Bottom-right position

Media Slave Configuration

Enumeration for media slave types (subtitles, audio tracks).

class MediaSlaveType:
    """Media slave type enumeration."""
    Subtitle = 0       # Subtitle slave
    Audio = 1          # Audio slave

Dialog System

Enumeration for dialog question types in user interactions.

class DialogQuestionType:
    """Dialog question type enumeration."""
    Normal = 0         # Normal question
    Warning = 1        # Warning dialog
    Critical = 2       # Critical dialog

Media Player Role

Enumeration for media player roles in system integration.

class MediaPlayerRole:
    """Media player role enumeration."""
    None_ = 0          # No specific role
    Music = 1          # Music player role
    Video = 2          # Video player role
    Communication = 3  # Communication role
    Game = 4           # Game role
    Notification = 5   # Notification role
    Animation = 6      # Animation role
    Production = 7     # Production role
    Accessibility = 8  # Accessibility role
    Test = 9           # Test role

Data Structure Classes

Core data structure classes used for complex data handling.

class Event:
    """Event data structure."""
    def __init__(self):
        self.type = 0              # Event type
        self.obj = None            # Event object
        self.u = None              # Union of event-specific data

class MediaStats:
    """Media statistics structure."""
    def __init__(self):
        self.read_bytes = 0        # Bytes read
        self.input_bitrate = 0.0   # Input bitrate
        self.demux_read_bytes = 0  # Demux bytes read
        self.demux_bitrate = 0.0   # Demux bitrate
        self.demux_corrupted = 0   # Corrupted packets
        self.demux_discontinuity = 0  # Discontinuities
        self.decoded_video = 0     # Decoded video frames
        self.decoded_audio = 0     # Decoded audio frames
        self.displayed_pictures = 0  # Displayed pictures
        self.late_pictures = 0     # Late pictures
        self.lost_pictures = 0     # Lost pictures
        self.played_abuffers = 0   # Played audio buffers
        self.lost_abuffers = 0     # Lost audio buffers
        self.sent_packets = 0      # Sent packets
        self.sent_bytes = 0        # Sent bytes

class MediaTrack:
    """Media track information structure."""
    def __init__(self):
        self.codec = 0             # Track codec
        self.original_fourcc = 0   # Original fourcc
        self.id = 0                # Track ID
        self.type = TrackType.Unknown  # Track type
        self.profile = 0           # Codec profile
        self.level = 0             # Codec level
        self.bitrate = 0           # Bitrate
        self.language = None       # Language code
        self.description = None    # Track description

class AudioTrack:
    """Audio track information structure.""" 
    def __init__(self):
        self.channels = 0          # Channel count
        self.rate = 0              # Sample rate

class VideoTrack:
    """Video track information structure."""
    def __init__(self):
        self.height = 0            # Video height
        self.width = 0             # Video width
        self.sar_num = 0           # Sample aspect ratio numerator
        self.sar_den = 0           # Sample aspect ratio denominator
        self.frame_rate_num = 0    # Frame rate numerator
        self.frame_rate_den = 0    # Frame rate denominator

class SubtitleTrack:
    """Subtitle track information structure."""
    def __init__(self):
        self.encoding = None       # Text encoding

Exception Classes

Exception classes for error handling.

class VLCException(Exception):
    """Main exception class for LibVLC errors."""
    pass

Utility Classes

Utility classes for internal operations and memory management.

class ListPOINTER:
    """ctypes utility for handling lists of pointers."""
    pass

class CallbackDecorators:
    """Utility class for callback function decorators."""
    pass

class Log:
    """Log entry structure wrapper."""
    def __init__(self):
        self.severity = LogLevel.Debug  # Log severity
        self.type = None                # Log type
        self.name = None                # Logger name
        self.header = None              # Log header
        self.message = None             # Log message

Usage Examples

State Checking and Handling

import vlc
import time

player = vlc.MediaPlayer('/path/to/video.mp4')
player.play()

# Check player state
while True:
    state = player.get_state()
    
    if state == vlc.State.NothingSpecial:
        print("No media loaded")
    elif state == vlc.State.Opening:
        print("Opening media...")
    elif state == vlc.State.Buffering:
        print("Buffering...")
    elif state == vlc.State.Playing:
        print("Playing")
        break
    elif state == vlc.State.Paused:
        print("Paused")
    elif state == vlc.State.Stopped:
        print("Stopped")
    elif state == vlc.State.Ended:
        print("Playback ended")
        break
    elif state == vlc.State.Error:
        print("Error occurred")
        break
    
    time.sleep(0.5)

# Handle different media types
media = player.get_media()
if media:
    media_type = media.get_type()
    
    if media_type == vlc.MediaType.File:
        print("Playing a file")
    elif media_type == vlc.MediaType.Stream:
        print("Playing a stream")
    elif media_type == vlc.MediaType.Disc:
        print("Playing from disc")
    elif media_type == vlc.MediaType.Directory:
        print("Playing from directory")
    elif media_type == vlc.MediaType.Playlist:
        print("Playing a playlist")

Metadata Extraction

import vlc

# Create media and parse it
media = vlc.Media('/path/to/audio.mp3')
media.parse()

# Extract various metadata
metadata = {}
meta_types = [
    (vlc.Meta.Title, "Title"),
    (vlc.Meta.Artist, "Artist"),
    (vlc.Meta.Album, "Album"),
    (vlc.Meta.Genre, "Genre"),
    (vlc.Meta.Date, "Date"),
    (vlc.Meta.TrackNumber, "Track Number"),
    (vlc.Meta.TrackTotal, "Total Tracks"),
    (vlc.Meta.Publisher, "Publisher"),
    (vlc.Meta.Copyright, "Copyright"),
    (vlc.Meta.Language, "Language"),
    (vlc.Meta.Description, "Description"),
    (vlc.Meta.Rating, "Rating"),
    (vlc.Meta.ArtworkURL, "Artwork URL"),
]

print("Media Metadata:")
for meta_type, name in meta_types:
    value = media.get_meta(meta_type)
    if value:
        metadata[name] = value
        print(f"  {name}: {value}")

# Get duration and other properties
duration = media.get_duration()
if duration > 0:
    minutes = duration // 60000
    seconds = (duration % 60000) // 1000
    print(f"  Duration: {minutes:02d}:{seconds:02d}")

Audio Configuration

import vlc

player = vlc.MediaPlayer('/path/to/audio.mp3')
player.play()

# Check and set audio channel configuration
channel = player.audio_get_channel()
print(f"Current audio channel: {channel}")

# Set different channel configurations
if channel == vlc.AudioOutputChannel.Stereo:
    print("Audio is in stereo mode")
elif channel == vlc.AudioOutputChannel.Left:
    print("Audio is left channel only")
elif channel == vlc.AudioOutputChannel.Right:
    print("Audio is right channel only")
elif channel == vlc.AudioOutputChannel.Dolby:
    print("Audio is in Dolby mode")

# Change to mono (left channel only)
player.audio_set_channel(vlc.AudioOutputChannel.Left)
print(f"Changed to: {player.audio_get_channel()}")

# Get audio output device information
instance = player.get_instance()
devices = instance.audio_output_enumerate_devices()
print("\nAvailable audio devices:")
for device_id, device_name in devices:
    print(f"  {device_id}: {device_name}")

Video Adjustment and Effects

import vlc

player = vlc.MediaPlayer('/path/to/video.mp4')
player.play()

# Wait for video to start
import time
time.sleep(2)

# Enable video adjustments
player.video_set_adjust_int(vlc.VideoAdjustOption.Enable, 1)

# Adjust video properties
adjustments = [
    (vlc.VideoAdjustOption.Brightness, 1.2),
    (vlc.VideoAdjustOption.Contrast, 1.3),
    (vlc.VideoAdjustOption.Saturation, 1.1),
    (vlc.VideoAdjustOption.Gamma, 1.0),
    (vlc.VideoAdjustOption.Hue, 0)
]

print("Applying video adjustments:")
for option, value in adjustments:
    player.video_set_adjust_float(option, value)
    current = player.video_get_adjust_float(option)
    print(f"  {option}: {current}")

# Add logo overlay
print("\nAdding logo overlay:")
player.video_set_logo_int(vlc.VideoLogoOption.Enable, 1)
player.video_set_logo_string(vlc.VideoLogoOption.File, '/path/to/logo.png')
player.video_set_logo_int(vlc.VideoLogoOption.X, 10)
player.video_set_logo_int(vlc.VideoLogoOption.Y, 10)
player.video_set_logo_int(vlc.VideoLogoOption.Opacity, 128)  # 50% opacity

# Add text marquee
print("Adding text marquee:")
player.video_set_marquee_int(vlc.VideoMarqueeOption.Enable, 1)
player.video_set_marquee_string(vlc.VideoMarqueeOption.Text, "Python-VLC Demo")
player.video_set_marquee_int(vlc.VideoMarqueeOption.X, 100)
player.video_set_marquee_int(vlc.VideoMarqueeOption.Y, 50)
player.video_set_marquee_int(vlc.VideoMarqueeOption.Size, 24)
player.video_set_marquee_int(vlc.VideoMarqueeOption.Color, 0xFFFFFF)  # White
player.video_set_marquee_int(vlc.VideoMarqueeOption.Opacity, 255)     # Fully opaque

Track Information Analysis

import vlc

media = vlc.Media('/path/to/video.mkv')
media.parse()

# Get track information
tracks = media.tracks_get()
if tracks:
    print(f"Media has {len(tracks)} tracks:")
    
    for i, track in enumerate(tracks):
        print(f"\nTrack {i}:")
        print(f"  ID: {track.id}")
        print(f"  Type: {track.type}")
        print(f"  Codec: {track.codec}")
        print(f"  Language: {track.language}")
        print(f"  Description: {track.description}")
        
        if track.type == vlc.TrackType.Audio:
            print(f"  Channels: {track.channels}")
            print(f"  Sample Rate: {track.rate} Hz")
        elif track.type == vlc.TrackType.Video:
            print(f"  Resolution: {track.width}x{track.height}")
            if track.frame_rate_den > 0:
                fps = track.frame_rate_num / track.frame_rate_den
                print(f"  Frame Rate: {fps:.2f} fps")
        elif track.type == vlc.TrackType.Text:
            print(f"  Encoding: {track.encoding}")

# Alternative: Get track info as dictionaries
track_info = media.get_tracks_info()
print(f"\nTrack info (dict format): {len(track_info)} tracks")
for i, info in enumerate(track_info):
    print(f"Track {i}: {info}")

Playlist Mode Configuration

import vlc

# Create media list and player
instance = vlc.Instance()
media_list = instance.media_list_new()
list_player = instance.media_list_player_new()

# Add media to list
songs = ['/path/to/song1.mp3', '/path/to/song2.mp3', '/path/to/song3.mp3']
for song in songs:
    media = instance.media_new(song)
    media_list.add_media(media)

list_player.set_media_list(media_list)

# Set different playback modes
print("Testing playback modes:")

# Default mode - play once through
list_player.set_playback_mode(vlc.PlaybackMode.Default)
print("Mode: Default (play once)")

# Loop mode - repeat entire list
list_player.set_playback_mode(vlc.PlaybackMode.Loop)
print("Mode: Loop (repeat list)")

# Repeat mode - repeat current item
list_player.set_playback_mode(vlc.PlaybackMode.Repeat)
print("Mode: Repeat (repeat current)")

# Start playback
list_player.play()

Install with Tessl CLI

npx tessl i tessl/pypi-python-vlc

docs

audio-control.md

core-playback.md

data-structures.md

discovery-renderers.md

event-system.md

index.md

low-level-functions.md

media-lists.md

video-control.md

tile.json