2024-09-30 20:31:22
当我们像在仅需要在局域网内进行直播这种情况时,就可以自己动手搭建极简的直播服务。
会写一点点 nginx 配置。
用于流媒体传输的协议,最初用于 Flash 播放器,也可以用于直播。
本教程中,我们将用该协议将直播流推送至 nginx 服务器。
基于 HTTP 流媒体传输协议,它将流分割成多个文件传输,对于直播流,以 m3u8 文件为播放列表,以 ts 文件为视频。
本教程中,该协议用于向浏览器传输直播流。
nginx 本身并不支持 RTMP 协议,需要把 nginx-rtmp-module 模块编译进 nginx。
从 nginx.org 下载 nginx 源码,解压后进入目录。
然后克隆 nginx-rtmp-module 源码:
|
|
编译并安装 nginx:
|
|
最后 /usr/local/nginx/sbin
添加到环境变量 PATH
中。
一般浏览器不能直接播放 HLS,这里采用 DPlayer + hls.js 用于播放 (因为好看)。
从 这里 还有 这里 下载 DPlayer.min.js
和 hls.min.js
到 /usr/local/nginx/html/
。
将 /usr/local/nginx/html/index.html
改为:
|
|
打开首页就是播放器。
将 /usr/local/nginx/html/conf/nginx.conf
改为:
|
|
关于 nginx-rtmp-module 更多配置见 wiki。
不用担心 HLS 的 ts 文件会无限增加下去,nginx-rtmp-module 会删除老的 ts 文件。
启动 nginx:
|
|
这里推流使用 OBS Studio。
在“设置”-“直播”中填写“服务器”为 http://localhost:8080/live
,“推流码”填自己想要的,但 index.html
中的 example
要改成这个推流码,不然没法播放直播。
配置好来源就可以开始直播啦~
打开 http://localhost:8080
就可以看到直播了,大概会有 10s 左右的延迟。
正式使用时,请根据自己的需求更改。
过去,学校里的大型表演,能到现场看的人数有限,不是所有人都能到现场看,而且没有直播。再过不久有一个歌唱比赛(我当然去参加海选了,只不过没选上),我想搭建一个直播服务去直播这些表演,于是就有了这篇教程。因为能否直播还要征得校方同意,所以不一定能用得上…
2024-08-15 15:25:12
Material You 加入到 Android 12 中,其中包括了动态配色。
用户可以直接在系统层面上很方便地改变系统配色和支持动态配色的软件的配色。开发者也不需要再开发配色功能。
(因为不同厂商把选项名改得不一样,所以很难明确写出选项的名称)
可以单独选择配色,也可以从壁纸上提取出颜色。
用了 Android 13 一整年了,都不知道有这个功能 😂 最近用 Flutter 开发词典的时候才了解到。
2024-08-11 12:40:00
你的电脑可能没有麦克风,需要的时候,又不想买一个麦克风,这时候就可以把你的 Android 当作麦克风来用。
Audio Source 是一个用 ADB 将 Android 麦克风的输入转发到 PulseAudio 进程的工具。
sudo pacman -S android-tools
安装,安装后需重启)可在 Releases 页面下载,或在 IzzyOnDroid F-Droid Repository 下载。
安装后,点开软件,如果没看到 UI 很正常,这个软件就是没有 UI 的… 然后要授权软件麦克风和通知权限,如果授权权限的弹窗闪退,可以在 设置 里面授权软件权限。
下载 audiosource 脚本并授权可执行权限。
|
|
用 USB 数据线连接手机和电脑,在 开发者选项 里开启 USB 调试模式。
用 adb 查看一下连接的 Android 设备,这时手机会弹出授权窗口,点授权就完事了。授权完再运行一下这个命令,看看是否正常。
|
|
运行 audiosource 脚本,你的 Linux 就有麦克风啦 :)
|
|
Audio Source 是我意外在 F-Droid 找到的,F-Droid 上的宝藏很多 :)
2024-08-10 20:59:35
yt-dlp 是一个功能强大的命令行音频、视频下载器。yt-dlp fork 自基于 youtube-dl 的已不维护的 youtube-dlc,具有额外的功能和问题修复。
yt-dlp 不仅支持 YouTube,还支持一千多个网站。除了下载音频、视频,还能下载封面。
可以通过 pip 安装,也可以通过你所用的系统的包管理器安装,还可以到 release 页面下载可执行文件。
|
|
直接加链接即可。
|
|
可以下载一整个播放列表的视频。
|
|
还可以下载 m3u8。
|
|
列出视频可以下载的格式,也列出了传输协议、格式、分辨率、帧率、大小等信息。
|
|
yt-dlp 默认会下载分辨率、帧率等最好的视频,如果要指定相应的分辨率、帧率,要用 --format-sort
/-S
参数。
下载分辨率不优于 720p 的视频,也就是下载 720p 的视频。
|
|
指定视频的容器格式。
|
|
用 ,
连接多个限制条件。
|
|
嵌入元数据,默认不嵌入。
|
|
嵌入封面,默认不嵌入。
|
|
嵌入字幕,默认不嵌入。仅支持 mp4、mkv、webm 容器的视频
|
|
分离出视频中的音频。
|
|
指定音频的格式和品质,品质取值 0-10,0 最佳,10 最差,默认为 5。
|
|
嵌入元数据。
|
|
列出所有封面。
|
|
下载封面,同时会下载视频。
|
|
下载所有封面,不会下载视频。
|
|
写不出什么结语了(liao) :(
2024-08-09 17:56:10
Dict_reader 是一个用于读取 mdict 词典的 Dart 语言库,支持 MDX/MDD 格式。
README 提供了几个示例,本文提供更适合生产环境的示例。
|
|
在生产环境中,会用到搜索单词、查看单词的功能,而且必须要高效,这时候轮到 SQLite 数据库出场了。在第一次读取词典时,用 Drift 存储少量数据,用于之后快速地搜索和查看。
|
|
|
|
然后生成 database.g.dart 文件:
|
|
这个示例不适合直接放到生产环境中,稍微改一下就可以了。
Dict_reader 主要是翻译 mdict-analysis。我对 Dart 不是很熟,在翻译过程中经常去问 gpt-4o-mini 以及 SearchGPTool,有帮助也有捣乱,最终还是花了四天时间完成。
Dict_reader 并没有完全翻译,而且挑选了最重要、有意义的部分翻译,也基于我自身考虑(我手头没有 mdict 格式 3.0 版本的词库),例如没有校验、不支持 lzo 压缩、不支持 mdict 格式的 3.0 版本,但不影响一般使用。