一点相关资料

Widevine_CAS_Overview.pdf
Widevine_DRM_Accessing_the_CDM_Repository.pdf
Widevine_DRM_Android_Vendor_Extensions.pdf
Widevine_DRM_Device_Provisioning_Models.pdf
Widevine_DRM_Encoding_and_Packaging.pdf
Widevine_DRM_Encryption_API.pdf
Widevine_DRM_Getting_Started.pdf
Widevine_DRM_Getting_Started_Devices.pdf
Widevine_DRM_Partner_License_SDK.pdf
Widevine_DRM_Proxy_Integration.pdf
Widevine_DRM_Working_With_Foreign_Keys.pdf

下载:https://www.lanzoux.com/iwEDmgxrxaj 密码:731r

说在前面

分析APP的时候发现的...

具体信息

先打开APP播放一个视频,然后打开这个地址:
CIBN超级影视端口 6990
乐视视频端口 6991

http://127.0.0.1:6991/cde
http://127.0.0.1:6990/cde

如果PC和手机在同一个局域网,PC通过局域网访问也是可以的,ip换成手机的ip。
如果是装盒子上的,通过盒子ip访问也是OK的,然后这样可以直接复制m3u8链接了,笑:)

如图:

2020-09-17T16:11:09.png

路由

一些路由:

  • /show-player
  • /control/params
  • /log/pipe
  • /log/text
  • ...

原标题:JavaScript中ArrayBuffer/DataView在python中的实现

有点标题党了。

注意这是一篇不通顺的文章

其实是想说ArrayBuffer有关的转换过程在python中怎么写的问题。

python的memoryview和JavaScript的DataView在名字上就有点相似。

其实它们确实差不多...

可以这样对应一下:

  • ArrayBuffer <---> bytes
  • DataView <---> memoryview

先看一下ArrayBuffer的样子:
2020-09-16T08:41:36.png

与python的bytes不同的是它有4个可索引的合集对象(而且还套娃),便于一些计算。
在js转py的过程中这很不方便,然后一种个人认为比较合理的方式如下(后知后觉),那就是用struct来解析。

提前说明:

  • !是指按大端解析,js里面(ArrayBuffer)看到那些数也是基于大端
  • 数字加字符是指按该字符对应模式解析这么多次,但对于数字加字符s指的是这么多个字节
  • unpack_from是在指定的offset处按格式字符串解析,不用考虑格式字符串对应的字节数与实际bytes大小相同
  • ArrayBuffer中Uint8Array对应struct格式字符是I,Uint8Array中U是无符号的意思,8是指单个元素的值最大不超过2^8也就是小于256,struct中标准大小*8就是这个值。具体参见文档,或者下面截图。

2020-09-16T09:01:06.png

在下面这个例子中,对bytes对象buffer,从位置5开始,以大端方式按两个unsigned int,3个字符,一个整数(0-255)的形式解析:

>>> buffer = b"123" * 6
>>> struct.unpack_from("!2l3cB", buffer, offset=5)
(858862131, 825373489, b'2', b'3', b'1', 50)

js中Uint8Array是纯数字的,所以可以把上面的3c换成3B,这个结果在js中就是new Uint8Array([858862131, 825373489, 50, 51, 49, 50])
2020-09-16T09:09:14.png

DataView与memoryview

DataView的byteLength、byteOffset、buffer
对应
memoryview的nbytes、shape、obj

...写到这里感觉之前写的脚本又有好多地方可以优化了。。

Pillow

今天找一个标准文件,结果没找到能下载的,后来折腾半天发现道客巴巴有,质量还行。

扒下来是图片文字分离的,文字坐标倒是有了,不过还在研究怎么合并到pdf上去。

这不是本文重点,重点是怎么合并图片到PDF,谷歌许多,都不太理想,最后看到说用Pillow,一试效果还不错。

Code

几个说明:

  • 最后调用save方法的_rgb对应应当是第一页的图片,所以程序循环里面有一个判断
  • 我对文件夹里面的图片进行了排序,请自行修改lambda表达式
  • img到rgb是进行了RGBA到RGB的转换
  • 注意这个代码非常吃内存,但好消息是不会崩!

搜寻过程中了解到的一些工具/库:img2pdf pgmagick ImageMagick fpdf PyPDF2

要提一下的是ImageMagick也不崩,但量大的时候命令行都显示完成了,任务管理器还是显示在占用内存。。

最后分享代码如下:

from PIL import Image
from pathlib import Path

def png_to_pdf():
    fpath = Path(r"path/to/images")
    imgs = []
    paths = [path for path in fpath.iterdir()]
    paths = sorted(paths, key=lambda p: int(p.stem.split("_")[-1]))
    for index, path in enumerate(paths):
        img: Image.Image = Image.open(str(path.resolve()))
        rgb = Image.new('RGB', img.size, (255, 255, 255))
        rgb.paste(img, mask=img.split()[3]) 
        if index == 0:
            _rgb = rgb
        else:
            imgs.append(rgb)

    pdf_path = str(Path("filename.pdf").resolve())
    _rgb.save(pdf_path, "PDF", resolution=200.0, save_all=True, append_images=imgs)

if __name__ == "__main__":
    png_to_pdf()