用 Blazor WebAssembly 和 Web Socket 写一个网页语音聊天室

作者:V君 发布于:2022-12-2 15:46 Friday 分类:我的应用

TL;DR [ 下载 ] [ 源代码 ]

用法:
 1. 下载 SimpleWebChat.Pre-Release-2.7z 解压,运行 SimpleWebChat.ConHost.exe
 F. 修改配置文件 config.json 中的 ListenPrefix 可以监听外部请求,支持 HTTPS
 A. 这次更新在原来的文字聊天基础上增加了两种语音聊天

文字聊天:
 1. 访问首页,点击【Text chat】按钮进入
 2. 输入昵称,点击【Connect】按钮或者按回车键,进入聊天室
 3. 输入内容,点击【Send】按钮或者按回车键,发送消息

一对一语音聊天:
 1. 访问首页,点击【Voice chat】按钮进入
 2. 输入昵称,点击【Open Microphone】按钮,允许使用麦克风
 3. 使用拨号盘或者在文本框输入号码,点击【→】按钮
 4. 在另一个设备使用拨号盘或者在文本框输入相同的号码,点击【→】按钮,开始语音聊天

多人语音聊天:
 1. 访问首页,点击【Voice meeting】按钮进入
 2. 输入昵称,点击【Open Microphone and Connect】按钮,允许使用麦克风,开始多人聊天

最后是固定的扯扯环节

凭兴趣使用零零散散的业余时间开发,难免会有各种照顾不到的情形,有问题就刷新了重试,有能力的就自行调试(欢迎反馈问题❌)

访问麦克风和回放的实现是纯 JS 实现的,因为 Blazor 没有封装这些功能,而且不支持 safari 浏览器,因为写死了用 OPUS 音频编码 增加了 MP4A 音频编码,现已支持较新版本的 safari 浏览器 _(:з)∠)_

好啦,这就是这次的 Hello world 级的 语音聊天 案例 (←美其名曰),顺便预告一下土炮云已经实现(PC端浏览器)拖放排序,等把播放队列做出来再发表吧

标签: C# Web技术 前端工程 WebSocket .NetCore

评论(0) 引用(0) 浏览(63)

使用 Blazor 为土炮云增加 Web 界面,定制歌单已可用

作者:V君 发布于:2022-10-29 14:05 Saturday 分类:我的应用

TL;DR for 立即想拿来用的人:[ 下载 | 源代码 ]

用法: 下载 FNZCM.ConHost.7z 解压得到一个 EXE 和 JSON 配置文件,然后把 wwwroot.zip 下载放到解压出来的两个文件边上,双击 EXE 看看有没有错误, 其余用法参见首发的土炮云[ 别再忍受网抑云欺压了,用起外网IP来搭建自己的私有云音乐吧 ]。

这次的界面调整了专辑(❌Disc)列表布局,做了个卡片列表,还做了个按标题搜索(其实搜索还可以再做细一些),最后就是歌单管理功能了,做了勉强能用的上下移动顺序调整按钮,谁让网页拖动实现这么难呢 °皿°

简单扯一扯缘起

上一次发布的土炮云内置 Web 界面只能使用固定的 m3u 歌单,不爽,那就加个接口吐出元数据集,然后用 Blazor 写个界面,配合 Blob 实现导出定制歌单。

这两次发布时间间隔有亿点长,主要原因有俩,对 Blazor 还比较生疏,外加一直有零碎修改,迟迟没有让自己满意,认为拿出来丢人。又到月底了,得刷存在感,那就告一段落发出来吧

简单扯一扯开发感想

首先点名致谢 KeudellCoding 的 Select2 封装项目,参考这个项目受益匪浅,让我有参照地把需要的 Bootstrap 组件封装起来。(后来用不上了依旧下代码做纪念❌)

针对解析大型(?) JSON 时,界面冻结的问题从爆栈上找到个流式读取的方法,期间定时松绑(?)一下脚本,这样界面就不卡死了。

起初还用了前端路由,发现这东西太难驾驭,后来就索性不动 URL 了,把控件状态写进 localStorage 里,页面载入的时候还原,这也还凑合吧。

最后我来帮懒得吐槽的家伙吐槽一下我还在用老掉牙的 HttpListener ,前端都先进到在浏览器跑 C♯ 了,而后端虽然用了 Core 但还在用上古时期的方式。我只能说这就是习惯了吧,实际上改成 Core 的 Host 方式看起来也问题不大,甚至还能兼容 IIS 呢。

最后我只能说:别想这么多。这只是个玩具项目,首先要能满足自己,其次如果能给有需要的人帮上忙,我就偷着乐了。

标签: 软件开发 C# HTTP Web技术 前端工程 .NetCore

