Initial RTMP DTSC2 support.
This commit is contained in:
parent
849bc24557
commit
3f2c876a7e
1 changed files with 37 additions and 7 deletions
|
@ -37,7 +37,9 @@ namespace Connector_RTMP {
|
||||||
|
|
||||||
//generic state keeping
|
//generic state keeping
|
||||||
bool streamInited = false;///<Indicates whether init data for audio/video was sent.
|
bool streamInited = false;///<Indicates whether init data for audio/video was sent.
|
||||||
|
int videoID = -1;
|
||||||
|
int audioID = -1;
|
||||||
|
|
||||||
Socket::Connection Socket; ///< A copy of the user socket to allow helper functions to directly send data.
|
Socket::Connection Socket; ///< A copy of the user socket to allow helper functions to directly send data.
|
||||||
Socket::Connection ss; ///< Socket connected to server.
|
Socket::Connection ss; ///< Socket connected to server.
|
||||||
std::string streamName; ///< Stream that will be opened.
|
std::string streamName; ///< Stream that will be opened.
|
||||||
|
@ -547,7 +549,35 @@ namespace Connector_RTMP {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ss.setBlocking(false);
|
ss.setBlocking(false);
|
||||||
ss.SendNow("p\n");
|
|
||||||
|
//assure metadata is received
|
||||||
|
while ( !Strm.metadata){
|
||||||
|
if (ss.spool()){
|
||||||
|
Strm.parsePacket(ss.Received()); //read the metadata
|
||||||
|
}else{
|
||||||
|
Util::sleep(5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//find first audio and video tracks
|
||||||
|
for (JSON::ObjIter objIt = Strm.metadata["tracks"].ObjBegin(); objIt != Strm.metadata["tracks"].ObjEnd(); objIt++){
|
||||||
|
if (videoID == -1 && objIt->second["type"].asString() == "video"){
|
||||||
|
videoID = objIt->second["trackid"].asInt();
|
||||||
|
}
|
||||||
|
if (audioID == -1 && objIt->second["type"].asString() == "audio"){
|
||||||
|
audioID = objIt->second["trackid"].asInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//select the tracks and play
|
||||||
|
std::stringstream cmd;
|
||||||
|
cmd << "t";
|
||||||
|
if (videoID != -1){
|
||||||
|
cmd << " " << videoID;
|
||||||
|
}
|
||||||
|
if (audioID != -1){
|
||||||
|
cmd << " " << audioID;
|
||||||
|
}
|
||||||
|
cmd << "\np\n";
|
||||||
|
ss.SendNow(cmd.str().c_str());
|
||||||
inited = true;
|
inited = true;
|
||||||
}
|
}
|
||||||
if (inited && !noStats){
|
if (inited && !noStats){
|
||||||
|
@ -599,14 +629,14 @@ namespace Connector_RTMP {
|
||||||
|
|
||||||
//sent init data if needed
|
//sent init data if needed
|
||||||
if ( !streamInited){
|
if ( !streamInited){
|
||||||
init_tag.DTSCMetaInit(Strm);
|
init_tag.DTSCMetaInit(Strm, Strm.getTrackById(videoID), Strm.getTrackById(audioID));
|
||||||
Socket.SendNow(RTMPStream::SendMedia(init_tag));
|
Socket.SendNow(RTMPStream::SendMedia(init_tag));
|
||||||
if (Strm.metadata.isMember("audio") && Strm.metadata["audio"].isMember("init")){
|
if (audioID != -1 && Strm.getTrackById(audioID).isMember("init")){
|
||||||
init_tag.DTSCAudioInit(Strm);
|
init_tag.DTSCAudioInit(Strm.getTrackById(audioID));
|
||||||
Socket.SendNow(RTMPStream::SendMedia(init_tag));
|
Socket.SendNow(RTMPStream::SendMedia(init_tag));
|
||||||
}
|
}
|
||||||
if (Strm.metadata.isMember("video") && Strm.metadata["video"].isMember("init")){
|
if (videoID != -1 && Strm.getTrackById(videoID).isMember("init")){
|
||||||
init_tag.DTSCVideoInit(Strm);
|
init_tag.DTSCVideoInit(Strm.getTrackById(videoID));
|
||||||
Socket.SendNow(RTMPStream::SendMedia(init_tag));
|
Socket.SendNow(RTMPStream::SendMedia(init_tag));
|
||||||
}
|
}
|
||||||
streamInited = true;
|
streamInited = true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue