I try to develop some kind of DLNA Media Server in C++ running on Linux. Currently, i struggle at generating the needed DLNA.ORG_FLAGS value. I found the following help on the internet:
/* DLNA.ORG_FLAGS, padded with 24 trailing 0s
* 80000000 31 senderPaced
* 40000000 30 lsopTimeBasedSeekSupported
* 20000000 29 lsopByteBasedSeekSupported
* 10000000 28 playcontainerSupported
* 8000000 27 s0IncreasingSupported
* 4000000 26 sNIncreasingSupported
* 2000000 25 rtspPauseSupported
* 1000000 24 streamingTransferModeSupported
* 800000 23 interactiveTransferModeSupported
* 400000 22 backgroundTransferModeSupported
* 200000 21 connectionStallingSupported
* 100000 20 dlnaVersion15Supported
*
* Example: (1 << 24) | (1 << 22) | (1 << 21) | (1 << 20)
* DLNA.ORG_FLAGS=01700000[000000000000000000000000] // [] show padding
*/
typedef enum {
DLNA_ORG_FLAG_SENDER_PACED = (1 << 31),
DLNA_ORG_FLAG_TIME_BASED_SEEK = (1 << 30),
DLNA_ORG_FLAG_BYTE_BASED_SEEK = (1 << 29),
DLNA_ORG_FLAG_PLAY_CONTAINER = (1 << 28),
DLNA_ORG_FLAG_S0_INCREASE = (1 << 27),
DLNA_ORG_FLAG_SN_INCREASE = (1 << 26),
DLNA_ORG_FLAG_RTSP_PAUSE = (1 << 25),
DLNA_ORG_FLAG_STREAMING_TRANSFER_MODE = (1 << 24),
DLNA_ORG_FLAG_INTERACTIVE_TRANSFERT_MODE = (1 << 23),
DLNA_ORG_FLAG_BACKGROUND_TRANSFERT_MODE = (1 << 22),
DLNA_ORG_FLAG_CONNECTION_STALL = (1 << 21),
DLNA_ORG_FLAG_DLNA_V15 = (1 << 20),
} dlna_org_flags_t;
But now i can't figure out how to get a String containing the needed "DLNA.ORG_FLAGS=xxxx". So my question is how can i get the needed string out of this values?
Just in case someone has the same trouble with this. Here is the solution i came up with:
typedef enum
{
DLNA_ORG_FLAG_SENDER_PACED = (1 << 31),
DLNA_ORG_FLAG_TIME_BASED_SEEK = (1 << 30),
DLNA_ORG_FLAG_BYTE_BASED_SEEK = (1 << 29),
DLNA_ORG_FLAG_PLAY_CONTAINER = (1 << 28),
DLNA_ORG_FLAG_S0_INCREASE = (1 << 27),
DLNA_ORG_FLAG_SN_INCREASE = (1 << 26),
DLNA_ORG_FLAG_RTSP_PAUSE = (1 << 25),
DLNA_ORG_FLAG_STREAMING_TRANSFER_MODE = (1 << 24),
DLNA_ORG_FLAG_INTERACTIVE_TRANSFERT_MODE = (1 << 23),
DLNA_ORG_FLAG_BACKGROUND_TRANSFERT_MODE = (1 << 22),
DLNA_ORG_FLAG_CONNECTION_STALL = (1 << 21),
DLNA_ORG_FLAG_DLNA_V15 = (1 << 20)
} dlna_org_flags;
std::string dlnaFlags = "";
char dlna_info[448];
sprintf(dlna_info, "%s=%.8x%.24x", "DLNA.ORG_FLAGS", DLNA_ORG_FLAG_TIME_BASED_SEEK | DLNA_ORG_FLAG_BYTE_BASED_SEEK | DLNA_ORG_FLAG_STREAMING_TRANSFER_MODE), 0);
dlnaFlags = std::string(dlna_info);
Now as this example shows, this code makes the string "dlnaFlags" contain the needed String "DLNA.ORG_FLAGS=xxxx". With time based seek, byte based seek and streaming transfer mode as an example.