媒体处理

选择媒体格式

主端和从端都应该对收发的媒体文件的格式负责。一般来说:如果从远程服务器收到的媒体文件不是一个常见的格式,这个文件应该在传递给其他信道之前转码。如果发送到远程服务器的媒体文件有格式要求,则应在发出之前进行转换。然而,我们只提供一个关于媒体格式转换责任的指导建议,毕竟每个人对于常见格式、编码的定义不尽相同。故我们只提供推荐行为,而不在框架内做出强制限制。也就是说,如果信道向框架外输出的媒体文件对格式有所要求,信道仍旧需要检查文件格式,并在必要时转换。毕竟保证信息的传递更为重要。

媒体编码器

类似地,我们不会对它做出明确的限制,我们只是提出建议。或许您已经知道了,目前 Python 平台已有数个成熟的媒体处理库,其中大多数都需要用到内置的或是附加的二进制依赖。

尽可能少地使用不同的外部代码库。多一个外部代码库依赖就意味着用户需要更多的时间和空间,并且提升了安装的复杂性。在处理媒体文件时,我们建议尽可能使用以下的库:

消息中的文件

从信道发出的文件对象都必须(MUST)为打开的状态、且文件指针应该定位于 0(file.seek(0))。

所有发出的都必须(MUST)能在文件系统中找到,并应当(SHOULD)有附有相应的扩展名。在发送文件的同时也必须(MUST)在消息对象中指定其 MIME 类型。如果文件的 MIME 类型不明确,可以尝试用 libmagic 猜测,或者使用最基本的 application/octet-stream。发送文件时应尽可能提供准确的 MIME 类型。

发出的文件会通过 close 来标记其的生命周期的结束。如果消息的来源信道也不再需要它的话,该文件此时就被安全地丢弃了。

一般来讲,tempfile.NamedTemporaryFile 应该能适用于大多数情况。