BeatInfo proof of concept #12
Replies: 24 comments 111 replies
-
Made a quick video demonstration |
Beta Was this translation helpful? Give feedback.
-
Hey, Thats what i have:
sample output ( the ones with B letter is already parsed as UBInt64 and rounded a bit...): |
Beta Was this translation helpful? Give feedback.
-
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! |
Beta Was this translation helpful? Give feedback.
-
Thats my reason why i need StegeLinq into my python scripts: |
Beta Was this translation helpful? Give feedback.
-
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 ? |
Beta Was this translation helpful? Give feedback.
-
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: |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
I cracked it:
Or in json format: |
Beta Was this translation helpful? Give feedback.
-
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:
|
Beta Was this translation helpful? Give feedback.
-
if i take a diff of beat time (current packet - one before) and plot it i get some interesting data, not sure does that means anything but maybe its more stuff encoded into that, as i can see some paterns (bottom line in the graph is my calculated phase): |
Beta Was this translation helpful? Give feedback.
-
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 |
Beta Was this translation helpful? Give feedback.
-
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? |
Beta Was this translation helpful? Give feedback.
-
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:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
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 |
Beta Was this translation helpful? Give feedback.
-
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? |
Beta Was this translation helpful? Give feedback.
-
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.
|
Beta Was this translation helpful? Give feedback.
-
There are
Most of the programs I've come across (Resolume, TimeCodeSync, SoundSwitch) use it. |
Beta Was this translation helpful? Give feedback.
-
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. |
Beta Was this translation helpful? Give feedback.
-
Hi Team, just something i have come across recently, but you may be aware of it already, anyway... |
Beta Was this translation helpful? Give feedback.
-
@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! |
Beta Was this translation helpful? Give feedback.
-
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 it
change dir
fetch the pull request into local beatinfo branch
checkout the local beatinfo branch
update go dependencies to reference local beatinfo checkout
inspect change
build beatinfo test app
run it!
I hope to continue to submit PRs for the other Stagelinq protocols once I get the first PR approved and merged! |
Beta Was this translation helpful? Give feedback.
-
Oh, hey, @icedream merged the BeatInfo PR back in February. I started playing around with Fyne and made a stupid "hello world" UI for the BeatInfo service. Here's a fugly animated GIF of the prototype! |
Beta Was this translation helpful? Give feedback.
-
Ok, cool! As usual you are 100 steps ahead of me. :) |
Beta Was this translation helpful? Give feedback.
-
@honusz , hey dude...your project is starting to look very fancy + documented.....well done!!! Happy Easter!!! |
Beta Was this translation helpful? Give feedback.
-
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.
Beta Was this translation helpful? Give feedback.
All reactions