完成Rtmp Metedata对象

This commit is contained in:
xiongziliang 2018-10-25 14:49:47 +08:00
parent 1e0db96457
commit 37dc3c2946
5 changed files with 197 additions and 1 deletions

View File

@ -208,6 +208,18 @@ RtmpCodec::Ptr Factory::getRtmpCodecByTrack(const Track::Ptr &track) {
}
}
AMFValue Factory::getAmfByCodecId(CodecId codecId) {
switch (codecId){
case CodecAAC:{
return AMFValue("mp4a");
}
case CodecH264:{
return AMFValue("avc1");
}
default:
return AMFValue(AMF_NULL);
}
}
}//namespace mediakit

View File

@ -111,6 +111,14 @@ public:
* @return
*/
static RtmpCodec::Ptr getRtmpCodecByTrack(const Track::Ptr &track);
/**
* codecId获取rtmp的codec描述
* @param codecId
* @return
*/
static AMFValue getAmfByCodecId(CodecId codecId);
};

View File

@ -0,0 +1,30 @@
/*
* MIT License
*
* Copyright (c) 2016 xiongziliang <771730766@qq.com>
*
* This file is part of ZLMediaKit(https://github.com/xiongziliang/ZLMediaKit).
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include "RtmpMetedata.h"
namespace mediakit {
}//namespace mediakit

View File

@ -0,0 +1,146 @@
/*
* MIT License
*
* Copyright (c) 2016 xiongziliang <771730766@qq.com>
*
* This file is part of ZLMediaKit(https://github.com/xiongziliang/ZLMediaKit).
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef ZLMEDIAKIT_RTMPMETEDATA_H
#define ZLMEDIAKIT_RTMPMETEDATA_H
#include "RtmpMuxer/H264RtmpCodec.h"
#include "RtmpMuxer/AACRtmpCodec.h"
#include "Util/base64.h"
#include "Player/Track.h"
#include "Rtmp/amf.h"
#include "Common/Factory.h"
namespace mediakit {
/**
* rtmp metedata基类rtmp格式信息
*/
class Metedata : public CodecInfo{
public:
typedef std::shared_ptr<Metedata> Ptr;
Metedata():_metedata(AMF_OBJECT){}
virtual ~Metedata(){}
const AMFValue &getMetedata() const{
return _metedata;
}
protected:
AMFValue _metedata;
};
/**
* metedata中除音视频外的其他描述部分
*/
class TitleMete : public Metedata{
public:
TitleMete(float dur_sec = 0,
uint64_t fileSize = 0,
const map<string,string> &header = map<string,string>()){
_metedata.set("duration", dur_sec);
_metedata.set("fileSize", 0);
_metedata.set("server","ZLMediaKit");
for (auto &pr : header){
_metedata.set(pr.first, pr.second);
}
}
/**
*
* @return
*/
TrackType getTrackType() const override {
return TrackInvalid;
}
/**
* id
* @return
*/
CodecId getCodecId() const override{
return CodecInvalid;
}
};
class VideoMete : public Metedata{
public:
VideoMete(const VideoTrack::Ptr &video,int datarate = 5000){
_metedata.set("width", video->getVideoWidth());
_metedata.set("height", video->getVideoHeight());
_metedata.set("videodatarate", datarate);
_metedata.set("framerate", video->getVideoFps());
_metedata.set("videocodecid", Factory::getAmfByCodecId(video->getCodecId())); //h.264
}
virtual ~VideoMete(){}
};
class AudioMete : public Metedata{
public:
AudioMete(const AudioTrack::Ptr &audio,int datarate = 160){
_metedata.set("audiodatarate", datarate);
_metedata.set("audiosamplerate", audio->getAudioSampleRate());
_metedata.set("audiosamplesize", audio->getAudioSampleBit());
_metedata.set("audiochannels", audio->getAudioChannel());
_metedata.set("stereo", audio->getAudioChannel() > 1);
_metedata.set("audiocodecid", Factory::getAmfByCodecId(audio->getCodecId())); //aac
}
virtual ~AudioMete(){}
};
}//namespace mediakit
#endif //ZLMEDIAKIT_RTMPMETEDATA_H

View File

@ -34,7 +34,7 @@
namespace mediakit {
/**
* sdp基类
* rtsp sdp基类
*/
class Sdp : public CodecInfo{
public: