Commit Graph

9813 Commits

Author SHA1 Message Date
David Wendt 21b7e70d09 docs: Keep documentation of the old `num_frames` options until we can remove them 2023-06-30 16:14:28 -06:00
David Wendt ff1ed66729 flv: VP6 video packets have a horizontal and vertical adjustment before the actual video data. 2023-06-30 16:14:28 -06:00
David Wendt 98ee78be1a avm2: Make netstream event initialization more concise 2023-06-30 16:14:28 -06:00
David Wendt 04ee039d3c avm2: Use `ParametersExt` to grab parameters in `Video.init()` 2023-06-30 16:14:28 -06:00
David Wendt faf8fb5d3f avm2: Move as much `Video` initialization as possible into an instance allocator function 2023-06-30 16:14:28 -06:00
David Wendt 45e6f07009 core: Pause the stream if we hit a tag parsing error. 2023-06-30 16:14:28 -06:00
David Wendt af0149c476 core: Log netstream signature verification errors 2023-06-30 16:14:28 -06:00
David Wendt b639af1ada avm2: `Video.init` doesn't need to call `super_init` 2023-06-30 16:14:28 -06:00
David Wendt 4f4a205637 tests: Add images to the netstream tests 2023-06-30 16:14:28 -06:00
David Wendt d2f806a901 core: The AVM2 version of this test wants a spurious status event 2023-06-30 16:14:28 -06:00
David Wendt ab21b5b106 core: The stop event is `NetStream.Play.Stop` 2023-06-30 16:14:28 -06:00
David Wendt 61c269c636 docs: Document `num_ticks` and `tick_rate` 2023-06-30 16:14:28 -06:00
David Wendt 16c9cb4fdd tests: Add option to send ticks to the player instead of calling `run_frame`.
You can also specify a `tick_rate` in order to get ticks faster or slower than the stage frame rate.

We also enable video decode and ticks on the netstream tests, since our netstream impl requires ticks.
2023-06-30 16:14:28 -06:00
David Wendt fc50a688fb core: Update stream time after processing tags 2023-06-30 16:14:28 -06:00
David Wendt 4dd9508471 avm1: Implement onStatus events for NetStream 2023-06-30 16:14:28 -06:00
David Wendt 63b27a4a20 avm2: Pass status events through to AVM2. 2023-06-30 16:14:28 -06:00
David Wendt 757ae40abc core: Add stubs for stream event triggers 2023-06-30 16:14:28 -06:00
David Wendt da2ef5392e core: Make the `NetStream`/AVM link bidirectional 2023-06-30 16:14:28 -06:00
David Wendt 067474dea5 chore: Remove unused variables from stream.rs 2023-06-30 16:14:28 -06:00
David Wendt 4944d81dd7 tests: Update the AVM1 test output to include event data. 2023-06-30 16:14:28 -06:00
David Wendt d498a412e5 core: Retain original SWF dimensions for self bounds 2023-06-30 16:14:28 -06:00
David Wendt b164319e32 core: FLV metadata is stored as an array, not an object. 2023-06-30 16:14:28 -06:00
David Wendt 643b053e8d core: Don't mark the video stream as corrupt if we haven't gotten the full header yet 2023-06-30 16:14:28 -06:00
David Wendt 587a99fae7 core: Netstream loaders are... well, netstream loaders. 2023-06-30 16:14:28 -06:00
David Wendt 0e207cce8d core: Actually spawn the loader future for the netstream 2023-06-30 16:14:28 -06:00
David Wendt 7e986bd90d avm1: `NetStream` constructor must return itself 2023-06-30 16:14:28 -06:00
David Wendt 766ee5302d core: Properly expose AVM1/2 objects for videos. 2023-06-30 16:14:28 -06:00
David Wendt a52f738009 core: Silence various errors triggered by loading an empty video stream 2023-06-30 16:14:28 -06:00
David Wendt 34625524ad swf: Zero is a valid video codec and it indicates no codec. 2023-06-30 16:14:28 -06:00
David Wendt 257403d04e core: Errors in tag parsing should include the explanation of the underlying error 2023-06-30 16:14:28 -06:00
David Wendt f690162a4f avm2: Actually create an unconnected `Video` when one is constructed via `new Video` 2023-06-30 16:14:28 -06:00
David Wendt c86360a10b core: `Video`s attached to a `NetStream` get their bitmap size and data from the attached `NetStream`. 2023-06-30 16:14:28 -06:00
David Wendt 9e318fc8e8 core: Process basic FLV video data tags and funnel them to the video backend.
This works a bit differently from SWF videos, we do not retain decoded video frames or valid seek points indefinitely. This assumes code interacting with `NetStream` is at least mildly aware of how a video codec is supposed to work and what the performance implications of that are.
2023-06-30 16:14:28 -06:00
David Wendt 3d5156b90d core: Update the stream offset after each tag is processed.
The `preload_offset` is only ever moved forward, of course.
2023-06-30 16:14:28 -06:00
David Wendt 3410d9fcf8 core: Process `onMetaData` to get our stream definition with.
We use `preload_offset` to avoid processing the same metadata multiple times.
2023-06-30 16:14:28 -06:00
David Wendt 286acddfea core: Introduce the notion of a separate preload step.
We don't actually process tags out of order, we're just tracking what tags have already been processed. FLV embeds critical video metadata in a ScriptData tag that we need to pull data out of and process.
2023-06-30 16:14:28 -06:00
David Wendt bc9fd3613e core: Add stub FLV processing 2023-06-30 16:14:28 -06:00
David Wendt c00cd0537c tests: Add tests for AVM1 and AVM2 host FLV players. 2023-06-30 16:14:28 -06:00
David Wendt ea9c5ae830 flv: Break `io::Error` into kind and string at construction time to avoid having to do so when cloning. 2023-06-30 16:14:28 -06:00
David Wendt 0f176484ea flv: Refactor tag parsing to use error codes instead of `None`. 2023-06-30 16:14:28 -06:00
David Wendt e4b76ac149 flv: Sound format bits are ALSO specified backwards! 2023-06-30 16:14:28 -06:00
David Wendt c61b27a41b flv: Codec ID and frame type are specified backwards 2023-06-30 16:14:28 -06:00
David Wendt 4b81d65dc5 flv: Hitting the end of the script data block is treated like the variable terminator.
Add a test case with real FLV data to enforce this.
2023-06-30 16:14:28 -06:00
David Wendt 4f831b4351 flv: Script data blocks appear to start with a trash byte `0x02` 2023-06-30 16:14:28 -06:00
David Wendt 6358d3162b flv: The type flag bits in the FLV spec are written backwards. 2023-06-30 16:14:28 -06:00
David Wendt eed1ab492d flv: All relevant output data types need to be public. 2023-06-30 16:14:28 -06:00
David Wendt 0c145253b6 flv: `Tag` fields should be public. 2023-06-30 16:14:28 -06:00
David Wendt b2dd4d8305 flv: Add `Clone` to `Tag` and `Header`.
Some types also get `Copy` by virtue of being plain data with no pointers.
2023-06-30 16:14:28 -06:00
David Wendt 8fd80cd173 flv: `Tag` should be public as well. 2023-06-30 16:14:28 -06:00
David Wendt d23378dd80 flv: `Header::parse` should always leave the stream reader in a reasonable position 2023-06-30 16:14:28 -06:00