完善对无metadata的rtmp流的兼容性

This commit is contained in:
xiongziliang
2020-05-28 17:03:12 +08:00
parent e7f263b046
commit 41509800bc
10 changed files with 88 additions and 87 deletions

View File

@@ -13,60 +13,56 @@
namespace mediakit {
void RtmpDemuxer::loadMetaData(const AMFValue &val){
bool RtmpDemuxer::loadMetaData(const AMFValue &val){
bool ret = false;
try {
int audiosamplerate = 0;
int audiochannels = 0;
int audiosamplesize = 0;
const AMFValue *audiocodecid = nullptr;
const AMFValue *videocodecid = nullptr;
val.object_for_each([&](const string &key, const AMFValue &val) {
if (key == "duration") {
_fDuration = val.as_number();
return;
}
if(key == "audiosamplerate"){
if (key == "audiosamplerate") {
audiosamplerate = val.as_integer();
return;
}
if(key == "audiosamplesize"){
if (key == "audiosamplesize") {
audiosamplesize = val.as_integer();
return;
}
if(key == "stereo"){
if (key == "stereo") {
audiochannels = val.as_boolean() ? 2 : 1;
return;
}
if(key == "videocodecid"){
if (key == "videocodecid") {
//找到视频
videocodecid = &val;
return;
}
if(key == "audiocodecid"){
if (key == "audiocodecid") {
//找到音频
audiocodecid = &val;
return;
}
});
if(videocodecid){
if (videocodecid) {
//有视频
ret = true;
makeVideoTrack(*videocodecid);
}
if(audiocodecid){
if (audiocodecid) {
//有音频
ret = true;
makeAudioTrack(*audiocodecid, audiosamplerate, audiochannels, audiosamplesize);
}
}catch (std::exception &ex){
} catch (std::exception &ex) {
WarnL << ex.what();
}
return ret;
}
bool RtmpDemuxer::inputRtmp(const RtmpPacket::Ptr &pkt) {
@@ -105,7 +101,7 @@ void RtmpDemuxer::makeVideoTrack(const AMFValue &videoCodec) {
_videoTrack = dynamic_pointer_cast<VideoTrack>(Factory::getVideoTrackByAmf(videoCodec));
if (_videoTrack) {
//生成rtmpCodec对象以便解码rtmp
_videoRtmpDecoder = Factory::getRtmpCodecByTrack(_videoTrack);
_videoRtmpDecoder = Factory::getRtmpCodecByTrack(_videoTrack, false);
if (_videoRtmpDecoder) {
//设置rtmp解码器代理生成的frame写入该Track
_videoRtmpDecoder->addDelegate(_videoTrack);
@@ -123,7 +119,7 @@ void RtmpDemuxer::makeAudioTrack(const AMFValue &audioCodec,int sample_rate, int
_audioTrack = dynamic_pointer_cast<AudioTrack>(Factory::getAudioTrackByAmf(audioCodec, sample_rate, channels, sample_bit));
if (_audioTrack) {
//生成rtmpCodec对象以便解码rtmp
_audioRtmpDecoder = Factory::getRtmpCodecByTrack(_audioTrack);
_audioRtmpDecoder = Factory::getRtmpCodecByTrack(_audioTrack, false);
if (_audioRtmpDecoder) {
//设置rtmp解码器代理生成的frame写入该Track
_audioRtmpDecoder->addDelegate(_audioTrack);