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 SrsVideoCodecIdOn2VP6:
case SrsVideoCodecIdOn2VP6WithAlphaChannel: case SrsVideoCodecIdOn2VP6WithAlphaChannel:
return "VP6"; return "VP6";
case SrsVideoCodecIdHEVC:
return "HEVC";
case SrsVideoCodecIdReserved: case SrsVideoCodecIdReserved:
case SrsVideoCodecIdReserved1: case SrsVideoCodecIdReserved1:
case SrsVideoCodecIdReserved2: case SrsVideoCodecIdReserved2:
@ -60,6 +62,8 @@ string srs_audio_codec_id2str(SrsAudioCodecId codec)
return "AAC"; return "AAC";
case SrsAudioCodecIdMP3: case SrsAudioCodecIdMP3:
return "MP3"; return "MP3";
case SrsAudioCodecIdOpus:
return "Opus";
case SrsAudioCodecIdReserved1: case SrsAudioCodecIdReserved1:
case SrsAudioCodecIdLinearPCMPlatformEndian: case SrsAudioCodecIdLinearPCMPlatformEndian:
case SrsAudioCodecIdADPCM: case SrsAudioCodecIdADPCM:
@ -638,7 +642,7 @@ bool SrsFormat::is_aac_sequence_header()
bool SrsFormat::is_avc_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; && video && video->avc_packet_type == SrsVideoAvcFrameTraitSequenceHeader;
} }

View file

@ -60,6 +60,8 @@ enum SrsVideoCodecId
SrsVideoCodecIdOn2VP6WithAlphaChannel = 5, SrsVideoCodecIdOn2VP6WithAlphaChannel = 5,
SrsVideoCodecIdScreenVideoVersion2 = 6, SrsVideoCodecIdScreenVideoVersion2 = 6,
SrsVideoCodecIdAVC = 7, 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); std::string srs_video_codec_id2str(SrsVideoCodecId codec);
@ -152,6 +154,8 @@ enum SrsAudioCodecId
SrsAudioCodecIdReserved = 9, SrsAudioCodecIdReserved = 9,
SrsAudioCodecIdAAC = 10, SrsAudioCodecIdAAC = 10,
SrsAudioCodecIdSpeex = 11, SrsAudioCodecIdSpeex = 11,
// For FLV, it's undefined, we define it as Opus for WebRTC.
SrsAudioCodecIdOpus = 13,
SrsAudioCodecIdReservedMP3_8kHz = 14, SrsAudioCodecIdReservedMP3_8kHz = 14,
SrsAudioCodecIdReservedDeviceSpecificSound = 15, SrsAudioCodecIdReservedDeviceSpecificSound = 15,
}; };

View file

@ -320,6 +320,7 @@ srs_error_t SrsTsContext::encode(SrsFileWriter* writer, SrsTsMessage* msg, SrsVi
case SrsVideoCodecIdOn2VP6: case SrsVideoCodecIdOn2VP6:
case SrsVideoCodecIdOn2VP6WithAlphaChannel: case SrsVideoCodecIdOn2VP6WithAlphaChannel:
case SrsVideoCodecIdScreenVideoVersion2: case SrsVideoCodecIdScreenVideoVersion2:
case SrsVideoCodecIdHEVC:
vs = SrsTsStreamReserved; vs = SrsTsStreamReserved;
break; break;
} }
@ -348,6 +349,7 @@ srs_error_t SrsTsContext::encode(SrsFileWriter* writer, SrsTsMessage* msg, SrsVi
case SrsAudioCodecIdSpeex: case SrsAudioCodecIdSpeex:
case SrsAudioCodecIdReservedMP3_8kHz: case SrsAudioCodecIdReservedMP3_8kHz:
case SrsAudioCodecIdReservedDeviceSpecificSound: case SrsAudioCodecIdReservedDeviceSpecificSound:
case SrsAudioCodecIdOpus:
as = SrsTsStreamReserved; as = SrsTsStreamReserved;
break; 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 // E.4.3.1 VIDEODATA, flv_v10_1.pdf, page 5
p.write_1bytes(uint8_t(s->frame_type<<4) | uint8_t(s->codec)); 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; *type = SRS_RTMP_TYPE_VIDEO;
p.write_1bytes(uint8_t(s->frame_trait == (uint16_t)SrsVideoAvcFrameTraitSequenceHeader? 0:1)); p.write_1bytes(uint8_t(s->frame_trait == (uint16_t)SrsVideoAvcFrameTraitSequenceHeader? 0:1));