Arnavion / libjass

Renders ASS subs in the browser.
Apache License 2.0
174 stars 29 forks source link

How to crate subtitle from JSON Object ? #106

Closed jokerrider007 closed 6 years ago

jokerrider007 commented 6 years ago

I have a JSON object create by libjass.serializes function. Can I use this object to crate an ASS object and render it ? or Can i merge JSON object into ASS object ? I'm try to use ASS.fromJSON function and render it. but doesn't work. This is my JSON object : https://jsfiddle.net/653wkmzx/

Arnavion commented 6 years ago

What are you trying to do? libjass.serialize returns a string that is meant to be used with libjass.deserialize.

Even if you generate a blob with JSON.parse(libjass.serialize(someASSObject)) and pass it to libjass.ASS.fromJSON(), it will not restore the prototypes of the inner objects. All the fromJSON functions are for internal use by libjass.deserialize.

If your intention is to serve ASS files from your server to your client as JSON blobs instead of ASS scripts, then you would use libjass.deserialize(JSON.stringify(yourBlob)). But you need to make sure the same version of libjass.js is used for both serialization and deserialization. The serialized form is not guaranteed to be consistent between two different versions of the library, or even between minified and unminified copies of the same version of the library. This is because the class tags depend on the order in which the submodules are defined in the compiled JS.

For example your blob uses class tag 60 for libjass.Style, but the version of the library on the demo page uses class tag 60 for for libjass.ASS, so libjass.deserialize(JSON.stringify(yourBlob)) fails with an exception.

(The serialization mechanism was not written for the purpose of sending blobs between server and client. It was part of an attempt to allow the rendering pipeline to be offloaded to webworker threads. These webworker threads would load the same script URL as the main thread, so the class tags would be the same.)

jokerrider007 commented 6 years ago

Thank a lot @Arnavion for explain and give the way to resolve it.