mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-22 19:00:01 +08:00
fixed build issue
This commit is contained in:
parent
2ffdfab71e
commit
e6838f24af
@ -18,17 +18,16 @@
|
|||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include "Transcode.h"
|
#include "Transcode.h"
|
||||||
#include "Common/config.h"
|
#include "Common/config.h"
|
||||||
#include "Extension/Opus.h"
|
#include "Extension/Factory.h"
|
||||||
#include "Extension/G711.h"
|
|
||||||
#include "Extension/H264.h"
|
|
||||||
#include "Extension/H265.h"
|
|
||||||
|
|
||||||
|
#define ADTS_HEADER_LEN 7
|
||||||
#define MAX_DELAY_SECOND 3
|
#define MAX_DELAY_SECOND 3
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace toolkit;
|
using namespace toolkit;
|
||||||
|
|
||||||
namespace mediakit {
|
namespace mediakit {
|
||||||
|
extern int dumpAacConfig(const string &config, size_t length, uint8_t *out, size_t out_size);
|
||||||
|
|
||||||
static string ffmpeg_err(int errnum) {
|
static string ffmpeg_err(int errnum) {
|
||||||
char errbuf[AV_ERROR_MAX_STRING_SIZE];
|
char errbuf[AV_ERROR_MAX_STRING_SIZE];
|
||||||
@ -1045,64 +1044,23 @@ void FFmpegEncoder::onEncode(AVPacket *packet) {
|
|||||||
// process frame
|
// process frame
|
||||||
if (!_cb)
|
if (!_cb)
|
||||||
return;
|
return;
|
||||||
switch (_codecId) {
|
if (_codecId == CodecAAC) {
|
||||||
case CodecH264: {
|
auto frame = FrameImp::create<>();
|
||||||
auto frame = FrameImp::create<H264Frame>();
|
frame->_codec_id = _codecId;
|
||||||
frame->_dts = packet->dts;
|
frame->_dts = packet->dts;
|
||||||
frame->_pts = packet->pts;
|
frame->_pts = packet->pts;
|
||||||
frame->_buffer.assign((const char *)packet->data, packet->size);
|
frame->_buffer.reserve(ADTS_HEADER_LEN + packet->size);
|
||||||
frame->_prefix_size = prefixSize((const char *)packet->data, packet->size);
|
if (_context && _context->extradata && _context->extradata_size) {
|
||||||
_cb(frame);
|
uint8_t adts[ADTS_HEADER_LEN];
|
||||||
break;
|
auto cfg = std::string((const char *)_context->extradata, _context->extradata_size);
|
||||||
|
dumpAacConfig(cfg, packet->size, adts, ADTS_HEADER_LEN);
|
||||||
|
frame->_prefix_size = ADTS_HEADER_LEN;
|
||||||
|
frame->_buffer.append((char*)adts, ADTS_HEADER_LEN);
|
||||||
}
|
}
|
||||||
case CodecH265: {
|
frame->_buffer.append((const char *)packet->data, packet->size);
|
||||||
auto frame = FrameImp::create<H265Frame>();
|
_cb(frame);
|
||||||
frame->_dts = packet->dts;
|
} else {
|
||||||
frame->_pts = packet->pts;
|
_cb(Factory::getFrameFromPtr(_codecId, (const char*)packet->data, packet->size, packet->dts, packet->pts));
|
||||||
frame->_buffer.assign((const char *)packet->data, packet->size);
|
|
||||||
frame->_prefix_size = prefixSize((const char *)packet->data, packet->size);
|
|
||||||
_cb(frame);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case CodecAAC: {
|
|
||||||
auto frame = FrameImp::create<>();
|
|
||||||
frame->_codec_id = _codecId;
|
|
||||||
frame->_dts = packet->dts;
|
|
||||||
frame->_pts = packet->pts;
|
|
||||||
frame->_buffer.reserve(ADTS_HEADER_LEN + packet->size);
|
|
||||||
if (_context && _context->extradata && _context->extradata_size) {
|
|
||||||
uint8_t adts[ADTS_HEADER_LEN];
|
|
||||||
auto cfg = std::string((const char *)_context->extradata, _context->extradata_size);
|
|
||||||
dumpAacConfig(cfg, packet->size, adts, ADTS_HEADER_LEN);
|
|
||||||
frame->_prefix_size = ADTS_HEADER_LEN;
|
|
||||||
frame->_buffer.append((char*)adts, ADTS_HEADER_LEN);
|
|
||||||
}
|
|
||||||
frame->_buffer.append((const char *)packet->data, packet->size);
|
|
||||||
_cb(frame);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case CodecOpus:
|
|
||||||
case CodecG711A:
|
|
||||||
case CodecG711U: {
|
|
||||||
auto frame = FrameImp::create<>();
|
|
||||||
frame->_codec_id = _codecId;
|
|
||||||
frame->_dts = packet->dts;
|
|
||||||
frame->_pts = packet->pts;
|
|
||||||
frame->_buffer.assign((const char *)packet->data, packet->size);
|
|
||||||
_cb(frame);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case CodecVP8:
|
|
||||||
case CodecVP9: {
|
|
||||||
auto frame = FrameImp::create<>();
|
|
||||||
frame->_codec_id = _codecId;
|
|
||||||
frame->_dts = packet->dts;
|
|
||||||
frame->_pts = packet->pts;
|
|
||||||
frame->_buffer.assign((const char *)packet->data, packet->size);
|
|
||||||
_cb(frame);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,34 +1,35 @@
|
|||||||
#include "Codec/Transcode.h"
|
#include "Codec/Transcode.h"
|
||||||
#include "Record/MP4Demuxer.h"
|
#include "Record/MP4Demuxer.h"
|
||||||
#include "Record/MP4Muxer.h"
|
#include "Record/MP4Muxer.h"
|
||||||
#include "Extension/AAC.h"
|
|
||||||
#include "Extension/Opus.h"
|
|
||||||
#include "Extension/G711.h"
|
|
||||||
#include "Util/logger.h"
|
#include "Util/logger.h"
|
||||||
|
|
||||||
using namespace mediakit;
|
using namespace mediakit;
|
||||||
struct TransCtx {
|
struct TransCtx {
|
||||||
using Ptr = std::shared_ptr<TransCtx>;
|
using Ptr = std::shared_ptr<TransCtx>;
|
||||||
TransCtx(const char *prefix, CodecId codec) {
|
TransCtx(const char *prefix, CodecId codec) {
|
||||||
char path[256];
|
char path[256];
|
||||||
Track::Ptr track;
|
int samplerate;
|
||||||
|
int channel = 1;
|
||||||
|
int bits = 16;
|
||||||
switch (codec) {
|
switch (codec) {
|
||||||
case CodecAAC:
|
case CodecAAC:
|
||||||
track.reset(new AACTrack(44100, 1));
|
samplerate = 44100;
|
||||||
sprintf(path, "%s_aac.mp4", prefix);
|
sprintf(path, "%s_aac.mp4", prefix);
|
||||||
break;
|
break;
|
||||||
case CodecOpus:
|
case CodecOpus:
|
||||||
track.reset(new OpusTrack());
|
samplerate = 48000;
|
||||||
sprintf(path, "%s_opus.mp4", prefix);
|
sprintf(path, "%s_opus.mp4", prefix);
|
||||||
break;
|
break;
|
||||||
case CodecG711A:
|
case CodecG711A:
|
||||||
case CodecG711U:
|
case CodecG711U:
|
||||||
track.reset(new G711Track(codec, 8000, 1, 16));
|
samplerate = 8000;
|
||||||
sprintf(path, "%s_711%c.mp4", prefix, codec == CodecG711A ? 'A' : 'U');
|
sprintf(path, "%s_711%c.mp4", prefix, codec == CodecG711A ? 'A' : 'U');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Track::Ptr track = std::make_shared<AudioTrackImp>(codec, samplerate, channel, bits);
|
||||||
file.reset(new MP4Muxer());
|
file.reset(new MP4Muxer());
|
||||||
file->openMP4(path);
|
file->openMP4(path);
|
||||||
file->addTrack(track);
|
file->addTrack(track);
|
||||||
|
@ -68,17 +68,11 @@ bool RtcMediaSourceMuxer::inputFrame(const Frame::Ptr &frame)
|
|||||||
switch (frame->getCodecId())
|
switch (frame->getCodecId())
|
||||||
{
|
{
|
||||||
case CodecAAC:
|
case CodecAAC:
|
||||||
if (frame->prefixSize()) {
|
track = Factory::getTrackByCodecId(CodecAAC, 44100, 2, 16);
|
||||||
std::string cfg = makeAacConfig((uint8_t *)(frame->data()), frame->prefixSize());
|
|
||||||
track = std::make_shared<AACTrack>(cfg);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
track = std::make_shared<AACTrack>(44100, 2);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CodecG711A:
|
case CodecG711A:
|
||||||
case CodecG711U:
|
case CodecG711U:
|
||||||
track.reset(new G711Track(frame->getCodecId()));
|
track = Factory::getTrackByCodecId(frame->getCodecId());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -116,7 +110,7 @@ bool RtcMediaSourceMuxer::addTrack(const Track::Ptr & track)
|
|||||||
{
|
{
|
||||||
Track::Ptr newTrack = track;
|
Track::Ptr newTrack = track;
|
||||||
if (_option.audio_transcode && needTransToOpus(track->getCodecId())) {
|
if (_option.audio_transcode && needTransToOpus(track->getCodecId())) {
|
||||||
newTrack = std::make_shared<OpusTrack>();
|
newTrack = Factory::getTrackByCodecId(CodecOpus);
|
||||||
GET_CONFIG(int, bitrate, General::kOpusBitrate);
|
GET_CONFIG(int, bitrate, General::kOpusBitrate);
|
||||||
newTrack->setBitRate(bitrate);
|
newTrack->setBitRate(bitrate);
|
||||||
_audio_dec.reset(new FFmpegDecoder(track));
|
_audio_dec.reset(new FFmpegDecoder(track));
|
||||||
@ -149,7 +143,7 @@ bool RtcMediaSourceImp::addTrack(const Track::Ptr &track)
|
|||||||
if (_muxer) {
|
if (_muxer) {
|
||||||
Track::Ptr newTrack = track;
|
Track::Ptr newTrack = track;
|
||||||
if (_option.audio_transcode && needTransToAac(track->getCodecId())) {
|
if (_option.audio_transcode && needTransToAac(track->getCodecId())) {
|
||||||
newTrack.reset(new AACTrack(44100, 2));
|
newTrack = Factory::getTrackByCodecId(CodecAAC, 44100, std::dynamic_pointer_cast<AudioTrack>(track)->getAudioChannel(), 16);
|
||||||
GET_CONFIG(int, bitrate, General::kAacBitrate);
|
GET_CONFIG(int, bitrate, General::kAacBitrate);
|
||||||
newTrack->setBitRate(bitrate);
|
newTrack->setBitRate(bitrate);
|
||||||
_audio_dec.reset(new FFmpegDecoder(track));
|
_audio_dec.reset(new FFmpegDecoder(track));
|
||||||
|
Loading…
Reference in New Issue
Block a user