CasparCG / server

CasparCG Server is a Windows and Linux software used to play out professional graphics, audio and video to multiple outputs. It has been in 24/7 broadcast production since 2006. Ready-to-use downloads are available under the Releases tab https://casparcg.com.
GNU General Public License v3.0
913 stars 268 forks source link

AMCP INFO regression #1151

Open super-ienien opened 5 years ago

super-ienien commented 5 years ago

First, I wan't to thank you for what your doing with CasparCG. That's awesome guys !

Expected behaviour

I would expect that AMCP 2.2 still provide a command to get informations about config, paths, template etc

Current behaviour

The INFO [PATH | TEMPLATE | PATHS | ...] commands have been replaced by INFO [channel_id] but there is no new command that provide a way to get thoses precious informations that we had with AMCP 2.1.


Environment

In order to know what is the best solution for me to manage this issue in my own casparCG client, could you tell me what do you plan to do ? Leave AMCP that way, go back to get the behavior of AMCP 2.1 or implement new commands ?

Thanks a lot ;)

Julusian commented 5 years ago

Which ones would you like to see brought back? INFO & INFO 1 already have been. INFO TEMPLATE might be tricky as that kind of logic is now supposed to be outsourced to media-scanner and trying to get it to interpret the ft templates the same will be hard/messy. INFO CONFIG and INFO PATHS would be simple to do INFO SYSTEM has had all the data sources stripped out, so would be better to avoid INFO SERVER is pretty much just a bunch of INFO x, so can be done manually? INFO QUEUES could be brought back, not sure how many uses it has though INFO THREADS & INFO DELAY not sure of the benefits of these Did I miss any?

premultiply commented 5 years ago

I think most important are solutions to retrieve info about

  1. reliable metadata from media files and templates (fields and their names)
  2. what is playing on which channel at which layer at which (time) position including in/out position and loop indicator etc. This is especially important for clients that do not support OSC.
5opr4ni commented 5 years ago

Hi @premultiply

I don't understand, the things you are referring to has been there since February, or something, last year. ;) The only thing not implemented is the template info (fields and their names)

Have a look here. https://github.com/5opr4ni/help/wiki/AMCP-2.2#info

ex. PLAY 1-10 PLAY_TIME SEEK 15340 LENGTH 125125 INFO 1 Returns

<?xml version="1.0" encoding="utf-8"?>
<channel>
   <framerate>50</framerate>
   <framerate>1</framerate>
   <mixer>
      <audio>
         <volume>115775648</volume>
         <volume>97853664</volume>
         <volume>53128900</volume>
         <volume>44045544</volume>
         <volume>0</volume>
         <volume>0</volume>
         <volume>0</volume>
         <volume>0</volume>
      </audio>
   </mixer>
   <stage>
      <layer>
         <layer_10>
            <background>
               <producer>empty</producer>
            </background>
            <foreground>
               <file>
                  <clip>306.80000000000001</clip>
                  <clip>2502.5</clip>
                  <name>PLAY_TIME.m4v</name>
                  <path>c:/caspar/_MEDIA/Play_Time.m4v</path>
                  <streams>
                     <file>
                        <streams_0>
                           <fps>25</fps>
                           <fps>1</fps>
                        </streams_0>
                        <streams_1>
                           <fps>0</fps>
                           <fps>0</fps>
                        </streams_1>
                        <streams_2>
                           <fps>0</fps>
                           <fps>0</fps>
                        </streams_2>
                        <streams_3>
                           <fps>90000</fps>
                           <fps>1</fps>
                        </streams_3>
                     </file>
                  </streams>
                  <time>1004.36</time>
                  <time>7147.2799999999997</time>
               </file>
               <loop>false</loop>
               <paused>false</paused>
               <producer>ffmpeg</producer>
            </foreground>
         </layer_10>
      </layer>
   </stage>
</channel>
super-ienien commented 5 years ago

@julusian

For me what should be reimplemented is the INFO CONFIG and INFO PATHS has there is no other way to retrieve the default config values to my knowledge.

For the INFO TEMPLATE i do not know because i’m Not using it.

5opr4ni commented 5 years ago

Couldn't this be implemented outside the server, like the media scanner, in that way we could make it extendable, so it wouldn't inflict with the server? Just a thought! A way to build special commands residing "server side". Maybe also implement a kind of scripting support so that it would be possible to create new "virtual" AMCP commands.

super-ienien commented 5 years ago

I totally agreed that the new media scanner is a smart move. May INFO PATHS could be a part of it. But I don’t see the reason why externalizing INFO CONFIG would be better.

Julusian commented 5 years ago

@5opr4ni sounds like you are thinking of https://github.com/CasparCG/server/issues/1135

CONFIG and PATHS are super simple though, and would only be a few pretty simple lines each inside the amcp files, so I'm not worried about complexity of those. The others are more complex/meessy, so once we know what is actually wanted it can be discussed where they reside or how they are implemented

5opr4ni commented 5 years ago

@julusian Yes!

premultiply commented 5 years ago

I don't understand, the things you are referring to has been there since February, or something, last year. ;) The only thing not implemented is the template info (fields and their names)

Have a look here. https://github.com/5opr4ni/help/wiki/AMCP-2.2#info

You are right, but this description can not be found in the official CasparCG github Wiki or anywhere else there.

For me this XML structure should be improved a little bit to make it easier to parse like this for example:

