6

こんばんは。

端的に言えば、WEBVTTファイルの特定の時間間隔からRDF/JSON構造を取得するスクリプトが必要になります。そのようなものは存在しますか?

RDF / JSONは、Talisが指定したファイル構造であり、次のようになります。

{ "S" : { "P" : [ O ] } }

WEBVTTは、次のような前述の構造を実装します。

0
00:00:00,000 --> 00:00:46,119
{ "S" : { "P" : [ O ] } }

1
00:00:48,000 --> 00:00:50,211
{ "S" : { "P" : [ O ] } }

...

そして、ビデオファイルを表示しながら、タイムラインの一部をクリックすると、スクリプトが対応するRDF / JSONコードをフェッチするようにそのようなファイルを使用します(これを実行できるようになりました。すでにWEBVTTパーサーがあります)。次に、パーサーはRDF/JSON構造からオブジェクト内の要求された情報をフェッチします。

jQueryにgetJsonが実装されているのを見て本当に嬉しかったですが、それは「通常の」jsonファイルに対してのみ機能します。

おそらくスクリプトを書くのが一番でしょうが、私のタイミングと知識は非常に限られているので、誰かが知っているかもしれない提案や解決策を聞きたいです。

4

2 に答える 2

6

I've written a WebVTT parser for my <track>/HTML5 video captioning polyfill Captionator.

Feel free to pick apart the source of the development branch (which has the best WebVTT compliance, so it's probably better to look at that rather than the stable branch.)

The parser code starts here: https://github.com/cgiffard/Captionator/blob/captioncrunch/js/captionator.js#L1686

Ultimately though, what you're describing seems to roughly match the intended use case for the metadata track type (as described in the WHATWG's TimedTextTrack spec.) You can use Captionator (I'd love to recommend to you another library as well, but I'm not aware of anything else that doesn't come bundled with an entire video player, or that implements the TimedTextTrack JS API you'll need) to provide support for it - the TextTrack.oncuechange event and TextTrack.activeCues list enable you to listen for changes to cues when the user seeks within the video timeline. You can then get the text of each cue (less the cue metadata and header) and parse it as JSON. Just set up a caption track like below:

<video src="myvideo.webm" poster="poster.jpg" width="512" height="288">
    <track kind="metadata" src="meta.webvtt" type="text/webvtt" srclang="en" label="Metadata Track" default />
</video>

Then, include the captionator library, initialise it as per the documentation, select your track and set up an event handler. You can access the text of an individual cue like so:

var cueText = document.getElementById("video").tracks[0].activeCues[0].getCueAsSource();

Then just:

var RDFData = JSON.parse(cueText);

Good luck :)

于 2011-08-03T00:56:47.197 に答える
1

It seems that the RDF/JSON is in fact complex and nested JSON structure with vectors, so getJSON function will successfully parse data from it once its fetched from WEBVTT timed structure.

于 2011-08-02T13:39:08.537 に答える