通过逆向口袋48(Pocket48)的API,每个成员都有固定的userId,通过userId查询
https://pocketapi.48.cn/live/api/v1/live/getLiveList
获得一个带有直播信息的json数据结构:
1 | { |
avatar:成员头像
teamlogo:对应队伍的logo
pfurl:暂时未知
ctime:开播时间
liveId:直播ID(唯一)
拿到liveId后去请求:
https://pocketapi.48.cn/live/api/v1/live/getLiveOne
会有以下三种情况:
- 如果成员正在直播,返回一个rtmp直播流
- 如果成员直播结束,但录播还没有生成,则不会请求到任何结果,只会提示“回放生成中”
- 如果直播结束同时录播也已经生成,则会返回一个:msgFilePath是直播弹幕,口袋48的弹幕很奇怪,是用歌词的LRC进行弹幕储存的,时间是从成员直播开始一直到结束的所有弹幕,配合上面的ctime可以对应出具体的时间
1
2
3
4{
"msgFilePath": "https://source.48.cn/live/lrc/20211031/e1952ed0-d099-46e5-9491-bfa3172bf41d.lrc",
"playStreamPath": "https://cychengyuan-vod.48.cn/6431/20211031/cy/661663746327646208-ni2tfgt0b60hsemsmza9.m3u8"
}
下载录播也很简单,只需要ffmpeg即可:
./ffmpeg -i 找到的m3u8流 -c copy /path/to/save/video.mp4
如果成员没有开直播而只是开了电台的话,则视频的所有画面都会是成员暂时离开,这是正常现象
接下来就可以做切片了,不过在切片的时候需要注意一下:大部分成员的直播弹幕都是720p 30fps(有少部分是1080p 30fps,还有极少数是900p 24fps)
就先写到这吧,以后想到啥了就补充