From 8a36f49b49ae298322cb180f06ad999545ac6944 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sat, 16 Jan 2021 22:30:55 +0800 Subject: [PATCH] update rssbotlib --- rssbotlib.py | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/rssbotlib.py b/rssbotlib.py index 4d80ac5..95d1b71 100644 --- a/rssbotlib.py +++ b/rssbotlib.py @@ -13,8 +13,9 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from ctypes import Structure, c_bool, c_int64, c_char_p, CDLL, c_ushort, c_uint16, c_int, POINTER, c_size_t +from ctypes import Structure, c_bool, c_int64, c_char_p, CDLL, c_ushort, c_uint16, c_int, POINTER, c_size_t, pointer from enum import Enum, unique +from typing import List @unique @@ -103,6 +104,18 @@ class StreamInfoC: self._channels = data.channels if data.channels > 0 else None self._sampleRate = data.sampleRate if data.sampleRate > 0 else None + def getCodecDescription(self) -> str: + return self._lib.getCodecDescription(self._originCodecID) + + def getCodecMimeType(self) -> List[str]: + return self._lib.getCodecMimeType(self._originCodecID) + + def getCodecName(self) -> str: + return self._lib.getCodecName(self._originCodecID) + + def getProfileName(self) -> str: + return self._lib.getProfileName(self._originCodecID, self._profile) + def isVideo(self) -> bool: if self._mediaType == MediaType.VIDEO: return True @@ -166,6 +179,15 @@ class RSSBotLib: self._main: main = m self.__getBasicInfo = self._lib.getBasicInfo self.__getBasicInfo.restype = BasicInfo + self.__getCodecDescription = self._lib.getCodecDescription + self.__getCodecDescription.restype = c_char_p + self.__getCodecMimeType = self._lib.getCodecMimeType + self.__getCodecMimeType.restype = POINTER(c_char_p) + self.__getCodecMimeType.argstype = [c_int, POINTER(c_size_t)] + self.__getCodecName = self._lib.getCodecName + self.__getCodecName.restype = c_char_p + self.__getProfileName = self._lib.getProfileName + self.__getProfileName.restype = c_char_p def getBasicInfo(self, url: str) -> (bool, BasicInfoC): try: @@ -176,6 +198,59 @@ class RSSBotLib: except: return False, None + def getCodecDescription(self, codecId: int) -> str: + "codecId is originCodecId" + if codecId is None: + return None + try: + r = self.__getCodecDescription(codecId) + if r is None: + return None + return r.decode() + except: + return None + + def getCodecMimeType(self, codecId: int) -> List[str]: + "codecId is originCodecId" + if codecId is None: + return None + try: + l = c_size_t(0) + pl = pointer(l) + r = self.__getCodecMimeType(codecId, pl) + if l.value == 0: + return None + t = [] + for i in range(l.value): + t.append(r[i].decode()) + return t + except: + return None + + def getCodecName(self, codecId: int) -> str: + "codecId is originCodecId" + if codecId is None: + return None + try: + r = self.__getCodecName(codecId) + if r is None: + return None + return r.decode() + except: + return None + + def getProfileName(self, codecId: int, profile: int) -> str: + "codecId is originCodecId" + if codecId is None or profile is None: + return None + try: + r = self.__getProfileName(codecId, profile) + if r is None: + return None + return r.decode() + except: + return None + def addVideoInfo(self, url: str, data: dict, loc: str = None) -> AddVideoInfoResult: if loc is not None: re, info = self.getBasicInfo(loc) @@ -192,7 +267,7 @@ class RSSBotLib: if info.getVideoWidth() is not None: data['width'] = info.getVideoWidth() if info.getVideoHeight() is not None: - data['height'] =info.getVideoHeight() + data['height'] = info.getVideoHeight() return AddVideoInfoResult.OK