BeatInfo proof of concept #12
Replies: 24 comments 111 replies
|
Made a quick video demonstration |
|
Hey, Thats what i have: sample output ( the ones with B letter is already parsed as UBInt64 and rounded a bit...): |
|
You guys are awesome. I'm so sorry as I'm swamped with external work (fixing a roof leakage has a somewhat higher prio than this :)). But once I get things sorted out, I'll give this a look! |
|
Thats my reason why i need StegeLinq into my python scripts: |
|
Hi team, i have looked into quickCue data in database, and i found it for cues it is referencing field 16 if i do it on Player1, Any ideas ? |
|
made python helper script to speed up reverse engineering, It may that you have some thing similar already, but if not you may find it handy...its takes track id as an imput and gives you back interesting fields from track database + creates folder for that track id and inflates and unzips all the interesting data blobs, screenshot: https://i.imgur.com/3xTd3eT.png script: |
|
I cracked it: Or in json format: |
|
I was able to calculate correct beat phase, using as input current beat value, and quantum = 4: and then to make it more readable you can feed that value into calc_phase_str also current time and end time calculations: |
|
Hey guys, i have already managed to do 10+ re-packed firmware updates for my prime4 :D still not finished fully breaked in, as having some difficulties with debuging port, as its only giving me the output from console but does not take my input back, so its bit hard to do all changes i need, only inside firmware (not having terminal input) and reflash it.....but i am getting there :D and when i will be there, we could see it from inside :D |
Just poking around on my Prime 4 to see if I could get BeatInfo to respond. Has anyone tried this on a Prime 4? I was trying this: ... where 39619 is the BeatInfo port on the Prime 4. Alas I only get the TCP ACK back, but no data response. Hopefully I'm missing something obvious? |
|
Far as i remenber you need to have some delay in between service request
and sending (0x0000000400000000)
…On Tue, Sep 27, 2022, 07:02 Matt Hite ***@***.***> wrote:
Hmmm. I've tried that, too. I'm using @icedream
<https://github.com/icedream>'s library to send an hello/howdy announce
every 1s.
—
Reply to this email directly, view it on GitHub
<#12 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AJ67VUKM5TOUPFBUYMRZH4LWAKEXFANCNFSM5MS6CGOQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
|
Just going through the thread and the code to sketch out the latest understanding of the packet format a bit more formally. Does this look right? u4be = 4-byte unsigned integer, big endian |
|
Ok, the next head scratcher for me -- what are these "Timeline" values? Are they really integers, or could they be floats? Is there a consensus on what these represent? |
|
I wonder if there is "stop" command that can be sent to the BeatInfo service. Maybe some variation of the sequence we sent to initiate the stream? Does anyone have packet captures of a "real" Stagelinq program hitting the BeatInfo service? Would be interesting to see if there is a "stop" sequence sent from client to server when shutting down the client application gracefully. Also, @honusz comment about adding the timelines in a later protocol version made me think that the start sequence might also somehow encode a request for a BeatInfo stream of a certain protocol version.
|
There are
Most of the programs I've come across (Resolume, TimeCodeSync, SoundSwitch) use it. |
|
It would also make a lot of sense if the "start beatinfo stream" message format looked like this: Where the last 4 bytes ("command") represent the BeatInfo command being sent from client to server. In the case of start stream, the command is 0x00, 0x00, 0x00, 0x00. Might be interesting to fuzz those last 4 bytes and see if there are any other commands the client can send. |
|
Hi Team, just something i have come across recently, but you may be aware of it already, anyway... |
|
@dzelionis - I've not played with protobuf directly. My understanding is that it is a standard for how data is serialized / deserialized on the wire, much like JSON or XML. It is extremely efficient and compact. It also looks like it would be significantly harder to reverse engineer without special analysis tooling given the specialized encoding. Thankfully -- from what I've seen thus far -- you can get pretty far analyzing Stagelinq with just Wireshark and a decent hex editor/viewer... and well, also plenty of trial and error! But I think in the spirit of your discoveries and research, I have indeed wondered if Stagelinq is "built on top" of a generic transport framework. Or have they really invented their own bespoke protocol? Also, Ostinato looks awesome! |
|
Somehow I forgot to mention it on this thread, but I put in a pull request to the @icedream library for BeatInfo support. There's an example app included in Since it's not exactly obvious how one tests something like this, here's the quick-and-dirty guide on how to compile the PR: clone itchange dirfetch the pull request into local beatinfo branchcheckout the local beatinfo branchupdate go dependencies to reference local beatinfo checkoutinspect changebuild beatinfo test apprun it!I hope to continue to submit PRs for the other Stagelinq protocols once I get the first PR approved and merged! |
Ok, cool! As usual you are 100 steps ahead of me. :) |
|
@honusz , hey dude...your project is starting to look very fancy + documented.....well done!!! Happy Easter!!! |









Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
I've managed to cobble together a working proof of concept for connecting to a controller's BeatInfo service, and subscribing to the stream.
I have it working (at least, for me, with 1x SC6000), code is on the beatinfo branch of my fork.
No super magic here; just connect to the BeatInfo port given by the player in the service request, send an 8 byte request (0x0000000400000000), and the deluge of BeatInfo messages starts coming.
Still haven't totally figured out the messages, but I've included what I think based on analysis so far.
That's what I have so far. Try it out, and see if @MarByteBeep or @kkirjala are the kind of people who like puzzles, haha.
All reactions