程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python+vlc 實現視頻播放

編輯:Python

之前使用openCV實現了視頻的播放,可惜的沒有處理音頻信息,只有畫面。這次嘗試使用VLC實現播放器。

import vlc
import platform
class Player:
''' args:設置 options '''
def __init__(self, *args):
if args:
self.instance = vlc.Instance(*args)
else:
self.instance = vlc.Instance()
self.mediaplayer = self.instance.media_player_new()
self.uri = None
# 設置待播放的url地址或本地文件路徑,每次調用都會重新加載資源
def set_uri(self, uri):
self.uri = uri
# self.mediaplayer.set_mrl(self.uri) 
# 替換為 set_media 方法,以獲取進度
m = self.instance.media_new(uri)
self.mediaplayer.set_media(m)
# 播放 成功返回0,失敗返回-1
def play(self, path=None):
if path:
if path.endswith('h264'):
logger.debug('將h264設置播放速度為 0.4')
self.mediaplayer.set_rate(0.4)
else:
logger.debug('設置播放速度為 1')
self.mediaplayer.set_rate(1)
self.set_uri(path)
return self.mediaplayer.play()
else:
return self.mediaplayer.play()
# 暫停
def pause(self):
self.mediaplayer.pause()
# 恢復
def resume(self):
self.mediaplayer.set_pause(0)
# 停止
def stop(self):
self.mediaplayer.stop()
# 釋放資源
def release(self):
return self.mediaplayer.release()
# 是否正在播放
def is_playing(self):
return self.mediaplayer.is_playing()
# 已播放時間,返回毫秒值
def get_time(self):
return self.mediaplayer.get_time()
# 拖動指定的毫秒值處播放。成功返回0,失敗返回-1 (需要注意,只有當前多媒體格式或流媒體協議支持才會生效)
def set_time(self, ms):
return self.mediaplayer.get_time()
# 音視頻總長度,返回毫秒值
def get_length(self):
return self.mediaplayer.get_length()
# 獲取當前音量(0~100)
def get_volume(self):
return self.mediaplayer.audio_get_volume()
# 設置音量(0~100)
def set_volume(self, volume):
return self.mediaplayer.audio_set_volume(volume)
# 返回當前狀態:正在播放;暫停中;其他
def get_state(self):
state = self.mediaplayer.get_state()
if state == vlc.State.Playing:
return 1
elif state == vlc.State.Paused:
return 0
else:
return -1
# 當前播放進度情況。返回0.0~1.0之間的浮點數
def get_position(self):
return self.mediaplayer.get_position()
# 拖動當前進度,傳入0.0~1.0之間的浮點數(需要注意,只有當前多媒體格式或流媒體協議支持才會生效)
def set_position(self, float_val):
return self.mediaplayer.set_position(float_val)
# 獲取當前文件播放速率
def get_rate(self):
return self.mediaplayer.get_rate()
# 設置播放速率(如:1.2,表示加速1.2倍播放)
def set_rate(self, rate):
return self.mediaplayer.set_rate(rate)
# 設置寬高比率(如"16:9","4:3")
def set_ratio(self, ratio):
self.mediaplayer.video_set_scale(0) # 必須設置為0,否則無法修改屏幕寬高
self.mediaplayer.video_set_aspect_ratio(ratio)
# 設置窗口句柄
def set_window(self, wm_id):
if platform.system() == 'Windows':
self.mediaplayer.set_hwnd(wm_id)
elif platform.system() == 'Linux':
self.mediaplayer.set_xwindow(wm_id)
else: # MacOS
self.mediaplayer.set_nsobject(wm_id)
# 注冊監聽器
def add_callback(self, event_type, callback):
self.mediaplayer.event_manager().event_attach(event_type, callback)
# 移除監聽器
def remove_callback(self, event_type, callback):
self.mediaplayer.event_manager().event_detach(event_type, callback)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved