Commit c8f00cef by ziyue

完善获取flv是否包含音视频相关逻辑

parent fe42ea30
......@@ -67,7 +67,7 @@ BufferRaw::Ptr FlvMuxer::obtainBuffer(const void *data, size_t len) {
return buffer;
}
void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &mediaSrc) {
void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &src) {
//发送flv文件头
auto buffer = BufferRaw::create();
buffer->setCapacity(sizeof(FLVHeader));
......@@ -80,15 +80,8 @@ void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &mediaSrc) {
header->flv[2] = 'V';
header->version = 1;
header->length = htonl(9);
mediaSrc->getConfigFrame([&](const RtmpPacket::Ptr &pkt) {
if (pkt->type_id == MSG_VIDEO) {
header->have_video = 1;
}
if (pkt->type_id == MSG_AUDIO) {
header->have_audio = 1;
}
});
header->have_video = src->haveVideo();
header->have_audio = src->haveAudio();
//flv header
onWrite(buffer, false);
......@@ -97,7 +90,7 @@ void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &mediaSrc) {
auto size = htonl(0);
onWrite(obtainBuffer((char *) &size, 4), false);
auto &metadata = mediaSrc->getMetaData();
auto &metadata = src->getMetaData();
if (metadata) {
//在有metadata的情况下才发送metadata
//其实metadata没什么用,有些推流器不产生metadata
......@@ -107,7 +100,7 @@ void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &mediaSrc) {
}
//config frame
mediaSrc->getConfigFrame([&](const RtmpPacket::Ptr &pkt) {
src->getConfigFrame([&](const RtmpPacket::Ptr &pkt) {
onWriteRtmp(pkt, true);
});
}
......
......@@ -34,7 +34,7 @@ protected:
virtual std::shared_ptr<FlvMuxer> getSharedPtr() = 0;
private:
void onWriteFlvHeader(const RtmpMediaSource::Ptr &media);
void onWriteFlvHeader(const RtmpMediaSource::Ptr &src);
void onWriteRtmp(const RtmpPacket::Ptr &pkt, bool flush);
void onWriteFlvTag(const RtmpPacket::Ptr &pkt, uint32_t time_stamp, bool flush);
void onWriteFlvTag(uint8_t type, const Buffer::Ptr &buffer, uint32_t time_stamp, bool flush);
......
......@@ -102,6 +102,8 @@ public:
virtual void setMetaData(const AMFValue &metadata) {
_metadata = metadata;
_metadata.set("server", SERVER_NAME);
_have_video = _metadata["videocodecid"];
_have_audio = _metadata["audiocodecid"];
if (_ring) {
regist();
}
......@@ -125,7 +127,7 @@ public:
//保存当前时间戳
switch (pkt->type_id) {
case MSG_VIDEO : _track_stamps[TrackVideo] = pkt->time_stamp, _have_video = true; break;
case MSG_AUDIO : _track_stamps[TrackAudio] = pkt->time_stamp; break;
case MSG_AUDIO : _track_stamps[TrackAudio] = pkt->time_stamp, _have_audio = true; break;
default : break;
}
......@@ -187,6 +189,14 @@ public:
_ring->clearCache();
}
bool haveVideo() const {
return _have_video;
}
bool haveAudio() const {
return _have_audio;
}
private:
/**
* 批量flush rtmp包时触发该函数
......@@ -200,6 +210,7 @@ private:
private:
bool _have_video = false;
bool _have_audio = false;
int _ring_size;
uint32_t _track_stamps[TrackMax] = {0};
AMFValue _metadata;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论