1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Add codec OPUS/HEVC to FLV

This commit is contained in:
winlin 2019-01-17 09:24:17 +08:00
parent b2d1d84634
commit e77b570636
4 changed files with 12 additions and 2 deletions

View file

@ -41,6 +41,8 @@ string srs_video_codec_id2str(SrsVideoCodecId codec)
case SrsVideoCodecIdOn2VP6:
case SrsVideoCodecIdOn2VP6WithAlphaChannel:
return "VP6";
case SrsVideoCodecIdHEVC:
return "HEVC";
case SrsVideoCodecIdReserved:
case SrsVideoCodecIdReserved1:
case SrsVideoCodecIdReserved2:
@ -60,6 +62,8 @@ string srs_audio_codec_id2str(SrsAudioCodecId codec)
return "AAC";
case SrsAudioCodecIdMP3:
return "MP3";
case SrsAudioCodecIdOpus:
return "Opus";
case SrsAudioCodecIdReserved1:
case SrsAudioCodecIdLinearPCMPlatformEndian:
case SrsAudioCodecIdADPCM:
@ -638,7 +642,7 @@ bool SrsFormat::is_aac_sequence_header()
bool SrsFormat::is_avc_sequence_header()
{
return vcodec && vcodec->id == SrsVideoCodecIdAVC
return vcodec && (vcodec->id == SrsVideoCodecIdAVC || vcodec->id == SrsVideoCodecIdHEVC)
&& video && video->avc_packet_type == SrsVideoAvcFrameTraitSequenceHeader;
}

View file

@ -60,6 +60,8 @@ enum SrsVideoCodecId
SrsVideoCodecIdOn2VP6WithAlphaChannel = 5,
SrsVideoCodecIdScreenVideoVersion2 = 6,
SrsVideoCodecIdAVC = 7,
// See page 79 at @doc https://github.com/CDN-Union/H265/blob/master/Document/video_file_format_spec_v10_1_ksyun_20170615.doc
SrsVideoCodecIdHEVC = 12,
};
std::string srs_video_codec_id2str(SrsVideoCodecId codec);
@ -152,6 +154,8 @@ enum SrsAudioCodecId
SrsAudioCodecIdReserved = 9,
SrsAudioCodecIdAAC = 10,
SrsAudioCodecIdSpeex = 11,
// For FLV, it's undefined, we define it as Opus for WebRTC.
SrsAudioCodecIdOpus = 13,
SrsAudioCodecIdReservedMP3_8kHz = 14,
SrsAudioCodecIdReservedDeviceSpecificSound = 15,
};

View file

@ -320,6 +320,7 @@ srs_error_t SrsTsContext::encode(SrsFileWriter* writer, SrsTsMessage* msg, SrsVi
case SrsVideoCodecIdOn2VP6:
case SrsVideoCodecIdOn2VP6WithAlphaChannel:
case SrsVideoCodecIdScreenVideoVersion2:
case SrsVideoCodecIdHEVC:
vs = SrsTsStreamReserved;
break;
}
@ -348,6 +349,7 @@ srs_error_t SrsTsContext::encode(SrsFileWriter* writer, SrsTsMessage* msg, SrsVi
case SrsAudioCodecIdSpeex:
case SrsAudioCodecIdReservedMP3_8kHz:
case SrsAudioCodecIdReservedDeviceSpecificSound:
case SrsAudioCodecIdOpus:
as = SrsTsStreamReserved;
break;
}

View file

@ -1666,7 +1666,7 @@ int srs_mp4_to_flv_tag(srs_mp4_t mp4, srs_mp4_sample_t* s, char* type, uint32_t*
// E.4.3.1 VIDEODATA, flv_v10_1.pdf, page 5
p.write_1bytes(uint8_t(s->frame_type<<4) | uint8_t(s->codec));
if (s->codec == SrsVideoCodecIdAVC) {
if (s->codec == SrsVideoCodecIdAVC || s->codec == SrsVideoCodecIdHEVC) {
*type = SRS_RTMP_TYPE_VIDEO;
p.write_1bytes(uint8_t(s->frame_trait == (uint16_t)SrsVideoAvcFrameTraitSequenceHeader? 0:1));