;

一、为什么要使用 base64 我们知道一个字节可表示的范围是 0 ~ 255(十六进制:0x00 ~ 0xFF), 其中 ASCII 值的范围为 0 ~ 127(十六进制:0x00 ~ 0x7F);而超过 ASCII 范围的 128~255(十六进制:0x80 ~ 0xFF)之间的值是不可见字符。 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准 ISO/IEC 646。 在 ASCII 码中 0 – 31和 127 是控制字符,共 33 个。以下是其中一部分控制字符: 其余 95 个,即 32 – 126 是可打印字符,包括数字、大小写字母、常用符号等。 当不可见字符在网络上传输时,比如说从 A 计算机传到 B 计算机,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。 为了解决这个问题,我们可以先对数据进行编码,比如 base64 编码,变成可见字符,也就是 ASCII 码可表示的可见字符,从而确保数据可靠传输。Base6…

一文读懂base64编码 2020年6月8日
;

Fast Forward Moving Picture Experts Group 教程:http://www.ruanyifeng.com/blog/2020/01/ffmpeg.html

ffmpeg 2020年5月30日
;

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>利用Blob对象创建文件</title> </head> <body> <textarea name="" id="downloadFileTextarea" cols="30" rows="10"></textarea> <br> <button id="downloadFileButton">downloadFileButton</button> <script> function downloadFile(fileName, content, blobOptions) { // blobOptions = { // type: ‘text/csv’, // endings: ‘native’ // or transparent // }; blobOptions = blobOptions || …

利用Blob, a.download, URL.createObjectURL模拟下载文件 2020年5月29日
;

一、概述 我们常见的视频文件,大多为 mkv、mov、mp4 等扩展名。一般情况下,我们粗略地根据扩展名判断文件类型。但实际上,科学的分类方法如下: 编码:指的是媒体文件中音视频的编码,如:H.264、AAC 容器:可根据文件扩展名区分,用于将多部分内容整合,包括:  视频  音频,可以是多音轨,如:一部影片同时具备多种语言  字幕:一部影片也可以包含多种语言的内置字幕 二、常见的文件(容器)格式 AVI (.avi)   其含义是 Audio Video Interactive,就是把视频和音频编码混合在一起储存,是最常见的音频视频容器。支持的视频音频编码也是最多的。AVI 也是最长寿的格式,已存在 10 余年了,虽然发布过改版(V2.0 于 1996 年发布),但已显老态。 MPG (.mpg/.mpeg/.dat)   MPEG 编码采用的音频视频容器,具有流的特性,里面又分为 PS、TS 等,PS 主要用于 DVD 存储,TS 主要用于 HDTV。 VOB (.vob)   DVD 采用的音频视频容器格式(即视频 MPEG-2,音频用 AC3 或者 DTS),支持多视频多音轨多字幕章节等。 MP4   MPEG-4 编码采用的音频视频容器,基于 QuickTime MOV 开发,具有许多先进特性。 3GP   3GPP 视频采用的格式…

视频文件的容器格式和编码格式 2020年5月29日
;

二进制 Base64 网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法 MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。 MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。 不同的应用程序支持不同的 MIME 类型。 MIME 类型大约有191种类型,是的没错,191种。 arrayBuffer ArrayBuffer表示二进制数据的原始缓冲区,该缓冲区用于存储各种类型化数组的数据。是最基础的原始数据容器,无法直接读取或写入, 需要通过其他方式来读写。 但可根据需要将其传递到类型化数组或 DataView 对象来解释原始缓冲区。 也就是说他是一个二进制数据的原始缓冲区,虽然 JavaScript 是弱类型语言,但是他本身是对数据的类型和大小都有限制的,我们需要通过某种数据结构将缓冲区的内容有序的读取出来或写进去 例如: Int8Array 8位有符号整数 Uint8Array 8位无符号整数 Uint8ClampedArray 同上,像素操作 Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array …

Base64,MIME,arraybuffer,blob,blob URL,FileReader,ts,Codec 2020年5月28日
;

包括原理篇/思路篇/实践篇/方案篇/前端篇/总结 一:原理篇 何李石:七牛直播云服务技术详解 直播模型及其实现 一个通用的直播模型一般包括三个模块:主播方、服务器端和播放端。   首先是主播方,它是产生视频流的源头,由一系列流程组成:第一,通过一定的设备来采集数据;第二,将采集的这些视频进行一系列的处理,比如水印、美颜和特效滤镜等处理;第三,将处理后的结果视频编码压缩成可观看可传输的视频流;第四,分发推流,即将压缩后的视频流通过网络通道传输出去。 其次是播放端,播放端功能有两个层面,第一个层面是关键性的需求;另一层面是业务层面的。先看第一个层面,它涉及到一些非常关键的指标,比如秒开,在很多场景当中都有这样的要求,然后是对于一些重要内容的版权保护。为了达到更好的效果,我们还需要配合服务端做智能解析,这在某些场景下也是关键性需求。再来看第二个层面也即业务层面的功能,对于一个社交直播产品来说,在播放端,观众希望能够实时的看到主播端推过来的视频流,并且和主播以及其他观众产生一定的互动,因此它可能包含一些像点赞、聊天和弹幕这样的功能,以及礼物这样更高级的道具。 直播服务器端提供的最核心功能是收集主播端的视频推流,并将其放大后推送给所有观众端。除了这个核心功能,还有很多运营级别的诉求,比如鉴权认证,视频连线和实时转码,自动鉴黄,多屏合一,以及云端录制存储…

视频直播的技术原理和实现思路方案整理 2020年5月27日
;

1.斗鱼(http-flv) 找到flv的请求,新窗口打开就可自动下载

各大平台视频及直播下载方法 2020年5月27日
;

最近打算直播上http-flv,之前用的是rtmp和hls。为什么使用http-flv,它有什么优缺点? 怎么让流媒体服务器支持flv直播? 一、市场上哪家直播使用了http-flv: 通过抓包分析: 优酷的pc网页直播使用了http-flv。 斗鱼、熊猫tv、虎牙pc网页上的也使用了http-flv。 二、http-flv、rtmp和hls直播的优缺点: A、三者的延迟性: http-flv:低延迟,内容延迟可以做到2-5秒。 Rtmp:低延迟,内容延迟可以做到2-5秒。 Hls::延迟较高。 B、三者的易用性: rtmp和http-flv:播放端安装率高。只要浏览器支持FlashPlayer就能非常简易的播放。 hls:最大的优点:HTML5可以直接打开播放;这个意味着可以把一个直播链接通过微信 等转发分享,不需要安装任何独立的APP,有浏览器即可。 C、rtmp和http-flv比较: (1) 穿墙:很多防火墙会墙掉RTMP,但是不会墙HTTP,因此HTTP FLV出现奇怪问题的概率很小。 (2) 调度:RTMP也有个302,可惜是播放器as中支持的,HTTP FLV流就支持302方便CDN纠正DNS的错误。 (3) 容错:SRS的HTTP FLV回源时可以回多个,和RTMP一样,可以支持多级热备。 (4) 简单:FLV是最简单的流媒体…

直播http-flv原理 2020年5月27日
;

权威的itef官方文档参见: https://datatracker.ietf.org/doc/draft-pantos-http-live-streaming/ 另外参见苹果官方文档 https://developer.apple.com/streaming/ #EXTM3U //必需,表示一个扩展的m3u文件 #EXT-X-VERSION:3            //hls的协议版本号,暗示媒体流的兼容性 #EXT-X-MEDIA-SEQUENCE:3560  //暗示首个视频分段的sequence number,只能有一个该字段,也可以没有,若没有就假设首个视频分段的sequence number为0 #EXT-X-ALLOW-CACHE:NO       //是否允许客户端对下载的视频分段缓存用于以后播放? #EXT-X-TARGETDURATION:25    //每个视频分段最大的时长(单位秒) #EXT-X-DISCONTINUITY        //暗示当前的视频分段和它之前及之后的视频分段有不同的编码不连续性 #EXTINF:,        //每个视频分段都由以下三行信息组成,duration表示该段的时长,以秒为单位,注意最后有个逗号 http:……mp4    //视频分段的地址 #EXT…

HLS中m3u8格式规范解读 2020年5月26日
;

m3u8 这两年来我们发现越来越多的视频应用使用了m3u8格式的视频,因为可以兼容PC、移动端。相比mp4等视频源,m3u8可以减轻服务器压力(按需加载)。HLS是由苹果公司率先提出的一种协议标准,可用于直播。 m3u8是一种基于HLS(HTTP Live Streaming) 文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成。不同于mp4大文件,m3u8是由一系列的ts文件组成,一般一个ts文件大概5-10秒,这些ts文件通过一个.m3u8文件做索引。用户播放视频时,可随意拖动视频进度,会读取相应进度的ts文件继续观看视频,不必等到下载完整的视频。因此在播放m3u8的时候很少有卡顿的现象。 关于HLS直播的技术示例以及m3u8切片技术我们会在后面有文章介绍。本文只做HLS点播讲解,与直播不同,点播是指视频文件已经在编辑好,随时可播放。 由于HLS是由Apple公司提出的,所以在iOS电脑或手机上,你可以直接使用Safari浏览器的<video>播放m3u8格式视频文件。而其他浏览器则需要借助hls.js来兼容m3u8。 使用hls.js,不需要任何定制的播放器,只需要<video>元素就能播放m3u8。 加载js和播放元素 在需要放置视频的页面位置上加入video元素和hls.js文件。 &l…

HTML5点播m3u8(hls)格式视频 2020年5月26日
;
信息搜索思维导图 2020年5月25日
;

方法一:微信自带工具 微信中搜索,微信修复工具 方法二:读取手机上的sqlite数据库文件 \tencent\MicroMsg\e6480ecde7e94b4a7a1dd66b5576362a\EnMicroMsg.db 安卓文件管理 微信聊天所有图片目录:\tencent\MicroMsg\weixin 第三方恢复软件: 苹果恢复大师:https://www.ifonebox.cn/download 效果还行(自助操作) 卓师兄:https://www.zhuoshixiong.com/ (人工远程操作,每项操作收费)最终效果不佳 业务场景:微信 用户A:误删一条用户B发来的消息和图片 用户B:删除了和用户A的所有聊天记录,但并没有删除好友 需求:需要恢复任何一方完整的聊天信息 设备信息:A(苹果),B(华为) 线索:图片是备忘录截图 恢复经过: 整体思路:从微信入手,恢复删除的聊天记录。 苹果端:首先尝试使用万兴苹果恢复专家,扫描完成后结果页面没有任何信息,猜测是否为磁盘空间满所导致(未做验证,本打算其它方案如不行,再回来验证),接着改用苹果恢复大师,聊天记录成功恢复,但是关键的这个图片不见(购买软件花费128元)。 安卓端:手机下载卓师兄,联系第三方人员,电脑安装远程工具后远程操作,最终只恢复到用户B的部分和其它用户的聊天记录,但是和用…

微信聊天记录恢复 2020年5月22日
;

1.前言 需要下载个视频文件发现只有腾讯视频有,浏览器中播放器有个下载按钮,不错哦,下载腾讯播放器才能下载。 播放器下载完,视频下载下来后发现是qlv格式,播放必须要用腾讯播放器,根本无法传播。 2.进入浏览器播放器分析真正的视频地址 video标签中有个src属性,直接用新标签打开就能下载,这是一段5分钟的mp4,每5分钟这个地址会修改,挨个打开即可。 3.mp4片段合并 本来想着pr拼接后导出简简单单,然后发现比特率调为1了竟然还有400多M,足足比原视频大了4倍,不能忍。 接着百度搜视频在线合成网站,国内的要么限制尺寸,要么上传下载处理都超级慢,根本没法用。 找找国外网站,前面几个都还不错,等视频下载大大的水印把字幕都盖住了,真他娘的都是坑爹货。 看来还得自己动手。 4.ffmpeg出马 下载地址:http://ffmpeg.org/download.html 思路: 1.先将MP4文件转化为同样编码形式的ts流(ts流支持concate) 2.第二步,连接(concate)ts流 3.最后,把连接好的ts流转化为MP4. ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts ffmpeg -i 2.mp4 -vcodec copy -acodec c…

下载腾讯视频并合成为mp4 2020年5月22日
;

步骤一:肤色和背景分离 1.ctrl+l(打开色阶)->自动(恢复照片原有色彩) 2.选择->色彩范围->肤色->检测人脸->ctrl+j(复制图层) 3.选择背景图层->选择->色彩范围->反相->ctrl+j(复制图层)

ps人像调色 2020年5月22日
;

1.srt字幕导入后乱码 字幕文件用记事本打开,选择另存为,编码选择utf-8 2.srt字幕导入后后半部分内容丢失 因为字幕时间点中出现了起始值相同的项目,修改后即可

premiere字幕相关问题总结 2020年5月17日
;

注释: 混合模式的数学计算公式,另外还介绍了不透明度。 这些公式仅适用于RGB图像,对于Lab颜色图像而言,这些公式将不再适用。 在公式中 A 代表下面图层的颜色值; B 代表上面图层的颜色值; C 代表混合图层的颜色值; d 表示该层的透明度。 1.Opacity 不透明度 C=d×A+(1-d)×B 相对于不透明度而言,其反义就是透明度。 这两个术语之间的关系就类似于正负之间的关系:100%的不透明度就是0%的透明度。 该混合模式相对来说比较简单,在该混合模式下, 如果两个图层的叠放顺序不一样,其结果也是不一样的(当然50%透明除外)。 该公式也应用于层蒙板,在这种情况下,d代表了蒙板图层中给定位置图层的亮度(d=颜色值/255), 下同,不再叙述。 2.Darken 变暗 B=A 则 C=A 该模式通过比较上下层像素后取相对较暗的像素作为输出, 注意,每个不同的颜色通道的像素都是独立的进行比较,色彩值相对较小的作为输出结果。 下层表示叠放次序位于下面的那个图层, 上层表示叠放次序位于上面的那个图层,下同,不再叙述。 3.Lighten 变亮 BA 则 C=B 该模式和前面的模式是相似,不同的是取色彩值较大的(也就是较亮的)作为输出结果。 4.Multiply 正片叠底 C=(A×B)/255 该效果将两层像素的标准色彩值(基于0..1之…

PS图层混合模式的计算公式 2020年5月16日
;

1.选择工具 适用于轮廓明显,并且主体边缘较光滑。场景:大部分。 2.通道抠图 适合主体和背景反差大。场景:头发丝 3.蒙版抠图 适用于主体含透明部分,并且背景较干净。场景:玻璃杯,冰块。 4.钢笔工具 主体轮廓较光滑,但是背景复杂和主体难以区分开。场景:前面方法都无法使用的时候不得以用此方法。

PS抠图方法总结 2020年5月15日
;

J CUT 声音先进,视频后进。 L CUT 声音还没结束,视频切到别处。 1.时长显示为帧数改为时间 https://jingyan.baidu.com/article/e52e361501552c40c60c51b5.html

剪辑术语及常用设置 2020年5月14日
;

一、在图层上「Ctrl + 左键单击」建立的选区是该图像的Alpha通道 具体解释就是:根据该图像中每个像素的不透明度值,建立该图像Alpha通道的选择程度。(这种选区我一般叫“不透明度选区”) Alpha通道我们都知道,是一个包含了不透明度信息的通道,是用来描述像素不透明度的一个参数。 其次在图层上建立选区时要知道一个规则:只有不透明度≥50%的像素,才会被蚂蚁线包围,不透明度<50%的像素,不会显示蚂蚁线。(这条规则不仅对「Ctrl + 左键单击」生效,对任意能在图层上建立选区的操作都生效,我暂且叫它“蚂蚁线规则”) 那有人可能会问,不透明度<50%的像素就没有被选中了吗?并不是的。 前面说了,选区只是建立了一个选择程度,也就是说只要不透明度>0%的像素,都会被选中(即使没有被蚂蚁线包围的像素),只是选中的程度不一样而已。 假设建立的选区中,A像素的不透明度为100%,那A像素将会被选中100%;B像素的不透明度为49%,则B像素将会被选中49%,且B像素周围不会出现蚂蚁线。若再将建立的选区填充红色(R255,G0,B0),则A像素将会被填充不透明度为100%的红色(表现为完全不透明的红色),而B像素只会被填充不透明度为49%的红色(表现为半透明的红色),虽然他们的颜色值不变,仍然为(R255,G0,B0)。 说完了图层,我们就来谈谈通道…

PS中“选择像素”的原理是什么? 2020年5月11日
;

1、附近小程序 这个功能推出很久,但还是培育状态。虽然不多,但流量还是有的。普通二三线城市每年几十个流量还是妥妥的。随着这种习惯慢慢普及,流量会持续向上。 2、好友分享 好友分享,除了某个东西特别有意思、有趣、还能学到东西。还可以考虑裂变功能:砍价、拼团、助力等。好友看到,自己想要。又会形成二次裂变。 3.微信群聊入口 小程序可转发到微信聊天对话框,支持好友私聊和微信群分享,在社交场景中相互传播,形成多个入口。这个入口相信大家并不陌生,甚至曾经一度感到厌烦。 小程序游戏全面开放之初,微信群充满着各种小游戏的分享,僵尸群也活跃了起来,一度让小程序分享打扰到用户,腾讯快速对小程序游戏的分享做出规范,规范小游戏的滥用分享,但不得不说,正是因为分享,小游戏才有了瞬间爆发。 4.主界面下拉菜单 下拉可以在较短的时间内,通过用户的记忆留存,获得高曝光,因此有极高的几率吸引用户再次进入。 而且“我的小程序”可以像微信公众号一样被关注,不会被最近使用的小程序冲走。那些工具类小程序或者极具创意的小程序将是这个入口的最大获益者。 5.搜索入口 微信的搜一搜功能不仅可以找个人号、公众号,还可搜索小程序。输入相关关键词就能够找到相应的小程序。 大家知道,我们需要找什么东西的时候才会用到搜索,因此搜索场景来的流量都十分精准。而且今年下半年开放了“品牌搜索”和“服务搜索…

小程序入口列表 2020年5月4日
;

<view class="li" bindtap="connectWifi"> <image src="/images/wifi.png"></image> <text>连接WIFI</text> </view> connectWifi: function () { var that = this; //检测手机型号 wx.getSystemInfo({ success: function (res) { var system = ”; if (res.platform == ‘android’) system = parseInt(res.system.substr(8)); if (res.platform == ‘ios’) system = parseInt(res.system.substr(4)); if (res.platform == ‘android’ && system < 6) { wx.showToast({ title: ‘手机版本不支持’, }) return } if (res.platform == ‘ios’ && system < …

小程序一键连wifi 2020年5月4日
;

1.新建一个json文件,localstorage_b72da75d79277d2f5f9c30c9177be57e.json { "show": false, "currentCategory": "general", "compiler": { "clusterCompile": false, "autoPreview": false, "autoRemoteDebug": false }, "general": { "openLastModifiedProject": true, "autoPreviewType": "mobile", "autoRemoteDebugType": "mobile", "maxLogLength": 300, "enableNewFW": true, "enableGPU": false, "ignoreUnsafeProxy": false, "locale…

微信开发者工具突然黑屏无法启动 2020年4月23日
;

1.高德 http://bgc.amap.com/

地图标注 2020年4月21日
;

1.模糊查询 单字段 var keyWord = ‘abc’ const db = wx.cloud.database() const _ = db.command db.collection(‘product’).where({ title: { $regex: ‘.*’ + keyWord, $options: ‘i’ } }).get() 多字段 var keyWord = ‘abc’ const db = wx.cloud.database() const _ = db.command db.collection(‘product’).where(_.or([ { title: db.RegExp({ regexp: ‘.*’ + keyWord, options: ‘i’, }) }, { subtitle: db.RegExp({ regexp: ‘.*’ + keyWord, options: ‘i’, }) } ])).get() 2.多个条件中的一个 const _ = db.command db.collection(‘todos’).where({ progress: _.in([0, 100]) }) .get({ success: console.log, fail: console.error }) 3.基于时间范…

云函数数据库操作 2020年4月15日