VLC bindings for Python providing comprehensive multimedia functionality through LibVLC API.
—
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.
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 occurredEnumeration 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 fileEnumeration 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 discsEnumerations 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 outputEnumerations 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 positionEnumeration 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 trackEnumeration 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 itemEnumeration 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 directoriesEnumerations 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 successfullyComprehensive 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 = 0x701Enumeration 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 messagesEnumerations 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 positionEnumeration for media slave types (subtitles, audio tracks).
class MediaSlaveType:
"""Media slave type enumeration."""
Subtitle = 0 # Subtitle slave
Audio = 1 # Audio slaveEnumeration for dialog question types in user interactions.
class DialogQuestionType:
"""Dialog question type enumeration."""
Normal = 0 # Normal question
Warning = 1 # Warning dialog
Critical = 2 # Critical dialogEnumeration 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 roleCore 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 encodingException classes for error handling.
class VLCException(Exception):
"""Main exception class for LibVLC errors."""
passUtility 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 messageimport 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")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}")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}")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 opaqueimport 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}")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