mirror of
https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
synced 2023-10-10 19:16:51 +02:00
140 lines
6.3 KiB
Plaintext
140 lines
6.3 KiB
Plaintext
|
Written by: Sascha Volkenandt <sascha@akv-soft.de>
|
||
|
|
||
|
Project's homepage: http://www.magoa.net/linux/
|
||
|
|
||
|
Version: 0.0.3
|
||
|
|
||
|
Description:
|
||
|
------------
|
||
|
|
||
|
I call this protocol "VTP", the Video Transfer Protocol. I hope that's not
|
||
|
already claimed by someone ;).
|
||
|
|
||
|
This Protocol was created for Video Transfers over a Network. It is a text-
|
||
|
based protocol like the FTP, and is used by a client to communicate with a
|
||
|
server providing different types of video data, such as live streams,
|
||
|
recordings or disc media. The basic communication consists of short text
|
||
|
commands sent by the client, answered by numerical codes accompanied by
|
||
|
human-readable messages. All messages should be finished by a full CR/LF
|
||
|
line-ending, which should preferably written as "\015\012", as this is fully
|
||
|
platform-independent. Nevertheless, a client or (especially) a server should
|
||
|
also act on "\n" line-endings. The MPEG data is being transmitted over a
|
||
|
separate data connection.
|
||
|
|
||
|
TODO:
|
||
|
- PORT behaviour changed
|
||
|
- TUNE syntax changed
|
||
|
- connection IDs
|
||
|
- new command PLAY
|
||
|
|
||
|
|
||
|
Response Code Summary
|
||
|
|
||
|
Code Meaning
|
||
|
220 Last command ok / connection ready
|
||
|
221 Service is closing the connection afterwards
|
||
|
500 The command was not recognized
|
||
|
501 The parameters couldn't be interpreted correctly
|
||
|
550 Action not taken, for various reason
|
||
|
551 Action not taken, a subsequent connection was unsuccessful
|
||
|
560 Live-Stream not available currently [changed in 0.0.3]
|
||
|
561 Capability not known [new in 0.0.2]
|
||
|
562 Pid currently not available [new in 0.0.3]
|
||
|
563 Stream not available currently [new in 0.0.3]
|
||
|
|
||
|
|
||
|
Command Reference
|
||
|
|
||
|
Command: Connect to VTP Server
|
||
|
Responses: 220 - The server is ready
|
||
|
Description: Upon connection to the server (which usually listens at port
|
||
|
2004), the first thing the client has to expect is a welcome message with
|
||
|
the "220" response code. The client may now send a CAPS command, to tell
|
||
|
the server it's capabilities.
|
||
|
|
||
|
Command: CAPS <Capability>
|
||
|
Responses: 220 - This capability is known and will be used from now on.
|
||
|
561 - This capability is unknown, try anotherone
|
||
|
Description: This command tells the server to serve media data in a specific
|
||
|
format, like "PES" (for MPEG2-PES) or "TS" (for MPEG2-TS). A client can
|
||
|
do several CAPS commands until the server accepts one. So a client should
|
||
|
try all formats it can handle, descending from the most preffered one. If
|
||
|
no such command is sent, streaming is defaulted to PES.
|
||
|
Capabilities currently used:
|
||
|
TS Transport Stream (all PIDs belonging to a channel)
|
||
|
TSPIDS Only in conjunction with TS: Stream PIDs separately upon request
|
||
|
(this enables the ADDP/DELP commands)
|
||
|
PES Program Elementary stream (Video and primary Audio stream)
|
||
|
[new in 0.0.2,updated in 0.0.3]
|
||
|
|
||
|
Command: PROV <Priority> <Media>
|
||
|
Responses: 220 - Media available for receive
|
||
|
501 - The parameters were incorrect
|
||
|
550 - The media couldn't be identified
|
||
|
560 - This server can currently not serve that media
|
||
|
Description: With this command, the server is asked if the given media can
|
||
|
be received. The Priority is a number between 0 and 100 (in case a media
|
||
|
can not be received by an unlimited number of clients, the server shall
|
||
|
grant higher priorities before lower ones, and it shall also quit streams
|
||
|
with lower permissions if a higher one is requested), or -1 to ask the
|
||
|
server if this media is available at all.
|
||
|
The Media is a string defining the wanted media type. This is currently for
|
||
|
free use, it could for example carry a VDR unique channel id, to specify
|
||
|
a TV channel.
|
||
|
|
||
|
Command: PORT <Id> <Address and Port>
|
||
|
Responses: 220 - The data connection was opened
|
||
|
501 - The parameter list was wrong
|
||
|
551 - The data connection was refused by the client or timed out
|
||
|
Description: The PORT command tells the server the target of a following
|
||
|
media transmission. The parameter Id specifies an index which is used to
|
||
|
establish multiple data connections over one control connection. It is used
|
||
|
later in the ABRT command to close a specific data connection. The second
|
||
|
parameter argument has six comma-separated fields, of which the first four
|
||
|
represent the target IP address, in the byte-order as the dot-notation
|
||
|
would be printed. The last two fields represent the target port, with the
|
||
|
high-byte first. To calculate the actual values, you could use the
|
||
|
following:
|
||
|
Field(5) = (RealPort & 0xFF00) shr 8
|
||
|
Field(6) = RealPort & 0xFF
|
||
|
Reversed:
|
||
|
RealPort = (Field(5) shl 8) + Field(6)
|
||
|
After receiving the port command, the data connection is opened but no data
|
||
|
is transferred, yet.
|
||
|
Id's currently used:
|
||
|
0 Data connection for live streams
|
||
|
1 Data connection for saved streams
|
||
|
[changed in 0.0.3]
|
||
|
|
||
|
Command: TUNE <Priority> <Media>
|
||
|
Responses: 220 - Data connection was opened successfully
|
||
|
550 - The media couldn't be identified
|
||
|
560 - The live stream is unavailable
|
||
|
Description: This command tells the media server to start the transfer over a
|
||
|
connection to a remote target established by the PORT command before.
|
||
|
Please look at the PROV command for the meaning of the parameters. The
|
||
|
server begins to send MPEG data. After the transfer has been started, the
|
||
|
response code "220" is sent.
|
||
|
|
||
|
Command: ADDP <Pid>
|
||
|
Responses: 220 - The requested Pid is transferring
|
||
|
560 - The requested Pid is not available currently
|
||
|
Description: This tells the server to start the transfer of a specific Pid
|
||
|
over a data connection established by the PORT command before.
|
||
|
|
||
|
Command: DELP <Pid>
|
||
|
Responses: 220 - The requested Pid is transferring
|
||
|
560 - The requested Pid was not transferring
|
||
|
Description: This tells the server to stop the transfer of a specific Pid
|
||
|
enabled by DELP before.
|
||
|
|
||
|
Command: ABRT <Id>
|
||
|
Responses: 220 - Data connection closed
|
||
|
Description: This one should be sent before requesting another media or when
|
||
|
a media isn't needed anymore. It terminates the data connection previously
|
||
|
opened by PORT.
|
||
|
|
||
|
Command: QUIT
|
||
|
Responses: 221 - Connection is being closed afterwards
|
||
|
Description: This commands terminates the client connection.
|