Base64 视频编码 - good\bad 想法?
Base64 video encoding - good\bad idea?
我正在使用 cordova 开发一个移动前端项目,与我合作的后端开发人员坚持认为媒体文件 (images/videos) 应该以 [=34] 编码的 base64 格式传输=] 个文件。
现在,到目前为止,图像已经可以正常工作了。尽管它会冻结 UI 几秒钟,但它可以以某种方式延迟。
然而,这些视频到目前为止处理起来很痛苦,正在传输的 single/simple 视频的长度接近 300,000。它使我可怜的笔记本电脑疯狂旋转,并在大约 20 秒后通过代码获取 uri(但它仍然无法正常工作,而且我不想调试它,因为每次刷新时它几乎让我的笔记本电脑崩溃)。
所以我的问题是:
- base64 编码是移动开发中流行的媒体传输方式吗?
- 如果不是,您会推荐使用什么替代方法来 transfer/present 这些视频?
不过我应该提一下,这些视频是为了让大量的人(可能有数百人)同时观看,而另一个开发者说他们的服务器无法处理这样的流量。
非常感谢您的任何建议,我无法在任何地方找到此信息。 :)
Base64 是一种方便(但效率不高)的二进制数据传输方式。这是低效的,因为传输大小将比您最初传输的大小大 33%。 Si 这不是一种流行的视频传输方式。如果您打算流式传输该视频,您应该寻找一个既定的协议来做到这一点。
我会推荐一个流媒体协议(有很多你可以选择的地方)。
[...] the backend developer [...] insists that the media files (images/videos) should be transferred as base64 encoded in json files.
这是一个非常糟糕(而且愚蠢)的预先想法。您不想 将大量二进制数据作为字符串传输。尤其是 Unicode 字符串。
在这里,您需要武装起来并说服您的后端开发叛逆者不惜一切代价改变主意,播放一些 Biber 或 Nickelback,甚至将他的背景图片更改为 Hello Kitty,或者拍摄快照他的屏幕,将其设置为背景并隐藏所有图标和栏。这应该可以帮助你改变他的想法。如果没有,在他的办公室里最多放一个 webasto 并锁上所有门和 windows.
Is base64 encoding a popular way of transferring media in mobile development?
它很流行,历史相对较长,在 Usenet 等上非常普遍。然而,在那些日子里,数据量与今天相比非常低,因为所有数据都是通过调制解调器传输的。
但是,仅仅因为它很受欢迎并不意味着它是适用于所有事情的正确工具。它不是很有效,因为它需要一个编码过程,将三个八位字节转换为四个字节,导致大小增加 33%。
最重要的是:在 JavaScript 中,由于 Unicode 字符集,每个字符串字符都存储为两个字节,因此您的数据加倍并扩展了 33%。您的 300 MB 数据现在是 300 x 2 x 1.33 = 798 MB(将其显示给您的后台开发人员!:) 因为如果服务器无法处理大量流量,这是一个实际因素)。
这适用于较小的文件,但对于较大的文件(如您的示例),这可能会导致时间和内存使用方面的显着开销,当然还有带宽。当然,在服务器端,您需要用自己的开销来反转该过程。
And if not, what alternative way would you recommend using to transfer/present these videos?
我会推荐:
- 将元数据分离为 JSON,并带有对数据的 引用 。 JSON.
中没有二进制数据
- 以本机字节(ArrayBuffer)单独传输媒体数据本身。
- 将两者同时发送到服务器。
服务器只需要将JSON数据解析成后端可读的,二进制数据就可以直接上磁盘了。
更新 我忘了提到,就像 Pablo 在他的回答中所做的那样,您可以研究流式传输数据。
然而,流式传输几乎是缓冲的同义词,因此 带宽 将大致相同,只是以更强力的方式提供(通常是 UDP 与 TCP,即. 数据包丢失不会中断传输)。流式传输比在客户端中缓冲更能限制您的选择。
我的 2 美分...
不确定为什么总是提到“33% 的开销”,而这完全是胡说八道。是的,它最初确实粗略地增加了这个数量,但是有一个叫做 gzip 的小东西(听说过吗?)。我做了很多测试,差异通常可以忽略不计。事实上,有时压缩后的 base64 字符串实际上 比二进制文件小 。看看这个人的 tests。所以,拜托,我们能不能停止传播绝对虚构的东西。
Base64 是一种完全可以接受的视频检索方法。事实上,它对于私人消息系统来说效果惊人。例如,如果您使用的是 AWS S3,则可以私下存储文件,这样就没有 URL.
但是,使用 gzipped base64 视频的主要缺点(恕我直言)是您需要等待整个视频加载,因此伪流式传输是不可能的。
我认为这是个坏主意,视频文件很大。但是您可以尝试使用小视频文件。
尝试在线编码器 https://base64.online/encoders/encode-video-to-base64
在那里您可以将视频转换为 Base64 数据 URI,并尝试插入 HTML
结果如下:
<video controls><source src="data:video/mpeg;base64,AAABuiEAAQALgBexAAABuwAMgBexBeH/wMAg4ODgAAA..."></video>
我正在使用 cordova 开发一个移动前端项目,与我合作的后端开发人员坚持认为媒体文件 (images/videos) 应该以 [=34] 编码的 base64 格式传输=] 个文件。
现在,到目前为止,图像已经可以正常工作了。尽管它会冻结 UI 几秒钟,但它可以以某种方式延迟。
然而,这些视频到目前为止处理起来很痛苦,正在传输的 single/simple 视频的长度接近 300,000。它使我可怜的笔记本电脑疯狂旋转,并在大约 20 秒后通过代码获取 uri(但它仍然无法正常工作,而且我不想调试它,因为每次刷新时它几乎让我的笔记本电脑崩溃)。
所以我的问题是:
- base64 编码是移动开发中流行的媒体传输方式吗?
- 如果不是,您会推荐使用什么替代方法来 transfer/present 这些视频?
不过我应该提一下,这些视频是为了让大量的人(可能有数百人)同时观看,而另一个开发者说他们的服务器无法处理这样的流量。
非常感谢您的任何建议,我无法在任何地方找到此信息。 :)
Base64 是一种方便(但效率不高)的二进制数据传输方式。这是低效的,因为传输大小将比您最初传输的大小大 33%。 Si 这不是一种流行的视频传输方式。如果您打算流式传输该视频,您应该寻找一个既定的协议来做到这一点。
我会推荐一个流媒体协议(有很多你可以选择的地方)。
[...] the backend developer [...] insists that the media files (images/videos) should be transferred as base64 encoded in json files.
这是一个非常糟糕(而且愚蠢)的预先想法。您不想 将大量二进制数据作为字符串传输。尤其是 Unicode 字符串。
在这里,您需要武装起来并说服您的后端开发叛逆者不惜一切代价改变主意,播放一些 Biber 或 Nickelback,甚至将他的背景图片更改为 Hello Kitty,或者拍摄快照他的屏幕,将其设置为背景并隐藏所有图标和栏。这应该可以帮助你改变他的想法。如果没有,在他的办公室里最多放一个 webasto 并锁上所有门和 windows.
Is base64 encoding a popular way of transferring media in mobile development?
它很流行,历史相对较长,在 Usenet 等上非常普遍。然而,在那些日子里,数据量与今天相比非常低,因为所有数据都是通过调制解调器传输的。
但是,仅仅因为它很受欢迎并不意味着它是适用于所有事情的正确工具。它不是很有效,因为它需要一个编码过程,将三个八位字节转换为四个字节,导致大小增加 33%。
最重要的是:在 JavaScript 中,由于 Unicode 字符集,每个字符串字符都存储为两个字节,因此您的数据加倍并扩展了 33%。您的 300 MB 数据现在是 300 x 2 x 1.33 = 798 MB(将其显示给您的后台开发人员!:) 因为如果服务器无法处理大量流量,这是一个实际因素)。
这适用于较小的文件,但对于较大的文件(如您的示例),这可能会导致时间和内存使用方面的显着开销,当然还有带宽。当然,在服务器端,您需要用自己的开销来反转该过程。
And if not, what alternative way would you recommend using to transfer/present these videos?
我会推荐:
- 将元数据分离为 JSON,并带有对数据的 引用 。 JSON. 中没有二进制数据
- 以本机字节(ArrayBuffer)单独传输媒体数据本身。
- 将两者同时发送到服务器。
服务器只需要将JSON数据解析成后端可读的,二进制数据就可以直接上磁盘了。
更新 我忘了提到,就像 Pablo 在他的回答中所做的那样,您可以研究流式传输数据。
然而,流式传输几乎是缓冲的同义词,因此 带宽 将大致相同,只是以更强力的方式提供(通常是 UDP 与 TCP,即. 数据包丢失不会中断传输)。流式传输比在客户端中缓冲更能限制您的选择。
我的 2 美分...
不确定为什么总是提到“33% 的开销”,而这完全是胡说八道。是的,它最初确实粗略地增加了这个数量,但是有一个叫做 gzip 的小东西(听说过吗?)。我做了很多测试,差异通常可以忽略不计。事实上,有时压缩后的 base64 字符串实际上 比二进制文件小 。看看这个人的 tests。所以,拜托,我们能不能停止传播绝对虚构的东西。
Base64 是一种完全可以接受的视频检索方法。事实上,它对于私人消息系统来说效果惊人。例如,如果您使用的是 AWS S3,则可以私下存储文件,这样就没有 URL.
但是,使用 gzipped base64 视频的主要缺点(恕我直言)是您需要等待整个视频加载,因此伪流式传输是不可能的。
我认为这是个坏主意,视频文件很大。但是您可以尝试使用小视频文件。 尝试在线编码器 https://base64.online/encoders/encode-video-to-base64 在那里您可以将视频转换为 Base64 数据 URI,并尝试插入 HTML
结果如下:
<video controls><source src="data:video/mpeg;base64,AAABuiEAAQALgBexAAABuwAMgBexBeH/wMAg4ODgAAA..."></video>