- 博客(521)
- 资源 (34)
- 论坛 (1)
- 收藏
- 关注

原创 《Electron实战》系列-总览
欢迎大家阅读 Data-Mining 的《Electron实战》专栏。这里简单的罗列一下专栏的文章目录,一方面方便大家阅读,另一方面可以快速的查找对应的文章。需要说明的是,本专栏会持续更新,不断增加新的文章,同时,也会动态更新原有文章。
2020-11-04 21:00:19
754
2

原创 一款非常简单的基于WebRTC的视频预览播放器(具有贴图、视频特效)
目录前言正文1. 开启摄像头和麦克风2. 增加播控按钮3. 本地预览拍照4. 保存预览照片5. 显示贴图效果(封面)6. 视频预览特效(多种效果)6.1曝光效果6.2悬浮立体效果6.3磨皮效果6.4 反色效果结论前言今天这篇文章给大家介绍一款非常简单的基于WebRTC采集端的视频预览播放器。正文我们需要做的是本地预览的视频播放器,那么首先肯定是要打开摄像头,然后显示播放器控制按钮,最后再增加一些辅助功能,比如拍照、保存照片、贴图...
2020-10-24 00:49:11
3154
25

原创 WebRTC丢包重传大解密
概述WebRTC之所以可以优秀的完成音视频通讯,和它本身的丢包重传机制是密不可分的,今天我们就来看看其中的奥秘。本文以M76版本展开,如果你的工程是基于其他版本开发的,也可以参考。NACK说到丢包重传就不得不提到NACK技术,那么NACK是什么呢。它的全称是Negative Acknowledgment Packet,意思是否定确认包,说到这里我们应该可以联想到ACK(Acknowledgment Packet,确认包)。没错,二者的意思是相反的。ACK表示通知对方我收到了你发给我...
2020-06-18 22:46:27
1605

原创 Electron理论知识 14 - Electron和NW.js的对比分析
类似的技术方案快速开发并部署客户端的现有技术方案中,NW.js可以说和Electron是最相似的了,它们都允许使用Html、Javascript、Node.js技术完成客户端的开发工作。总体来说作为intel的技术方案,NW.js也有不俗的表现,它起步早,最开始的时候有很大的市场占有量。只是目前已经被后起之秀Electron超越了。类似的技术技术方案,Electron为什么能够后发制人呢?一定有对应的原因。结合官网的信息,我们来分析一下二者的区别和优劣。不同的表现1. 应用程序入口NW.
2020-06-15 16:11:24
2520

原创 WebRTC如何通过参数控制编码模式切换(DIsabled模式)
bool WebRtcVideoChannel::AddSendStream(const StreamParams& sp)调用AddSendStream()方法时,首先检验StreamParams参数是否有效,然后判断SSRC是否可用。创建WebRtcVideoSendStream实例的时候,将参数传递给WebRtcVideoSendStream对象。参数sp经过CreateRtp...
2020-04-16 23:09:11
1591

原创 Electron理论知识 13 - Electron和CEF的对比分析
大家都知道CEF和Electron都可以作为跨平台的客户端方案,但最终选型的时候,可能会涉及到CEF和Electron孰优孰劣的问题,今天咱们就看一下二者的对比分析情况,下面是我自己整理的一张图表,大家一起看一下: cef electron 版本更新 平均1~2月更新一次 平均每周更新一次,版...
2020-04-12 01:31:53
4112
4

原创 WebRTC中SDP信息详解
SDP表示Session Description Protocol,Webrtc是通过SDP进行协商,进而创建出符合通话要求的Session。SDP在webrtc应用中扮演着重要的角色,接下来我们通过一个实例来简单介绍一下SDP信息的含义。本例是安卓手机和电脑网页建立的视频通讯会话,具体的SDP信息如下所示:移动端(安卓):"sdp" -> "v=0o=- 76440494516...
2019-06-04 11:29:21
3237