评论(1) 引用(0) 浏览(73)

用C♯了写个传声筒——经由局域网在另一台电脑上播放声音

作者:V君 发布于:2022-2-10 22:39 Thursday 分类:我的应用

TL;DR for 立即想拿来用的人:[下载 |源代码 ]

在发送端静音,然后用命令行参数启动
 AudioNTR.exe 操作 参数…
示例
 AudioNTR.exe receiver 2333
 AudioNTR.exe transmitter 192.168.1.2 2333
只在两边都是 Windows 10 的环境下使用过,不确保其他环境也能用…
这玩意的全称是 Audio Net Transmitter Receiver 不要想歪了))

简单扯一扯缘起

在家中电子垃圾堆翻出一块焊满电容的独立声卡,是 PCI 插槽的,又找出一块有 PCI 插槽的主板,直推 XM4 一直当着播放机单独用,效果十分满意。但也有些毛病,经常出现主力机的声音(音箱)听不到或者听不清的情况。偶尔还会有发出声音的网页开着,不注意就很尴尬……

那时候首先去咕狗搜「Play audio on another computer」找到一堆现成的收费软件。(当然在做出来之后又发现了一堆开源的实现…)由于前些年摸过音频处理,知道有 NAudio 这个库在 NT6+ 可以轻松地截取、回放声音,于是就有了这个小玩意。

简单扯一扯开发感想

要狠狠地赞 NAudio 这个音频库,基本上想做的事情都在它的预期范围内,零造轮子,把组件连接起来就能用!

最后配一个简单的不能再简单地原理图

点击查看原图

标签: 软件开发 C# TCP 音频 .NetCore

评论(0) 引用(0) 浏览(224)

做了个基于 VCommon 的 ASP.NET Core 项目案例

作者:V君 发布于:2021-7-19 15:11 Monday 分类:折腾手记

前言

这是啥?简单用一句话来讲这就是一个山寨(简化?)版的 ABP 项目,用来学习 WebAPI 后端的完整流程以及做些个人项目。这几天抽了许多时间来摸 ASP.NET Core 尝试把 VCommon 用起来。进展还算顺利,那就淡定地水一水吧。

TL;DR

源代码:[VcommonCore] [本项目]
快速上手:
1)将 VcommonCore 和本项目克隆到同一个文件夹,打开本项目尝试编译
2)在配置文件按实际情况配好 MySQL 和 Redis
3)在包控制台用 update-database 命令创建数据库
4)如果没有异常,那就可以按 F5 跑起来看 Swagger 了
x)目前只有 SaaS 的基础功能。

TL;DR之后就是折腾感想了,主要还是和传统 ASP.NET 的差别以及适配

感想其一:配置文件。传统的 ASP.NET 只要在 Web.Config 配了连接字符串或者 AppSetting 就可以在任意位置使用 ConfigurationManager 来获取。不过这一套在 Core 已经行不通了,于是我从 ABP 项目抄来读取配置文件的实现,顺利地兼容了 EFCore 命令行工具和 ASP.NET Core 环境。EFCore 的方式完全照搬,而 ASP.NET Core 环境就得自己实现任意位置访问了,把配置对象注册到 IoC 容器中去!

感想其二:中间件。由于一开始就想绕过 ASP.NET 繁琐的生命周期,于是选用了 HttpModule 来把请求按约定的路径拦截下来并做出处理。换到 Core 之后,它没有 HttpModule 了,咋办?咕狗呗,找到微软的迁移文档,给 VCommon.VOpenApi 做了个中间件,从而平滑过渡到 Core。

感想其三:HttpContext/Session/RequestScope。传统的 ASP.NET 可以从任意位置通过静态成员获取当前上下文,然鹅转换到 Core 之后 HttpContext 的静态成员 Current 没有了,咕狗回来发现大伙们都用依赖注入的方式把上下文注册到 IoC 容器中。由于 HTTP 的无状态性,直接把上下文注册到容器是会乱套的,这时候就需要改变 UnityContainer 的使用姿势,用起派生容器了。插一句,或许有的人看不起 UnityContainer 说其老旧性能低下,但它自带的接口拦截功能还是很香的,它不需要把业务方法定义成虚方法,性能也还可以接受。在 WebAPI 请求处理的中间件调用业务方法之前,从根容器派生出子容器,将其作为 RequestScope 来使用,把上下文以及依赖上下文的组件一起注册进去,这样就不会乱套了。

最后,埋个伏笔(?)啥时候不咕了,那就用 VCommon 来做一个自己的博客吧!

标签: 软件开发 C# ASP.NET .NetCore

评论(0) 引用(0) 浏览(339)

Powered by emlog 去你妹的备案 sitemap