Electron 开发音视频
废话不多说,咱直接进入正题!
创建 Electron 项目
前提条件
在使用Electron进行开发之前,需要安装 Node.js。
要检查 Node.js 是否正确安装,请在您的终端输入以下命令:
node -v
npm -v
脚手架创建
lectron 应用程序遵循与其他 Node.js 项目相同的结构。
首先创建一个文件夹并初始化 npm 包。
mkdir my-electron-app && cd my-electron-app
npm init
然后,将 electron 包安装到应用的开发依赖中。
npm install --save-dev electron
最后,您希望能够执行 Electron 如下所示,在您的 package.json 配置文件中的 scripts 字段下增加一条 start 命令:
{
"scripts": {
"start": "electron ."
}
}
start命令能让您在开发模式下打开您的应用
npm start
在 main.js 文件中的 createWindow 的函数中加入此代码可以打开控制台
mainWindow.webContents.openDevTools()
开发音视频
前提
引入 anyRTC 提供的 web RTC SDK
本地引入:官网下载
CDN 引入:
<script src="https://ardw.anyrtc.io/sdk/web/ArRTC@latest.js"></script>
npm 引入:
npm i ar-rtc-sdk -S
构建页面(简易版样式没写)
<div>
<p>AppID</P>
<input id="appid" type="text" placeholder="enter appid" required />
</div>
<div>
<p>Channel</P>
<input id="channel" type="text" placeholder="enter channel" required />
</div>
<div>
<p>Uid</P>
<input id="uid" type="text" placeholder="enter uid" required />
</div>
<!-- 用户视频容器 -->
<div id="remote-playerlist" class="row video-group"></div>
JS 构建语音通话(引用了JQ)
// ArRTC client
var client;
// 存放音视频
var localTracks = {
videoTrack: null,
audioTrack: null,
};
// 存放频道用户
var remoteUsers = {};
// ArRTC client options
var options = {
appid: null,
channel: null,
uid: null,
};
// 查看 SDK 版本
console.log(ArRTC.VERSION);
// 检测麦克风
const Cameras = await ArRTC.getCameras();
// 检测摄像头
const Microphones = await ArRTC.getMicrophones();
if (Cameras.length || Microphones.length) {
options.appid = $("#appid").val();
options.channel = $("#channel").val();
options.uid = $("#uid").val();
// 加入频道
join();
}
async function join() {
//创建本地视图
const localplayer = $(
`
<div class="col-6" id="local_video">
<p id="local-player-name" class="player-name"></p>
<div class="player-with-stats">
<div id="local-player" class="player"></div>
<div id="local-stats" class="stream-stats stats"></div>
</div>
</div>
`
);
$("#remote-playerlist").append(localplayer);
// create ArRTC client
client = await ArRTC.createClient({
mode: "rtc",
codec: "h264",
});
// 用户发布
client.on("user-published", handleUserPublished);
// 用户停止发布
client.on("user-unpublished", handleUserUnpublished);
[
options.uid,
localTracks.audioTrack,
localTracks.videoTrack,
] = await Promise.all([
// join the channel
client.join(
options.appid,
options.channel,
null,
options.uid || null
),
// create local tracks, using microphone and camera
ArRTC.createMicrophoneAudioTrack(),
ArRTC.createCameraVideoTrack(),
]);
// play local video track
localTracks.videoTrack.play("local-player");
$("#local-player-name").text(`localVideo(${options.uid})`);
// 发布本地视频
client.publish(Object.values(localTracks));
}
// 远端用户发布
function handleUserPublished(user, mediaType) {
const id = user.uid;
remoteUsers[id] = user;
subscribe(user, mediaType);
}
// 远端用户停止发布
function handleUserUnpublished(user) {
const id = user.uid;
delete remoteUsers[id];
$(`#player-wrapper-${id}`).remove();
}
// 订阅远端用户发布的音视频
async function subscribe(user, mediaType) {
const uid = user.uid;
// subscribe to a remote user
await client.subscribe(user, mediaType);
if (mediaType === "video") {
const player = $(
`
<div id="player-wrapper-${uid}" class="col-6">
<p class="player-name">remoteUser(${uid})</p>
<div class="player-with-stats">
<div id="player-${uid}" class="player"></div>
<div class="track-stats stats"></div>
</div>
</div>
`
);
$("#remote-playerlist").append(player);
user.videoTrack.play(`player-${uid}`);
}
if (mediaType === "audio") {
user.audioTrack.play();
}
}
运行
npm start
打包
下载 electron-packager
npm install --save-dev electron-packager
在 package.json 文件的 scripts 加入
"packager_all": "electron-packager ./ anyrtc --all --out ./dist --overwrite --electron-version=11.1.1 --ignore=node_modules --icon=./assets/images/favicon.icos"
执行
npm packager_all
Electron 开发音视频的更多相关文章
- C++实现RTMP协议发送H.264编码及AAC编码的直播软件开发音视频
RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...
- Android开发音视频方向学习路线及资源分享,学完还怕什么互联网寒冬?
接触Android音视频这一块已经有一段时间了,跟普通的应用层开发相比,的确更花费精力.期间为了学习音视频的录制,编码,处理也看过大大小小的几十个项目.总体感觉就是知识比较零散,对刚入门的朋友比较不友 ...
- Android 音视频深入 七 学习之路的总结和资料分享
说个实话一开始我对基于Android如何开发音视频很迷茫,甚至对音视频开发都不是很明白,我看了Android 音视频开发入门指南 http://blog.51cto.com/ticktick/1956 ...
- Android开发 音视频开发需要了解的专业术语知识
前言 在摸索一段时间的音视频开发后,越来越发现这个坑的深度真是特别的深. 除了了解Android自带的音视频处理API以外,还得了解一些视频与音频方面的知识.这篇博客就是主要讲解这方面的专业术语.内容 ...
- 【Android 直播软件开发:音视频硬解码篇】
开篇 炙手可热,望而生畏的音视频开发 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,但是由于音视频开发涉及知识面比较广,入门门槛相对较高,让许许多多 ...
- WebRTC 介绍 (转)
google开源了WebRTC项目,网址是:http://code.google.com/p/webrtc/. WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单 ...
- C++静态库与动态库的区别
在日常开发中,其实大部分时间我们都会和第三方库或系统库打交道.在 Android 开发音视频开发领域,一般会用到 FFmepg.OpenCV.OpenGL 等等开源库, 我们一般都会编译成动态库共我们 ...
- 1.2、初识WebRTC
文章导读:本节内容,如标题所讲,“初识webrtc”.读完之后,我需要你能清楚三个问题:第一.真正的搞明白实时音视频在生产环境中的真实应用以及前景分析:第二.开发一个符合商业标准的实时音视频应用需要解 ...
- 使用Squirrel创建基于Electron开发的Windows 应用安装包
我们把自己开发的Electron应用发布之前,需要把app打包成简单的安装包,这样app更容易被获取,以此来发布我们的应用.我们可以参考Wix或其他的安装程序,但是对于Electron应用更好的打包程 ...
随机推荐
- bzoj1925 地精部落
神题! 地精部落 内存限制:128 MiB 时间限制:1000 ms 标准输入输出 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度 ...
- Golang学习(用代码来学习) - 第五篇
/** 并发控制:context的学习 */ func context_test() { PrintStartSeperator("context_test") ctx, canc ...
- react 的优点
1. 声明式开发 react 是声明式的开发方式,与之对应的是命令式开发方式.之前用jquery写代码的时候,我们都是直接操作dom,这种我们称为命令式的编程.命令式编程需要我们一点点的告诉dom,它 ...
- 流程自动化RPA,Power Automate Desktop系列 - 发布文档中心
一.背景 内网中有一个基于VuePress搭建的静态文档中心,但是每次修改后都需要重新Build一次才行,之前都是手动执行命令,现在可以基于Power Automate Desktop来创建任务了. ...
- mysql主节点down机后如何恢复操作
1 停机维护 (1) 先停止上层应用 (2) 检查backup和slave的中继日志是否已经完成了回放及gtid_executed保持一致 mysql> show slave status\G; ...
- 11 监控MySQL主从状态是否异常
#!/bin/bash source /etc/profile # 主从同步 # master:binlog # slave:relaylog # 写->master->binlog< ...
- 24、Keepalived高可用介绍
24.1.什么是keepalived: Keepalived 软件起初是专为 LVS 负载均衡软件设计的,用来管理并监控 LVS 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP ...
- hdu 6025 前缀 后缀 gcd
大致题意: 去掉一个元素能使这个数列的GCD最大为多少 分析: 我们求一个数列的GCD,是先求前两个元素的GCD,然后将这个GCD值在与下一个元素进行GCD运算.由此可知进行GCD运算的顺序对最终的结 ...
- Java实验项目二——小学生考试系统(简单四则运算)
Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建 ...
- 14个Java技术网站,程序员必备!
先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 程序员都是无师自通?这就有点胡 ...