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
		Add a link
		
	
		Reference in a new issue