创建一个 Roslyn Analyzer

Roslyn 是新一代的开源 C#/Visual Basic 编译器,Visual Studio 2015 的 C#/Visual Basic 开发环境就基于 Roslyn,TypeScript 和 XAML 编辑器也使用了 Roslyn 提供部分支持。

基于 Roslyn 可以使用 C#/Visual Basic 快速创建 Analyzer 和 CodeFix,针对 C#/Visual Basic 的 Analyzer 需要分别编写但不一定要使用对应语言。成品可以直接打包成 NuGet package 加入目标项目的 Reference 里,使用非常方便。

本文以非著名二进制序列化格式 MessagePack 所面临的问题,编写一个简单的 Analyzer 进行解决。

Read More

FLV 文件格式解析

FLV 是 Adobe 推出的一个视频容器格式,主要用于 Flash 的在线视频播放。虽然说 Flash 已经日薄西山,但是还是有很多直播平台选择 Flash + FLV 进行在线播放。

本文希望能够通过正常人类的语言,较详细地描述 FLV (内含 AVC + AAC) 的文件格式。

Read More

Windows Runtime 播放自定义网络媒体

我的新项目,インターネットラジオステーション<音泉> 的第三方客户端,开发代号 Onsen Tamako,已经到了收尾的时候了。

音泉有个特点就是屏蔽非日本 IP,日本国外用户虽然能登录官网并且查看各自信息,但是想要收听或者收看广播那是不行的,服务器会给你 403。

但是在一个月前开始这项目时进行的测试发现,音泉会被国产视频网站几百年前就玩烂了的 X-Forwarded-For 给迷惑。

Read More

Windows Runtime 禁用 HTTP 请求的硬盘缓存

豆奶直播换上了新的自制的 FLV 分离器,没错,我又造了一个新轮子。(原来是用的 FFMpeg)

斗鱼的高清直播流是直接 HTTP 流式传输 FLV,所以就简单的用 Windows.Web.Http.HttpClient (MSDN) 来下载数据了。于是新问题是我突然发现 App 一直在向硬盘写入文件,用资源管理器一看原来是 WinINet 正在把 FLV 文件缓存到硬盘里。

Read More

UWP 的视频后台播放

Windows App 和 iOS App 一样,只有前台 App 会保持运行,切换到后台的会自动被系统暂停。Win10 Desktop 可以窗口化运行 Windows App 了,这个限制就被改成了最小化1 的 App 会被暂停,只要窗口还在,没有焦点也能继续运行。

可是这仍然解决不了视频播放器的问题,一旦被最小化,视频就会暂停播放。于是 Win10 Desktop 提供了 API,让 App 最小化之后,视频的 声音2 还能继续播放。

Read More