Skip to content

Latest commit

 

History

History
117 lines (93 loc) · 2.84 KB

README.md

File metadata and controls

117 lines (93 loc) · 2.84 KB

我永远喜欢...

这是一款iOS播放器,最主要的功能就是同屏播放多个直播。 人之初,性本D,誰でも大好き! 项目正在开发中...

当前版本0.1

feature:

  • BiliBili 拉流逻辑
  • hls播放组件
  • Youtube 拉流逻辑
  • Hibiki Radio 拉流逻辑
  • NicoNico 拉流逻辑
  • 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 URLsite.relive.webSocketUrl和广播IDprogram.broadcastId创建WebSocket。

  4. 发送请求 创建成功WebSocket之后发送JSON

{
      type: 'watch',
      body: {
        command: 'getpermit',
        requirement: {
          ${broadcastId},
          route: '',
          stream: {
            protocol: 'hls',
            requireNewStream: true,
            priorStreamQuality: 'high',
            isLowLatency: true
          },
          room: {
            isCommentable: true,
            protocol: 'webSocket'
          }
        }
      }
}
  1. 接收数据 发送请求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

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

  1. 请求播放地址 GET https://vcms-api.hibiki-radio.jp/api/v1/videos/play_check?video_id=${videoID}

同样需要带上头域

返回JSON中的"playlist_url"为播放地址