👏

ニコニコ動画ビューア(NeosVR版)について

2021/12/03に公開

はじめに

この記事はNeosVR Advent Calendar 2021の12月3日の記事です。
昨日はよっしーさんによるNeosVR内でのアバター着せ替え手順でした。

動画を出すって話していましたがどうにも動画にしてもいまいちわかりづらくなりそうだなと思いましたのでちょっとした記事に昇華しました(台本は作ってた)。申し訳ないです。

先日公開した動画(ニコニコ動画,YouTube)の技術的補足です。

というのも、外部から殴って整形するのをあまり見ませんでしたので()
Neosでよくある手法としては次の通りです。

  1. 適切な実装を行ってくれる簡易的な外部サーバーをHerokuで立てる
  2. 立てたサーバを介して、Emap形式( JSONをNeos内でパース、DynamicVariableを作成しやすい形に変換した形式。rheniumさん提案 )に変換したデータを作成する。
  3. Neosから投げやすい方式で投げる(外部サーバ側が対応)

これのいい点としては文字通り、Neos内の技術的制約を踏まえてなるべく軽くなるように設計できることですが、言い換えるとエンドポイントがないとそのソフトが動作しなくなる、という問題点を抱えています。

その点でNeos内でなるべく完結させ(完結しない点もJSONの一般的なパーサなので乗り換え可能)、かつ一般的なサーバにアクセスしに行く点を抑えたツールになっています。

この投稿から得られること

  • 先日公開した動画の技術的な補足がわかる
    • この点から、これより下を確認する前に一度動画を確認することをお勧めします。

実装について

実装はざっくりと次のような流れです。

  1. Host Access(Neosの仕様として外部リンクにアクセスする場合、適切なホストアドレスを設定する必要があります。動画情報を取得してからの時間制限があるのでこのタイミングにホストアクセスを求めるのが適切です)。
  2. ニコニコ動画から動画情報(html)を取得する
  3. 動画htmlにあるapi-initial-dataからパースし、必要情報を取り出し前提となるJsonを生成する
  4. 2でパースした情報をもとにAPIエンドポイントを設定し、生成したJsonを送信
  5. 帰ってきたJsonからcontent_uriを取り出し、Heartbeatに向けて送信を開始
  6. URLが入らなくなったことを検知し、その段階で送信を停止

Jsonの生成について

JSONについてはここを参考にして作っています。
問題なのが、Neosで使用するFormatの制限上、{}は識別文字として認識されてしまいます(よくよく読んでみたら対策方法書いてありましたね、これの方が良かったかも)。そのため、今回は"neos{"と"neos}"と書く形で対策を行いました。

Jsonばらせないけどどうしたの?

力技です。手前と後ろを確認して引っ張り出してくる感じの。

最後に

あんまり細かい内容ではありませんでしたが、同じようなことをしたい方がいましたら参考にしてください。

Discussion