https://github.com/cmst0us/awslplayer
iOS DD 播放器
https://github.com/cmst0us/awslplayer
awsl bilibili dd h264 hibiki-radio ios line-live multimedia niconico vtuber youtube
Last synced: about 2 months ago
JSON representation
iOS DD 播放器
- Host: GitHub
- URL: https://github.com/cmst0us/awslplayer
- Owner: CmST0us
- License: gpl-3.0
- Created: 2019-07-13T16:23:15.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2019-08-29T16:33:34.000Z (almost 7 years ago)
- Last Synced: 2025-02-04T17:52:16.917Z (over 1 year ago)
- Topics: awsl, bilibili, dd, h264, hibiki-radio, ios, line-live, multimedia, niconico, vtuber, youtube
- Language: Objective-C
- Size: 313 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 我永远喜欢...
这是一款iOS播放器,最主要的功能就是同屏播放多个直播。
人之初,性本D,誰でも大好き!
项目正在开发中...
当前版本`0.1`
feature:
- [x] BiliBili 拉流逻辑
- [ ] hls播放组件
- [x] Youtube 拉流逻辑
- [x] Hibiki Radio 拉流逻辑
- [ ] NicoNico 拉流逻辑
- [x] LineLive拉流逻辑
- [ ] 录屏
- [ ] 弹幕
## 各大直播平台流拉取逻辑
### BiliBili
1. 首先获取真实房间号
GET `https://api.live.bilibili.com/room/v1/Room/room_init?id=${roomId}`
这里需要说明的是为什么会存在一个真实房间号。其实主要是B站大主播直播间通常是一些短房间号,需要通过请求获取真实的长房间号。其实就是类似手机长号短号的情况。
2. 获取流
GET `https://api.live.bilibili.com/api/playurl?cid=${realRoomId}&otype=json&quality=0&platform=web`
3. 拉取流
### NicoNico *WIP*
1. HTML请求获取页面配置
GET `http://live2.nicovideo.jp/watch/lv${videoId}`
2. HTML解析
使用选择器`$('#embedded-data').attr('data-props')`获取配置JSON
3. 创建WebSocket
通过第二步获取到的JSON中的WebSocket URL`site.relive.webSocketUrl`和广播ID`program.broadcastId`创建WebSocket。
4. 发送请求
创建成功WebSocket之后发送JSON
```JSON
{
type: 'watch',
body: {
command: 'getpermit',
requirement: {
${broadcastId},
route: '',
stream: {
protocol: 'hls',
requireNewStream: true,
priorStreamQuality: 'high',
isLowLatency: true
},
room: {
isCommentable: true,
protocol: 'webSocket'
}
}
}
}
```
5. 接收数据
发送请求JSON成功之后开始接收数据。收到的数据为JSON格式
5.1. 收到心跳包
当WebSocket收到对方的包的type为ping时,发送pong包作为心跳。发送的pong包格式为
```JSON
{
types: 'pong',
body: {}
}
```
5.2. 收到非心跳消息包
如果`body.command`为servertime
发送JSON
```JSON
{
type: 'watch',
body: {
command: 'watching',
params: [${broadcastId}, '-1', '0']
}
}
```
如果`body.command`为currentstream
即可获取流地址`body.currentStream.uri`
### Youtube
1. 打开直播页面,加载Javascript引擎
var config = JSON.parse(ytplayer.config.args.player_response)
得到的结果中config.streamingData.hlsManifestUrl即播放地址
### Hibiki
1. 请求VideoID
GET `https://vcms-api.hibiki-radio.jp/api/v1/programs/${accessID}`
请求中需要添加HTTP头域
```
X-Requested-With: XMLHttpRequest
```
返回JSON中的episode.video.id即为videoID
2. 请求播放地址
GET `https://vcms-api.hibiki-radio.jp/api/v1/videos/play_check?video_id=${videoID}`
同样需要带上头域
返回JSON中的"playlist_url"为播放地址