WEBVTT'den RDF/JSON için Javascript ayrıştırıcı
İyi akşamlar.
Direkt konuya gireyim - Belirli bir zaman aralığındaki RDF/JSON yapısını WEBVTT dosyasından alan bir script'e ihtiyacım var. Böyle bir şey var mı?
RDF/JSON, Talis tarafından belirlenmiş ve şöyle görünen bir dosya yapısıdır:
{ "S" : { "P" : [ O ] } }
WEBVTT bu yapıyı şöyle uygular:
0
00:00:00,000 --> 00:00:46,119
{ "S" : { "P" : [ O ] } }
1
00:00:48,000 --> 00:00:50,211
{ "S" : { "P" : [ O ] } }
...
Ve böyle bir dosyayı, video dosyalarını izlerken öyle bir şekilde kullanırdım ki zaman çizelgesinin bir kısmına tıkladığımda, script ilgili RDF/JSON kodunu alır (bunu şimdi yapabiliyorum, zaten bir WEBVTT ayrıştırıcısı var) ve ardından ayrıştırıcı RDF/JSON yapısından istenen bilgiyi nesnede alır.
jQuery'nin getJson'i uyguladığını gördüğümde gerçekten mutlu oldum, ama bu sadece "normal" json dosyaları için çalışıyor.
Muhtemelen en iyi şey sadece senaryoyu yazmak olurdu, ama zamanlamam ve bilgim çok sınırlı, bu yüzden herkesin bilebileceği herhangi bir öneriyi veya çözümü duymak isterim.
Cevap #1
WebVTT ayrıştırıcısını, <track>/HTML5 video altyazı polyfill'im Captionator için yazdım.
Geliştirme dalının kaynağını incelemekten çekinmeyin (bu dal en iyi WebVTT uyumluluğuna sahip, bu yüzden stabıl branch yerine buna bakmak muhtemelen daha iyidir.)
Ayrıştırıcı kodu burada başlıyor: https://github.com/cgiffard/Captionator/blob/captioncrunch/js/captionator.js#L1686
Sonuç olarak, tanımladığınız şey, metadata türündeki izleme tipinin amaçlanan kullanımına kabaca uyan bir durum gibi görünüyor (WHATWG’nin TimedTextTrack spesifikasyonunda açıklandığı şekilde). Bunu desteklemek için Captionator (size başka bir kütüphaneyi de önermek isterdim, ancak tüm bir video oynatıcı ile birlikte gelmeyen veya ihtiyacınız olan TimedTextTrack JS API’sini uygulayan başka bir şeyden haberdar değilim) kullanabilirsiniz - TextTrack.oncuechange olayı ve TextTrack.activeCues listesi, kullanıcı video zaman çizelgesinde arama yaptığında cue değişikliklerini dinlemenize olanak tanır. Ardından her cue’un metnini (cue meta verisi ve başlık hariç) alabilir ve JSON olarak ayrıştırabilirsiniz. Aşağıdaki gibi bir altyazı izi oluşturmanız yeterlidir:
<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>
Sonra, captionator kütüphanesini dahil edin, belgelerde belirtildiği şekilde başlatın, parçanızı seçin ve bir olay işleyici ayarlayın. Bireysel bir ipucunun metnine şu şekilde erişebilirsiniz:
var cueText = document.getElementById("video").tracks[0].activeCues[0].getCueAsSource();
Sonra sadece:
var RDFData = JSON.parse(cueText);
İyi şanslar :)
Cevap #2
RDF/JSON'in aslında vektörlerle karmaşık ve iç içe geçmiş bir JSON yapısı olduğu görünüyor, bu yüzden getJSON fonksiyonu, WEBVTT zamanlı yapısından alındığında verileri başarıyla ayrıştıracaktır.