<?xml version="1.0" encoding="utf-8"?>
<channel id="1">
   <framerate n="50" d="1">50.0000</framerate>
   <mixer>
      <audio>
         <volume ch="1">115775648</volume>
         <volume ch="2">97853664</volume>
         <volume ch="3">53128900</volume>
         <volume ch="4">44045544</volume>
         <volume ch="5">0</volume>
         <volume ch="6">0</volume>
         <volume ch="7">0</volume>
         <volume ch="8">0</volume>
      </audio>
   </mixer>
   <stage>
      <layers>
         <layer id="10">
            <background>
               <producer>empty</producer>
            </background>
            <foreground>
               <file>
                  <clip_in>306.80000000000001</clip_in>
                  <clip_out>2502.5</clip_out>
                  <name>PLAY_TIME.m4v</name>
                  <path>c:/caspar/_MEDIA/Play_Time.m4v</path>
                  <streams>
                     <file>
                        <stream id="0" type="video">
                           <fps numerator="25" denominator="1">25.0000</fps>
                        </stream>
                        <stream id="1" type="unknown">
                        </stream>
                        <stream id="2" type="unknown">
                        </stream>
                        <stream id="3" type="audio">
                           <fps n="90000" d="1">90000.0000</fps>
                        </stream>
                     </file>
                  </streams>
                  <time_clip>1004.36</time_clip>
                  <time_total>7147.2799999999997</time_total>
               </file>
               <loop>false</loop>
               <paused>false</paused>
               <producer>ffmpeg</producer>
            </foreground>
         </layer>
      </layers>
   </stage>
</channel>
5opr4ni commented 5 years ago

Hi

We want to keep everything at a bare minimum. The info should not differ from the OSC which is pumped out in a high frequency, so we need to keep it as clean as possible. Everything is absolute, so you can get what you want at client side. The servers main responsibility is to serve videoframes not format text.

/o

5opr4ni commented 5 years ago

True regarding the docs, we are writing new documentation when there is time. We are a small group doing everything. Would be nice with som help. ;)

didikunz commented 5 years ago

I think INFO PATHS can be send to the elderly home :) As it can easy be extracted from the config and anyway only really helps when the client runs on the same machine as the server and so it is easy to get a hold to the config file.

didikunz commented 5 years ago

What I would like to see is something similar to INFO TEMPLATE, that can be used to query metadata from templates. Would be good to find a solution for HTML, scene and PSD templates to give back the information's about their fields also. But can be implemented in Scanner.exe if it is easier.

super-ienien commented 5 years ago

I think INFO PATHS can be send to the elderly home :)

Sorry @didikunz, i don't agree with you. INFO PATHS is useful in case where the client doesn't know where the server is located on the filesystem because it provide absolute file paths. INFO CONFIG just provides paths as they are specified in the config file.

And it is common to have client and server on the same machine

super-ienien commented 5 years ago

To make it short, the only way for a local client to know where the Server is installed is by INFO PATHS

didikunz commented 5 years ago

My clients normally start the (local) servers along with itself, so they always know were the server is in the file system. But that is the reason, why we discuss these issues here, to find out, what is needed and what not. I do not mind keeping INFO PATHS but only commented my opinion on this.

olzzon commented 5 years ago

After Background info and Foreground info for non-playing files has been added to OSC, I think OSC can do most of whats needed. And I plan is to support 2.2 in my CasparCG-state-scanner, and transition the ClipTool to the 2.2 server.

By using something like the CCG-state-scanner it´s easy to subscribe to a lot of info from the machine. Right now I primary use it for "Let me know if there are there changes in the thumb folder", "Give me the latest playing time of all channels" and "Give me new channel-layer info when ever something new has happened on the server"

The good thing with the OSC, is that it can stream out a lot of data very fast, the weak thing (IMHO) is that it´s a server->client connection, and as the ACMP is a client-server connection, you need to open op port on both sides. By using a thing like the CCG-state-scanner you only need to open up port on the CCG server and let it act like a web Graphql API.

If anyone has wishes for the https://github.com/olzzon/casparcg-state-scanner please let me know, and I´ll try to implement it. (Right now it´s mainly build for TV2 DK purposes) But I think that no matter what, it would be great to have a functionality like this for CasparCG

Julusian commented 5 years ago

Hmm, so it turns out that the old INFO TEMPLATE code hasn't really been removed at all. Only the 11 lines of code that exposes it to amcp has... It really should be moved to the scanner though

Julusian commented 5 years ago

INFO CONFIG and INFO PATHS are now in 2.3 INFO TEMPLATE is something for the media-scanner to implement (https://github.com/CasparCG/media-scanner/issues/38) once it has been done there, then an AMCP wrapper for it can be added.

As far as I can tell nothing else is wanted from this task, or did I miss something else?

super-ienien commented 5 years ago

Hey @Julusian. Thanks a lot ! That's perfect.

drakmor commented 5 years ago

May be return INFO SYSTEM for enumerate Decklink/Blowfish/NDI/OpelAL/Screen devices? I can make PR.

Julusian commented 5 years ago

@drakmor do you mean available consumers or ones assigned to channels?

The ones in use ought to be part of INFO and OSC, but it appears to not be for some reason. And the system for listing available devices, and the rest of the INFO SYSTEM command looks to have been mostly stripped away. I do think that being able to list decklink devices is very useful to have though.

drakmor commented 5 years ago

Yes, list of available consumers.

drakmor commented 5 years ago

Maybe roll back this commit? - https://github.com/CasparCG/server/commit/5118dd23acf03f5891c37376fad76cb81531d227