Added PCM support to RTSP
This commit is contained in:
parent
6595059737
commit
f46d2a0c4a
2 changed files with 58 additions and 8 deletions
|
@ -60,6 +60,7 @@ namespace Mist {
|
|||
capa["codecs"][0u][1u].append("MP3");
|
||||
capa["codecs"][0u][1u].append("AC3");
|
||||
capa["codecs"][0u][1u].append("ALAW");
|
||||
capa["codecs"][0u][1u].append("PCM");
|
||||
capa["codecs"][0u][1u].append("opus");
|
||||
|
||||
capa["methods"][0u]["handler"] = "rtsp";
|
||||
|
@ -516,14 +517,7 @@ namespace Mist {
|
|||
if (!tracks[track].firstTime){
|
||||
tracks[track].firstTime = pkt.getTimeStamp() + 1;
|
||||
}
|
||||
if (myMeta.tracks[track].codec == "ALAW"){
|
||||
char * pl = pkt.getPayload();
|
||||
DTSC::Packet nextPack;
|
||||
nextPack.genericFill((pkt.getTimeStamp() - tracks[track].firstTime + 1) / ((double)myMeta.tracks[track].rate / 1000.0), 0, track, pl, pkt.getPayloadSize(), 0, false);
|
||||
bufferLivePacket(nextPack);
|
||||
return;
|
||||
}
|
||||
if (myMeta.tracks[track].codec == "opus"){
|
||||
if (myMeta.tracks[track].codec == "ALAW" || myMeta.tracks[track].codec == "opus" || myMeta.tracks[track].codec == "MP3" || myMeta.tracks[track].codec == "PCM"){
|
||||
char * pl = pkt.getPayload();
|
||||
DTSC::Packet nextPack;
|
||||
nextPack.genericFill((pkt.getTimeStamp() - tracks[track].firstTime + 1) / ((double)myMeta.tracks[track].rate / 1000.0), 0, track, pl, pkt.getPayloadSize(), 0, false);
|
||||
|
@ -555,6 +549,10 @@ namespace Mist {
|
|||
//Prints a WARN-level message if packet type is unsupported.
|
||||
/// \todo Support other H264 packets types?
|
||||
char * pl = pkt.getPayload();
|
||||
if (!pkt.getPayloadSize()){
|
||||
WARN_MSG("Empty packet ignored!");
|
||||
return;
|
||||
}
|
||||
if ((pl[0] & 0x1F) == 0){
|
||||
WARN_MSG("H264 packet type null ignored");
|
||||
return;
|
||||
|
@ -755,6 +753,24 @@ namespace Mist {
|
|||
thisTrack->channels = 1;
|
||||
INFO_MSG("Incoming track %s", thisTrack->getIdentifier().c_str());
|
||||
break;
|
||||
case 10: //PCM Stereo, 44.1kHz
|
||||
INFO_MSG("Linear PCM stereo 44.1kHz payload type");
|
||||
nope = false;
|
||||
thisTrack->codec = "PCM";
|
||||
thisTrack->size = 16;
|
||||
thisTrack->rate = 44100;
|
||||
thisTrack->channels = 2;
|
||||
INFO_MSG("Incoming track %s", thisTrack->getIdentifier().c_str());
|
||||
break;
|
||||
case 11: //PCM Mono, 44.1kHz
|
||||
INFO_MSG("Linear PCM mono 44.1kHz payload type");
|
||||
nope = false;
|
||||
thisTrack->codec = "PCM";
|
||||
thisTrack->rate = 44100;
|
||||
thisTrack->size = 16;
|
||||
thisTrack->channels = 1;
|
||||
INFO_MSG("Incoming track %s", thisTrack->getIdentifier().c_str());
|
||||
break;
|
||||
default:
|
||||
//dynamic type
|
||||
if (avp_type >= 96 && avp_type <= 127){
|
||||
|
@ -795,6 +811,22 @@ namespace Mist {
|
|||
thisTrack->init = std::string("OpusHead\001\002\170\000\200\273\000\000\000\000\000", 19);
|
||||
}
|
||||
if (trCodec == "PCMA"){thisTrack->codec = "ALAW";}
|
||||
if (trCodec == "L8"){
|
||||
thisTrack->codec = "PCM";
|
||||
thisTrack->size = 8;
|
||||
}
|
||||
if (trCodec == "L16"){
|
||||
thisTrack->codec = "PCM";
|
||||
thisTrack->size = 16;
|
||||
}
|
||||
if (trCodec == "L20"){
|
||||
thisTrack->codec = "PCM";
|
||||
thisTrack->size = 20;
|
||||
}
|
||||
if (trCodec == "L24"){
|
||||
thisTrack->codec = "PCM";
|
||||
thisTrack->size = 24;
|
||||
}
|
||||
if (trCodec == "MPEG4-GENERIC"){thisTrack->codec = "AAC";}
|
||||
INFO_MSG("Incoming track %s", thisTrack->getIdentifier().c_str());
|
||||
continue;
|
||||
|
|
|
@ -96,6 +96,16 @@ namespace Mist {
|
|||
mediaDesc << "a=rtpmap:101 PCMA/" << trk.rate << "/" << trk.channels << "\r\n";
|
||||
}
|
||||
mediaDesc << "a=control:track" << trk.trackID << "\r\n";
|
||||
}else if ( trk.codec == "PCM") {
|
||||
if (trk.size == 16 && trk.channels == 2 && trk.rate == 44100){
|
||||
mediaDesc << "m=audio 0 RTP/AVP 10" << "\r\n";
|
||||
} else if (trk.size == 16 && trk.channels == 1 && trk.rate == 44100){
|
||||
mediaDesc << "m=audio 0 RTP/AVP 11" << "\r\n";
|
||||
}else{
|
||||
mediaDesc << "m=audio 0 RTP/AVP 103" << "\r\n";
|
||||
mediaDesc << "a=rtpmap:103 L" << trk.size << "/" << trk.rate << "/" << trk.channels << "\r\n";
|
||||
}
|
||||
mediaDesc << "a=control:track" << trk.trackID << "\r\n";
|
||||
}else if ( trk.codec == "opus") {
|
||||
mediaDesc << "m=audio 0 RTP/AVP 102" << "\r\n"
|
||||
"a=rtpmap:102 opus/" << trk.rate << "/" << trk.channels << "\r\n"
|
||||
|
@ -119,6 +129,14 @@ namespace Mist {
|
|||
}else{
|
||||
pack = RTP::Packet(101, 1, 0, SSrc);
|
||||
}
|
||||
}else if ( trk.codec == "PCM") {
|
||||
if (trk.size == 16 && trk.channels == 2 && trk.rate == 44100){
|
||||
pack = RTP::Packet(10, 1, 0, SSrc);
|
||||
} else if (trk.size == 16 && trk.channels == 1 && trk.rate == 44100){
|
||||
pack = RTP::Packet(11, 1, 0, SSrc);
|
||||
}else{
|
||||
pack = RTP::Packet(103, 1, 0, SSrc);
|
||||
}
|
||||
}else if(trk.codec == "opus"){
|
||||
pack = RTP::Packet(102, 1, 0, SSrc);
|
||||
}else{
|
||||
|
|
Loading…
Add table
Reference in a new issue