原创 ffmpeg推流到指定的服务器
rtmp流媒体服务器启动后,就可以运行如下命令,使用ffmpeg向服务器推流。搭建服务器可以参考这篇文章(点这里)。ffmpeg -re -stream_loop -1 -i 凉凉-MV.mp4 -vcodec copy -acodec copy -f flv rtmp://localhost:1935/test/live-stream_loop : -1 表示循环推流 -0 表...
2019-04-18 17:34:51
4046
原创 一文入门Golang文件操作——增删改查【超基础】
目录前言正文增——创建文件改——修改文件查——查询文件删——删除文件结尾前言目前,Golang 可以认为是服务器开发语言发展的趋势之一,特别是在流媒体服务器开发中,已经占有一席之地。很多音视频技术服务提供商也大多使用 Golang 语言去做自己的后台服务开发,业内貌似已经达成了某种共识。今天我们不聊特别深奥的机制和内容,就来聊一聊 Golang 对于文件的基本操作。正文开始之前,讲一个非常有意思的小桥段。最开始接触 Golang 这种语言的时候,我总感觉它和 Google 单词比
2021-04-15 17:19:42
255
9
原创 JS调用C++动态库dll最简demo和问题集锦[收藏版]
前言Electron开发过程中,很多时候都会遇到调用C++动态库dll的需求。使用JS调用dll库,听上去都很高大上,JS和C++基本上没有什么交集的两种语言,在这个时候碰出了火花。今天就在Electron的基础上介绍一下这个神奇的使用过程和过程可能遇到的各种问题。前端同学感兴趣的话,欢迎收藏+实践!正文不得不说,想实现JS调用C++的dll动态库,是需要借助第三方工具和中间件的。nodejs有很多相关的工具类,它们都可以轻松实现使用JavaScript加载和调用dll动态库,同时还负责处理跨J
2021-04-11 22:14:44
1769
15
原创 《流媒体服务器》专栏总览丨蓄力计划
音视频技术在实际应用场景中也需要客户端和服务器配合,和传统服务器不同,音视频需要依赖特定的流媒体服务器,其中涉及很多音视频特定的流程和处理逻辑。本专栏的目的就是带领大家一点点了解什么是流媒体服务器以及流媒体服务器的用途和作用。
2021-04-11 22:11:06
41
原创 Golang中字符串的常用方法
目录前言正文常用字符串处理函数前言大家都知道,字符串是Golang一种基础数据类型,那么Golang都有哪些API让我们来处理字符串呢?今天就开始我们的探索。正文在Golang中说到字符串,就必须要提到strings包,这可是Golang语言处理字符串的内置包,也是一款基础工具包。既然说到基础,那么他都有哪些常用函数呢?接下来,我们一个一个介绍。常用字符串处理函数1.Contains作用:是否包含指定的子串内容,包含返回true,不包含返回false。..
2021-04-10 21:55:42
35
原创 Golang中的反射机制
目录前言正文何为反射?关键用途结尾前言Golang中也存在反射机制,具体怎么使用呢?先睹为快。正文何为反射?反射就是Golang通过来获取对象的类型信息或者结构信息,再进行访问或者修改的能力。Golang语言是利用reflect 关键字进行反射调用的。一般情况下,Golang声明的变量都包括两部分基本内容,一部分是变量类型,比如int、string、bool;另一部分是变量的值,比如0,“123”,true。在Golang语言中可以通过 refle..
2021-04-09 23:15:59
45
原创 聊聊Golang中的那些默认值
package mainimport "fmt"func main() { // 基础类型:整型、浮点型、布尔类型、字符串、复数 var a int var b float32 var c bool var d string var e complex64 fmt.Println("整型默认值:", a) fmt.Println("浮点型默认值:", b) fmt.Println("布尔类型默认值:", c) fmt.Println("字符串默认值:", d) f...
2021-04-04 23:19:03
41
原创 Golang中的时间表示问题
目录前言正文前言Golang作为服务开发语言,很多时候都有需要校验时间问题。那么,Golang一般怎么表示时间呢?都有哪些格式问题?具体的使用方式都有哪些?今天就来看一看。正文说到时间,我们都比较关心现在的时间。那我们先来看一下,Golang是如何获取当前时间的,以及都哪些表示方式。直接上代码:package mainimport ( "fmt" "time")func main() { // 获取当前时间 t := .
2021-04-04 20:24:33
27
原创 昨晚凌晨1点58分,产品1.0版本上线了
目录最近有些累故事背景进入正题终于上线了上线后下班自己的思考最近有些累开宗明义,只想说最近一个月自己确实有些累了,一度怀疑自己是不是上年纪了(????),九零后是不是该退居二线了?故事背景我司负责为A公司提供其产品的音视频底层服务,二月份的时候,A公司临时(zhongdian)投了B公司的标。4月初,B公司要验收A公司的一些基础功能,但是B公司要求的很多功能,其实我司自己都还没有,只能临时开发。于是三月初的时候,我们就开始进入了紧张的备战状态,从之前的每周过进度,
2021-04-01 23:31:20
630
13
原创 WebRTC如何在网页端添加硬水印【技巧版】
前言做音视频的同学都知道播放器展示的视频水印分为软水印和硬水印两种,水印的作用一方面是用来增加视频画面的展示内容,比如广告效果、特效处理等;另一方面是出于版权保护的目的,防止视频盗录的风险。一般实现视频的软水印是在播放器端进行处理的,安全性会比较差。硬水印则是在视频源上进行处理,将水印打到视频里,成为视频内容的一部分,这样安全性就会非常高。
2021-03-31 08:45:07
63
原创 MongoDB数据库启动失败
自己的云转码服务器用到了MongoDB数据库,有些情况下,转码服务启动时会遇到数据库服务无法伴随启动的现象。这个时候,就必须依赖自己手动启动数据库服务。报错信息如下:
2021-03-25 22:20:47
39
原创 docker(centos)安装vim工具
问题利用纯净的centos镜像起了一个容器,运行vim命令的时候,提示没有该命令?这都没有,太过分了吧!!!bash: vim: command not found解决[root@0f49e35e0a46 config]# yum install vim-enhancedLoaded plugins: fastestmirror, ovlLoading mirror speeds from cached hostfile* base: mirrors.aliyun.c..
2021-03-19 23:17:15
76
3
原创 超级简单的分布式调度转码平台设计方案丨蓄力计划
【导读】最近项目需要一个分布式调度转码系统,网上找了很多开源方案,都不是很合适,也可以说压根儿就没有。于是,自己不知天高地厚的手撸了一个。今天就来简单介绍一下这个系统的设计思路以及过程中遇到的一些问题。正文该平台可以划分为三层,架构组成请参考下图:第一层是接口层,使用Golang编写,用于解析公共API的Http请求。第二层是调度层,第三层是执行层关于sync.Map的Range方法的一点秘密在最开始的时候,我始终认为sync.Map的Range方法...
2021-03-13 23:54:41
1161
13
原创 通过添加公钥实现ssh免密登录服务器(authorized_keys、sshd_config)
1. 确认.ssh目录权限必须是700。地址:~/.ssh截图参考:2.确认authorized_keys文件权限必须是600。地址:~/.ssh/authorized_keys截图参考:3. 修改StrictModes属性默认StrictModes属性是 yes,需要修改成 no。地址:/etc/ssh/sshd_config截图参考:...
2021-03-10 22:41:43
204
原创 error: open /var/root/.ssh/id_rsa: permission denied
目录问题类似解决问题报错信息:error: open /var/root/.ssh/id_rsa: permission denied。具体日志信息:2021/03/09 14:28:08 main.go:240: clientConfig: &{{<nil> 0 [] [] []} [] <nil> <nil> [] 0s}2021/03/09 14:28:08 main.go:242: error: open /var/r..
2021-03-10 22:02:37
60
原创 一个非常好用云转码流媒体平台丨蓄力计划
目录前言正文一、基本信息二、安装方式三、功能介绍四、存在问题前言直播场景一般都是即时消息,包括音视频数据和聊天消息。如果没有云端录制或者本地录制,特别是音视频数据,可以认为是稍纵即逝的。聊天信息还有一定有效器的聊天记录。暂时先不考虑录制,录制会在别的文章里有介绍,今天主要是介绍把录制好的视频文件上传到转码平台,为后续的点播流程服务的相关内容。正文今天就给大家介绍一个超级好用的云转码平台——express-ffmpeg。一、基本信息对应的官网地址:https
2021-03-06 12:34:14
2188
8
原创 《Electron高级》系列-总览
目录案例一案例二案例三【导读】欢迎大家阅读《Electron高级》技术专栏,本专栏结合Electron底层源码和工作原理介绍了一些项目中比较常见的突出问题和案例。 其中,每个案例从不同角度都提出了尽可能多的解决方案,文笔流畅,内容充实,且不乏趣味性。欢迎大家订阅分享,评论留言+点赞关注!案例一Electron解决闪屏问题的完美方案及其探索过程(上)Electron解决闪屏问题的完美方案及其探索过程(下)案例二深入浅出解决Electron窗口置顶失效的...
2021-02-28 22:34:17
97
原创 Electron解决闪屏问题的完美方案及其探索过程(下)
其实,我之所以能够想到是显卡的问题,还跟运维同学反馈的一个现象有关系。我当时正在远程排查这个问题,我始终都没有触发闪屏现象(自己认为如此)。本来以为和自己修改了一些系统配置有关系,避免了闪屏问题的发生。但是,事实上,闪屏问题已经发生了,我没有发现而已。这里,你可能会疑惑,闪屏多么明显的现象,你怎么会没有发现呢?问题就出在这里!!!
2021-02-25 21:07:36
129
原创 ERROR Could not load dotfile.
【导读】 编译Electron源码,对我而言,再常见不过的操作,应该不会出问题。但是,后来我发现:自己轻敌了 ^_^从中我也认识到,任何知识都有自己不可预见的深度!如果你甘于浅尝辄止,那么在同一个问题上,你可能永远有数不清的问题。
2021-02-24 22:28:59
68
原创 error: function has internal linkage but is not defined
问题:error: function *has internal linkage but is not defined解决:去掉头文件中的 static 关键字声明。原因:参考链接:https://stackoverflow.com/questions/51070909/c-function-has-internal-linkage-but-is-not-defined...
2021-02-24 08:50:15
150
原创 深入浅出解决Electron窗口置顶失效的问题
前言基于Electron开发客户端经常会遇到置顶的需求,那么Electron能不能实现类似的功能呢?或者说有没有类似的API接口呢?正文Electron果然不负众望,不错,我们捡到了一个大便宜,那就是Electron自带了这样的API接口。我们不需要自己从底层封装方法来实现这个功能(这样的话,我们大概率就需要编译源码了,后面的文章很多会涉及到源码编译,可能唯独这篇不需要^_^)。Electron窗口 BrowserWindow 类有一个 alwaysOnTop 属性,是用来设置窗体是否置
2021-02-18 12:36:59
359
原创 Mac:was built for newer OSX version (10.15) than being linked (10.14)
ld: warning: object file (/var/folders/r5/7b3lfd015v53ddp05qpjwcdh0000gn/T/go-link-507589565/000007.o) was built for newer OSX version (10.15) than being linked (10.14)ld: warning: object file (/var/folders/r5/7b3lfd015v53ddp05qpjwcdh0000gn/T/go-link-...
2021-02-17 10:21:40
138
原创 C++面试常见问答题看这三篇文章就够了(下)
前言《C++面试常见问答题看这三篇文章就够了》的上篇和中篇主要是理论知识的问答,下篇的重点则是代码问答题类型。正文1.程序段的执行结果是:#include <iostream>using namespace std; void fun1(int &x) { x++;} void fun2(int x) { x++;} int main() { int abc = 13; fun1(abc); printf("%.
2021-02-14 12:10:15
220
1
原创 Electron解决闪屏问题的完美方案及其探索过程(上)
前言最近,PC客户端遇到了一个问题,屏幕共享的时候会导致闪屏问题,不管是本地还是拉流端,整个电脑屏幕都会开始闪屏。正文刚听到运维反馈这个问题的时候,十分蒙圈,怎么还能又如此奇葩的问题,如果是摄像头的视频流在推和拉时都是正常的,为什么屏幕分享流就不正常了呢?于是开启了我漫长的探索之路!后来的经历验证了那句古话——路漫漫其修远兮,我将上下而求索。尝试一自然而然,想到了两种媒体流的区别,最直观的想法就是和编码格式有关系。因为屏幕分享流的视频编码格式是VP8,而普通视频流的编码格式...
2021-02-13 12:54:11
266
2
原创 教你如何用Golang+FFmpeg哄女朋友开心【珍藏版】
目录前言正文party 1为女朋友吹的牛买单party 2抖音特效不够用,自己来加party 3让女朋友突破微信的限制最后前言本人其实非常内敛,不太爱炫耀自己的感情故事,奈何CSDN推出了相关主题的征文活动,我都有些迫不及待的要动笔了。正文经常听到女同学和女同事抱怨,说程序猿不懂得浪漫,时间久了,仿佛我们程序猿也慢慢接受了这样的标签。其实,只要我们有一个有想法的心,就能创造出属于我们程序猿的浪漫。这种浪漫不一定要惊艳四座、不一定要轰轰烈烈,但是却实实在
2021-02-09 21:05:12
2245
7
原创 搞服务器开发竟不知道宝塔为何物,有点说不过去呀!
首次进入官网会提示安装必要的软件,一般有两种方式一种是LNMP,一种是LAMP,官方推荐是LNMP方式。本人选择安装默认模式,会出现如下界面:
2021-02-05 21:49:01
121
1
原创 查看linux系统版本命令全集
目录前言正文方法一方法二方法三方法四前言查看linux系统版本的命令都有哪些?今天我们就来看一看。正文方法一命令:cat /proc/versionCentOS系统运行结果:Linux version 3.10.0-1062.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP
2021-02-04 08:50:26
138
原创 流媒体协议系列之RTMP丨蓄力计划
RTMP一、总体介绍RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。RTMP工作在TCP之上,默认使用端口1935。工作原理:RTMP 的 message 会切分为 n 个 chunk,再通过TCP协议传输。为什么 rtmp 基于 tcp 协议,tcp 协议已经有化整为零的方式, rtmp 还需要将 message 划分更小的单元 chunk 呢?分析原...
2021-01-29 20:36:59
151
2
原创 音频格式之Monkeys Audio(APE)
目录前言正文APE简介APE特点APE格式实战场景参考文献前言导读:今天给大家介绍一种常用的无损音频压缩格式——APE,现在很多原声音乐网站大多使用这种编码格式。正文APE简介Monkey'sAudio,简称 APE,是一种免费和强大的数字音乐压缩格式。不像其他一些方法,如mp3,ogg,或lqt一样,一味的舍弃质量以节省空间。APE完全复制你录制音乐的音频数据信息,这就意味着它听起来总是和原声一模一样,能够100%复原原始音频效果,是...
2021-01-22 21:32:28
92
2
原创 记录第一次参加CSDN博客之星评选(2020)
大家好,我是CSDN博客专家Data-Mining。感谢各位一直以来的支持,让本人有幸入围CSDN 2020年博客之星TOP200。欢迎大家为我投上一票(PS:每天都可以投)https://bss.csdn.net/m/topic/blog_star2020/detail?username=liuzehn开篇非常开心自己通过CSDN博客之星的海选,进入了大名单,序号是54,如果想投票,可以点我。(但是印象中,开始时候的序号是53,可能是官方为了防作弊,中途故意修改的)。下面是我收.
2021-01-19 20:22:25
173
5
原创 Go判断结构体类型是否为空(nil)
目录前言正文前言使用任何编程语言都会遇到判空的问题,那么Golang如何判空呢?说真的,这种方式我还是很意外的。正文说到Golang的判空机制,确实刷新了我的认知,多少有些丑 ^_^,特别是对于自定义的结构体类型,并不是简单的与 nil 做比较。直接上代码:package main import ( "fmt")type Person struct { Name string Age int}func main() { var one Per.
2021-01-16 11:21:43
866
4
原创 Electron理论知识 16 - Electron 11.0 高亮发布
目录前言正文安装方式更新变化突出特点重大变化API变更版本计划前言时隔三个月,2020年11月17日,Electron终于推出了新版本——Electron11.0.0发布啦!正文按照三个月一迭代的基本规律,Electron如期推出了11.0.0版本!上个版本10.0.0是八月份推出的,新版本包括升级Chromium到87,升级V8到8.7以及Node.js的升级到12.18.3。同时,增加了对Apple芯片的支持和常规改进措施。安装方式如果你想尝试El
2021-01-15 09:45:54
84
原创 C++面试常见问答题看这三篇文章就够了(中)
构造函数为什么不能声明为虚函数?1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功。编译器无法知道对象的实际类型,是该类本身,还是该类的一个派生类,或是更深层次的派生类。无法确定。2 虚函数的执行依赖于虚函数表。而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初 始化,将无法进行。 析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。析构函数为.
2021-01-13 08:44:28
349
1
FinalShell-mac.zip
2020-05-13
一段静音的音频文件(mute.wav)
2021-02-02
544*960-yuv420p.yuv(视频原始数据文件)
2020-07-10
一段静音的mp3文件(mute.mp3)
2021-02-02
最新的config.guess和config.sub(2017)
2017-11-16
DXVAChecker_4.2.1_Setup.exe
2020-04-30
FinalShell-win.zip
2020-05-13
ape格式音频demo.ape
2021-01-23
Android程序反编译工具套装
2020-12-03
electron哈希校验和计算工具(专业版)
2020-11-28
checksum-validator(V1.1.6)
2020-07-28
DLL动态库多级调用
2017-05-26
JDK-1.8-windows-x64.zip
2020-06-05
depends.rar
2020-04-03
495个必须知道的C语言问题
2014-10-31
Data-Mining的留言板
发表于 2020-01-02 最后回复 2020-07-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