きっかけ
iOSでSafariからVLCでストリーミング再生できないという話を見た。
よく見ると、URLencodeされたURLだと、VLCでは再生できない模様。
Wikipediaによると、パーセントエンコードと言うんですね、知らなかった。
Infuseというアプリだと、再生できる。
x-callback-url
iOSではx-callback-urlという仕組みをつかってアプリ間連携している。これまた知らなかった。
x-callback-urlは、http://x-callback-url.com/ にて仕様がまとめられている。
InfuseとVLCの違い
例えば、
infuse://x-callback-url/play?url=PROTOCOL://ADDRESS
で再生できたものを、
vlc-x-callback://x-callback-url/play?url=PROTOCOL://ADDRESS
としても、再生できない。
VLC-iOSのURLの扱い
色々さまよい、VLC-iOSのソースを見ることに。
こちらのcommitによると、
if (value.range(of: "%3A%2F%2F", options: NSString.CompareOptions.caseInsensitive, range: value.startIndex..<end, locale: nil) == nil) {
とあり、URLに%3A%2F%2F
を含んでいるかで挙動が別れそう。
URLに%3A%2F%2F
を含ませれば、パーセントエンコードされていると判定され、再生できるのではと想像し、
vlc-x-callback://x-callback-url/play?url=PROTOCOL%3A%2F%2FADDRESS
としたところ、再生できるようになった。…が、ダウンロードか再生の選択ポップアップが表示される。
VLC-iOSのx-call-back-urlのアクション
VLCのページによると、Actionsとして、
stream: VLC plays the stream provided by the URL parameter
が挙げられている。再生はこれだと思い、
vlc-x-callback://x-callback-url/stream?url=PROTOCOL%3A%2F%2FADDRESS
としたところ、 ポップアップ無しで再生。わーい!
他に、ダウンロードや、再生完了時のアクションなども書けそうで、色々使えそう。
オチ
ここまで調べた結論的な内容が、掲示板に書かれていました…敗北。