Blackmagic Design ATEM Protocol

mushmush I programme in the dark!Posts: 285
G'day all,

Has anyone done any work with the Blackmagic Design ATEM equipment?
If so would you be willing to share your findings?
I have a TV Studio on my bench that I am supposed to write a control module for but I have not been able to find the protocol spec anywhere.

Cheers

Mush

Comments

  • RichardHamiltonRichardHamilton Member Posts: 58
    Try here...

    http://www.blackmagicdesign.com/au/support/detail?sid=3962&pid=3973&leg=false&os=win

    There's a 53MB operators manual and support notes. I think there are details in there.
  • pdabrowskipdabrowski Aussie Guy Posts: 184
    There is also an SDK available if you can't get native control (there is a bit of talk in their forums about intergrators unable to control them as the protocol wasn't available - things may have changed since though) and try to roll your own PC (or even RaspberryPI) based proxy interface between the ATEM and AMX master.

    http://www.blackmagicdesign.com/au/support/sdks
  • mushmush I programme in the dark! Posts: 285
    Thanks for the feedback guys but I've already been down those paths.
    The SDK does not describe the protocol.
    Several companies have reversed engineered the protocol using the SDK and/or packet sniffing.
    I can and will reverse engineer the protocol if I have to but I'm hoping that I can avoid doing so.
    It doesn't seem unreasonable as it appears to be a very popular protocol.
  • nickmnickm Blinky Light Aficionado Posts: 152
    I have now reverse engineered the protocol twice for the ATEM switchers using Wireshark. It's a giant pain in the butt. There is a constant heartbeat you have to send and acknowledge, which includes an iterator with each packet. I say I've done this twice, because both units we have used have behaved in slightly different ways.

    As much as I love the switcher itself, the fact that it doesn't have an integrator friendly API is a deal-breaker.

    If you're still interested in going down that path, I'll try to answer any questions you may have.
  • mushmush I programme in the dark! Posts: 285
    nickm wrote: »
    If you're still interested in going down that path, I'll try to answer any questions you may have.

    G'day Nick,

    Yes, still very much interested.
    Any documentation, code examples etc. that you would be willing to share would be awesome.
    I've sent you a PM with my email address.

    Cheers

    Mush
  • mushmush I programme in the dark! Posts: 285
    nickm wrote: »
    If you're still interested in going down that path, I'll try to answer any questions you may have.

    G'day Nick,

    I have a BMD TVS in front of me right now.
    Are you able to help with the protocol?
    Specifically, establishing and maintaining a connection?

    Thanks in advance.

    Mush
  • nickmnickm Blinky Light Aficionado Posts: 152
    Here's the last rev of the module I developed. Give this a shot.

    Boilerplate:
    This code is provided without warranty, and I bear no liability for it's use. Blah blah blah...
  • saharfarha01saharfarha01 Junior Member Posts: 2
    Hi Nick,

    I tried to control the ATEM-2 M/E using the same code, you provided however it didn't respond on the command sent to the vdev, not even with error response however when I connect at first it gives me the following:

    Line 1 (14:02:06):: CIpEvent::OnLine 0:5:1
    Line 2 (14:02:06):: BlackMagic ATEM Comm: *** Client Socket ONLINE ***
    Line 3 (14:02:06):: CIpEvent::OnLine 0:6:1
    Line 4 (14:02:06):: BlackMagic ATEM Comm: *** Server Socket ONLINE ***
    Line 5 (14:02:06):: BlackMagic ATEM Comm: Program Source = 0
    Line 6 (14:02:06):: BlackMagic ATEM Comm: Preview Source = 110
    Line 7 (14:02:06):: BlackMagic ATEM Comm: Program Source = 13
    Line 8 (14:02:06):: BlackMagic ATEM Comm: Preview Source = 140
    Line 9 (14:02:06):: BlackMagic ATEM Comm: Program Source = 13
    Line 10 (14:02:06):: BlackMagic ATEM Comm: Program Source = 0
    Line 11 (14:02:06):: BlackMagic ATEM Comm: Preview Source = 110
    Line 12 (14:02:06):: BlackMagic ATEM Comm: Program Source = 45
    Line 13 (14:02:06):: BlackMagic ATEM Comm: Preview Source = 140
    Line 14 (14:02:06):: BlackMagic ATEM Comm: Program Source = 45
    Line 15 (14:02:06):: BlackMagic ATEM Comm: Program Source = 0
    Line 16 (14:02:06):: BlackMagic ATEM Comm: Preview Source = 110
    Line 17 (14:02:06):: BlackMagic ATEM Comm: Program Source = 45
    Line 18 (14:02:06):: BlackMagic ATEM Comm: Preview Source = 140
    Line 19 (14:02:06):: BlackMagic ATEM Comm: Program Source = 45
    Line 20 (14:02:06):: BlackMagic ATEM Comm: Program Source = 0


    the same SDK is provided for all switchers so I assumed for at least the inputs from 1-6 we should at least be able to control through your code, have you worked around the ATEM 2 and what do you think I can do to troubleshoot more?

    I appreciate your help.
  • saharfarha01saharfarha01 Junior Member Posts: 2
    Dear Nick,

    Thank you for your code, I understood that every time you connect to this mixer parts in each command will change, and you need to track through wireshark at least the initiation command in order to get the correct responses.
  • jabramsonjabramson Junior Member Posts: 106
    Late to this post, but check this out by "Skaarjog" http://skaarhoj.com/fileadmin/BMDPROTOCOL.html They've created their own SDK that runs on an $35 Arduino. I have this up and running with a bit of coding on both the Arduino side and on the AMX side. Much easier than the BMD SDK.
  • mushmush I programme in the dark! Posts: 285
    jabramson wrote: »
    Late to this post, but check this out by "Skaarjog" http://skaarhoj.com/fileadmin/BMDPROTOCOL.html They've created their own SDK that runs on an $35 Arduino. I have this up and running with a bit of coding on both the Arduino side and on the AMX side. Much easier than the BMD SDK.

    Would you care to share your code?
  • PhreaKPhreaK Senior Member Posts: 966
    Yeah, that Skaarjog library is awesome for any of your BMD interfacing needs. Everything you need is up on their GitHub account. They've also got some tutorials to help you get started.

    Just one thing to keep in mind, it's GPL licensed. If you do build anything on it, don't be a douche and ignore the license, make sure you open up the source of the resulting system.
  • Fabrizio LorenziniFabrizio Lorenzini Junior Member Posts: 19
    nickm wrote: »
    Here's the last rev of the module I developed. Give this a shot.

    Boilerplate:
    This code is provided without warranty, and I bear no liability for it's use. Blah blah blah...

    Nick and others,
    has anyone developed a working AMX source code?
    An ATEM protocol document is not released yet (since years), and it seems to be changed as in the Nickm sample, he was expecting $31 as byte position #10 instead here I receive $20.
    Anyhow, even chaning that byte, the dialog starts and goes fine for some seconds

    Besides that, the main problem for me is to understand the meaning of byte position #10 inside the hexadecimal 80 0c message.

    Explaining a little better .... I am sniffing packets between ATEM Software Control and ATEM Television Studio

    ATEM SOFT.CONTROL -> 10 14 2e 07 00 00 00 00 00 ec 00 00 01 00 00 00 00 00 00 00 (HELLO)
    ATEM TVS -> 10 14 2e 07 00 00 00 00 00 20 00 00 02 00 00 33 00 00 00 00 (HELLO RESPONSE: yes, tell me more)
    ATEM SOFT.CONTROL -> 80 0c 2e 07 00 00 00 00 00 ab 00 00 (STARTING DIALOG:I am here - PLEASE LOOK AT THE ab)
    ATEM TVS -> 30 14 2e 07 00 00 00 00 00 20 00 00 02 00 00 33 00 00 00 00 (HELLO RESPONSE: yes, tell me more - SECOND REQUEST)
    ATEM SOFT.CONTROL -> 80 0c 2e 07 00 00 00 00 00 f9 00 00 (STARTING DIALOG:I am here - PLEASE LOOK AT THE f9)
    ..... ATEM Software and ATEM TVS exchanges data .....
    It seems that ab and f9 are strictly depending on the uuid 2e 07

    So, what does that byte means? and how can I calculate if the uuid is different ?

    Thank you very much
    Fabrizio Lorenzini


  • jabramsonjabramson Junior Member Posts: 106
    I've recently integrated my ATEM 2 M/E switcher into my AMX system and I'm happy to provide the code. I'm using the Skaarhoj protocol system running on an Arduino acting as a interface between the AMX and the ATEM. Essentially I telnet into the Arduino, execute commands, Shaarhoj library talks to ATEM and provides feedback on the Arduino for the AMX.
Sign In or Register to comment.