vooidzero
vooidzero
目前进度: - [x] mkv muxer - [x] fmp4 (mp4 dash) demuxer - [ ] 重构现有代码 - [ ] 优化视频选择页面 - [ ] 添加“下载历史”模块 - [ ] 添加“设置”模块 明年春节之前都不一定能做完...
给代码写文档,那是一件相当痛苦的事情,我可不想去写。而且我大抵是不会接受 Pull Request。 要继续开发加 feature(比如 dash fmp4 下载)的话,我也肯定要重构一些东西。 --- 目前的代码,我就给个宏观结构描述吧:  TaskCellWidget 包含 AbstractDownloadTask(DownloadTask.h/cpp)对象。各种 DownloadTask 类实现具体下载以及可能的 remux 任务(目前只有直播要 remux,相关内容在 Flv.h/cpp),DownloadTask 提供一些公共接口来获取标题、下载进度等信息。 输入链接的解析在 Extractor.h/cpp,从链接中提取出视频 ID 号,然后获取里面包含的所有视频,如果有付费/大会员,还要查询用户是否有权限。解析成功后弹出 DownloadDialog 对话框让用户选择要下载的视频和下载位置。因为获取视频可用画质的 api 是单个视频的,而极端情况下如柯南会包含上千个视频,全部去请求不现实,所以在 DownloadDialog...
B 站 web 端直播使用 HLS (fmp4) 的条件是: 1. `playurl_info.playurl.stream` 包含 `protocol_name == 'http_hls'` 且 `format_name == 'fmp4'` 的对象 2. `playurl_info.playurl.p2p_data.p2p_type in [P2PType.HLS_BILI, P2PType.NONE, P2PType.HLS_NOT_P2P]` 下面的例子默认使用 `http_stream.flv`,因为 `p2p_type` 不满足条件 ```json {...
## B 站 m3u8 ``` #EXTM3U #EXT-X-VERSION:7 #EXT-X-START:TIME-OFFSET=0 #EXT-X-MEDIA-SEQUENCE:289020803 #EXT-X-TARGETDURATION:1 #EXT-X-MAP:URI="h288595070.m4s" #EXTINF:1.00,38db7|56301fef 289020803.m4s ... #EXT-X-BILI-PREFETCH:URL="[0-9]+.m4s?prefetch=1" ... ``` `#EXT-X-MAP:URI="h288595070.m4s"` 指出初始化片段 (ftyp + moov) 为 `h288595070.m4s` `#EXT-X-MEDIA-SEQUENCE:289020803` 指出列表中第一个片段的序号为 `289020803.m4s`,该片段以关键帧开始。(B站直播关键帧间隔的一个典型值是 3s,而切片长度为 1s,所以并不是每个片段都有关键帧) `#EXTINF:1.00,38db7|56301fef`...
目前的难题在于输出文件无法让播放器(Potplayer 和 VLC)达到理想中的“边下边看”效果。 先说下当前直播 FLV 下载的“边下边看”效果: - Potplayer 很理想,进度条会一直刷新总时长; - VLC 进度条的总时长会固定为打开那一时刻已下载的时长,但是能够一直往后播放,左右键后退快进也能用 对于视频 FLV 下载,由于视频时长是确定的,Potplayer 和 VLC 都能满足“边下边看”。 而 fmp4 的情况是: - VLC 可以一直往后播放,其行为和 FLV 的情况相同; - Potplayer 只能播放到打开那一时刻已下载的时长。具体点,Potplayer 打开视频时...
[HTTP2 error after 1000 request](https://github.com/curl/curl/issues/3750)