diff --git a/src/Common/Factory.cpp b/src/Common/Factory.cpp index 98a3e31f..0d5eee29 100644 --- a/src/Common/Factory.cpp +++ b/src/Common/Factory.cpp @@ -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 diff --git a/src/Common/Factory.h b/src/Common/Factory.h index 458a0572..407190a6 100644 --- a/src/Common/Factory.h +++ b/src/Common/Factory.h @@ -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); }; diff --git a/src/RtmpMuxer/RtmpMetedata.cpp b/src/RtmpMuxer/RtmpMetedata.cpp new file mode 100644 index 00000000..20238afb --- /dev/null +++ b/src/RtmpMuxer/RtmpMetedata.cpp @@ -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 \ No newline at end of file diff --git a/src/RtmpMuxer/RtmpMetedata.h b/src/RtmpMuxer/RtmpMetedata.h new file mode 100644 index 00000000..9e3cae42 --- /dev/null +++ b/src/RtmpMuxer/RtmpMetedata.h @@ -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 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 &header = map()){ + _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 diff --git a/src/RtspMuxer/RtspSdp.h b/src/RtspMuxer/RtspSdp.h index c7363272..ce766658 100644 --- a/src/RtspMuxer/RtspSdp.h +++ b/src/RtspMuxer/RtspSdp.h @@ -34,7 +34,7 @@ namespace mediakit { /** -* sdp基类 +* rtsp sdp基类 */ class Sdp : public CodecInfo{ public: