这是一款iOS播放器,最主要的功能就是同屏播放多个直播。 人之初,性本D,誰でも大好き! 项目正在开发中...
当前版本0.1
feature:
- BiliBili 拉流逻辑
- hls播放组件
- Youtube 拉流逻辑
- Hibiki Radio 拉流逻辑
- NicoNico 拉流逻辑
- LineLive拉流逻辑
- 录屏
- 弹幕
-
首先获取真实房间号 GET
https://api.live.bilibili.com/room/v1/Room/room_init?id=${roomId}
这里需要说明的是为什么会存在一个真实房间号。其实主要是B站大主播直播间通常是一些短房间号,需要通过请求获取真实的长房间号。其实就是类似手机长号短号的情况。 -
获取流 GET
https://api.live.bilibili.com/api/playurl?cid=${realRoomId}&otype=json&quality=0&platform=web
-
拉取流
-
HTML请求获取页面配置 GET
http://live2.nicovideo.jp/watch/lv${videoId}
-
HTML解析 使用选择器
$('#embedded-data').attr('data-props')
获取配置JSON -
创建WebSocket 通过第二步获取到的JSON中的WebSocket URL
site.relive.webSocketUrl
和广播IDprogram.broadcastId
创建WebSocket。 -
发送请求 创建成功WebSocket之后发送JSON
{
type: 'watch',
body: {
command: 'getpermit',
requirement: {
${broadcastId},
route: '',
stream: {
protocol: 'hls',
requireNewStream: true,
priorStreamQuality: 'high',
isLowLatency: true
},
room: {
isCommentable: true,
protocol: 'webSocket'
}
}
}
}
- 接收数据 发送请求JSON成功之后开始接收数据。收到的数据为JSON格式
5.1. 收到心跳包 当WebSocket收到对方的包的type为ping时,发送pong包作为心跳。发送的pong包格式为
{
types: 'pong',
body: {}
}
5.2. 收到非心跳消息包
如果body.command
为servertime
发送JSON
{
type: 'watch',
body: {
command: 'watching',
params: [${broadcastId}, '-1', '0']
}
}
如果body.command
为currentstream
即可获取流地址body.currentStream.uri
- 打开直播页面,加载Javascript引擎 var config = JSON.parse(ytplayer.config.args.player_response) 得到的结果中config.streamingData.hlsManifestUrl即播放地址
- 请求VideoID
GET
https://vcms-api.hibiki-radio.jp/api/v1/programs/${accessID}
请求中需要添加HTTP头域
X-Requested-With: XMLHttpRequest
返回JSON中的episode.video.id即为videoID
- 请求播放地址
GET
https://vcms-api.hibiki-radio.jp/api/v1/videos/play_check?video_id=${videoID}
同样需要带上头域
返回JSON中的"playlist_url"为播放地址