VideoLAN的libdvdcss的Python包装器。

pydvdcss的Python项目详细描述


Banner


pydvdcss是VideoLAN的libdvdcss的python包装器

from pydvdcss.dvdcss import DvdCss

# ...

# choose device
dev = "/dev/sr0"

# use `with` to auto dispose once you leave the tree
# of course you can also just do `dvdcss = DvdCss()`
with DvdCss() as dvdcss:

  # open device
  dvdcss.open(dev)

  # check if dvd is scrambled
  if dvdcss.is_scrambled():
    print("The DVD is scrambled!")

  # read volume id from the ISO 9660 Volume Descriptor Set
  dvdcss.seek(16)       # seek to sector 16, the first 15 sectors are unused by ISO 9660
  dvdcss.read(1)        # read one sector amount of data
  data = dvdcss.buffer  # access the latest read data
  volume_label = data[40:72].strip().decode()
  print(f"{dev}: {volume_label}")
  # >> eg. `'/dev/sr0: THE_IT_CROWD_DISC_1'`

# make sure you dispose when your done if you didn't
# use `with`, otherwise stuff will get stuck in memory.
# usage of `with` on DvdCss automatically handles disposing.
# dvdcss.dispose()


libdvdcss是一个简单的库,可以像块设备一样访问DVD,而不必担心解密。pydvdcss将这个库公开为一个处理其余部分的类。在

Pull requests welcomeGPLv3 licensePyPI versionPython versionsPyPI statusContributorsGitHub issuesPython version tests

Support me on ko-fi

特点

可移植性

支持任何可以运行上面显示的受支持的python版本的内容。在

简单性

DVD播放器可以围绕libdvdcssAPI构建,只需使用4到5个库调用。在

Freedom

libdvdcss和这个包装器pydvdcss是在通用公共许可证下发布的,确保它将保持免费,并且只用于自由软件产品。在

更好

与大多数类似的项目不同,libdvdcss不需要设置驱动器的区域。在

安装

^{pr2}$

或者

git clone https://github.com/rlaPHOENiX/pydvdcss.git
cd pydvdcss
python -m pip install --user .

注意:使用第二种方法,您需要通过重新克隆和重新安装来处理更新。

待办事项

  • [x] 实现dvdcss_open
  • [x] 关闭DVDU
  • [x] 实现dvdcss_seek
  • [x] 实现dvdcss_read
  • [x] 实现dvdcss_错误
  • [x] 实现dvdcss_被加扰
  • [x] 实现__enter____exit__以正确处理
  • [x] 为失败的find_库调用添加处理程序
  • [十] 为失败的cdll调用添加处理程序
  • [x] 添加安装libdvdcss的说明
  • [x] 添加和测试Windows支持
  • [x] 添加和测试对Mac OS的支持
  • [x] 添加和测试Linux支持
  • [x] 添加设置DVDCSS_VERBOSE的函数
  • [x] 添加设置DVDCSS_方法的函数
  • []实现dvdcss_readv,不确定如何使用或实现

功能

在DvdCss.open版(psz_目标=[字符串])

打开一个DVD设备或目录并返回dvdcss实例。在

初始化libdvdcss库并打开请求的DVD设备或目录。 libdvdcss检查是否可以在光盘上执行ioctl,如果可能, 将检索光盘密钥。在

open()返回用于所有后续libdvdcss调用的句柄。如果 发生错误,返回NULL。在

  • psz_target:目标名称,例如“/dev/hdc”或“e:”。在

在DvdCss.close()

关闭DVD并清理库。在

关闭DVD设备并释放libdvdcss分配的所有内存。 返回时,dvdcss_t句柄无效,不能再次使用。在

在DvdCss.seek(i_blocks=[int],i\u flags=[int;NOFLAGS])

在光盘中搜索并根据需要更改当前键。在

此函数在逻辑块中查找请求的位置。 以块为单位返回新位置,如果出现错误,则返回负值 发生了。在

小贴士:

Use SEEK_MPEG flag when seeking throughout VOB data sectors. It isn't needed on the first sector.

Use SEEK_KEY flag the first time you enter a TITLE. You can always call it in VOB data sectors, however it will be unnecessary and cause slowdowns.

  • i_块:要查找的绝对块偏移量。在
  • i_flags:默认情况下没有标志,也可以指定SEEK_KEY或SEEK_MPEG标志。在

在DvdCss.read(i_blocks=[int],i\u flags=[int;NOFLAGS])

从光盘中读取数据,并在需要时解密数据。在

此函数从DVD读取逻辑块。 返回读取的块数,或在发生错误时返回负值。在

小贴士:

Get the read contents from the buffer variable of DvdCss instance.

  • i_块:要查找的绝对块偏移量。在
  • i_flags:默认情况下没有标志,或者您可以指定READ_DECRYPT标志。在

在DvdCss.error.错误()

返回一个字符串,该字符串包含给定libdvdcss中发生的最新错误 实例。在

此函数返回包含最近发生的错误的常量字符串 在libdvdcss中。它可以用于在您方便的时候格式化错误消息 应用程序。在

返回一个以null结尾的字符串,其中包含最新的错误消息。在

在DvdCss.is_加扰()

检查DVD是否加扰。在

如果被置乱,则返回True。在


PHOENiX

LICENSE (GPLv3)

CONTRIBUTORS

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从IBM MQ的JMSException检测可恢复错误   java Lucene6。4.2:找不到类,尝试添加查询。   Java Pdf差异库   在Java中多线程处理我的线程   java将字符串传递给Uri。下载中的parse()   java在列表中查找原语位置   java JPA条件从另一个查询中选择   java中的强制转换和转换   java如何在没有上下文的情况下获取SOAP Web服务(Apache Axis 1.4)的调用客户端的IP地址   java Android IllegalBlockSizeException:解密中最后一个块未完成   java Jersey是否要自定义无效资源路径的错误处理?   如何将JavaCVS web项目转换为基于maven的web项目?   java如何检查通用列表是否与jUnit相等?   arraylist java。util。尝试使用迭代器时发生ConcurrentModificationException错误   使用springsecurity,jsp上的java${u csrf.token}始终为空   sql使用java从临时表中选择数据   spring验证中的java@Notnull和@Pattern无效   java如何使用jQuery将包含对象数组的对象数组传递给Spring MVC控制器?