mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-30 06:42:22 +08:00
优化编解码相关代码
This commit is contained in:
@@ -28,22 +28,22 @@ using namespace std;
|
||||
|
||||
namespace mediakit {
|
||||
|
||||
bool DevChannel::inputYUV(char* apcYuv[3], int aiYuvLen[3], uint32_t uiStamp) {
|
||||
bool DevChannel::inputYUV(char *yuv[3], int linesize[3], uint32_t cts) {
|
||||
#ifdef ENABLE_X264
|
||||
//TimeTicker1(50);
|
||||
if (!_pH264Enc) {
|
||||
_pH264Enc.reset(new H264Encoder());
|
||||
if (!_pH264Enc->init(_video->iWidth, _video->iHeight, _video->iFrameRate)) {
|
||||
if (!_pH264Enc->init(_video->iWidth, _video->iHeight, _video->iFrameRate, _video->iBitRate)) {
|
||||
_pH264Enc.reset();
|
||||
WarnL << "H264Encoder init failed!";
|
||||
}
|
||||
}
|
||||
if (_pH264Enc) {
|
||||
H264Encoder::H264Frame *pOut;
|
||||
int iFrames = _pH264Enc->inputData(apcYuv, aiYuvLen, uiStamp, &pOut);
|
||||
H264Encoder::H264Frame *out_frames;
|
||||
int frames = _pH264Enc->inputData(yuv, linesize, cts, &out_frames);
|
||||
bool ret = false;
|
||||
for (int i = 0; i < iFrames; i++) {
|
||||
ret = inputH264((char *) pOut[i].pucData, pOut[i].iLength, uiStamp) ? true : ret;
|
||||
for (int i = 0; i < frames; i++) {
|
||||
ret = inputH264((char *) out_frames[i].pucData, out_frames[i].iLength, cts) ? true : ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
int iWidth;
|
||||
int iHeight;
|
||||
float iFrameRate;
|
||||
int iBitRate = 2 * 1024 * 1024;
|
||||
};
|
||||
|
||||
class AudioInfo {
|
||||
@@ -104,19 +105,19 @@ public:
|
||||
|
||||
/**
|
||||
* 输入yuv420p视频帧,内部会完成编码并调用inputH264方法
|
||||
* @param apcYuv
|
||||
* @param aiYuvLen
|
||||
* @param uiStamp
|
||||
* @param yuv yuv420p数据指针
|
||||
* @param linesize yuv420p数据linesize
|
||||
* @param cts 采集时间戳,单位毫秒
|
||||
*/
|
||||
bool inputYUV(char *apcYuv[3], int aiYuvLen[3], uint32_t uiStamp);
|
||||
bool inputYUV(char *yuv[3], int linesize[3], uint32_t cts);
|
||||
|
||||
/**
|
||||
* 输入pcm数据,内部会完成编码并调用inputAAC方法
|
||||
* @param pcData
|
||||
* @param iDataLen
|
||||
* @param uiStamp
|
||||
* @param data pcm数据指针,int16整形
|
||||
* @param len pcm数据长度
|
||||
* @param cts 采集时间戳,单位毫秒
|
||||
*/
|
||||
bool inputPCM(char *pcData, int iDataLen, uint32_t uiStamp);
|
||||
bool inputPCM(char *data, int len, uint32_t cts);
|
||||
|
||||
private:
|
||||
MediaOriginType getOriginType(MediaSource &sender) const override;
|
||||
|
||||
@@ -42,7 +42,7 @@ bool loadIniConfig(const char *ini_path){
|
||||
namespace Broadcast {
|
||||
const string kBroadcastMediaChanged = "kBroadcastMediaChanged";
|
||||
const string kBroadcastRecordMP4 = "kBroadcastRecordMP4";
|
||||
const string kBroadcastRecordTs = "kBroadcastRecoredTs";
|
||||
const string kBroadcastRecordTs = "kBroadcastRecordTs";
|
||||
const string kBroadcastHttpRequest = "kBroadcastHttpRequest";
|
||||
const string kBroadcastHttpAccess = "kBroadcastHttpAccess";
|
||||
const string kBroadcastOnGetRtspRealm = "kBroadcastOnGetRtspRealm";
|
||||
@@ -77,6 +77,8 @@ const string kRtmpDemand = GENERAL_FIELD"rtmp_demand";
|
||||
const string kTSDemand = GENERAL_FIELD"ts_demand";
|
||||
const string kFMP4Demand = GENERAL_FIELD"fmp4_demand";
|
||||
const string kEnableAudio = GENERAL_FIELD"enable_audio";
|
||||
const string kCheckNvidiaDev = GENERAL_FIELD"check_nvidia_dev";
|
||||
const string kEnableFFmpegLog = GENERAL_FIELD"enable_ffmpeg_log";
|
||||
const string kWaitTrackReadyMS = GENERAL_FIELD"wait_track_ready_ms";
|
||||
const string kWaitAddTrackMS = GENERAL_FIELD"wait_add_track_ms";
|
||||
const string kUnreadyFrameCache = GENERAL_FIELD"unready_frame_cache";
|
||||
@@ -100,6 +102,8 @@ static onceToken token([](){
|
||||
mINI::Instance()[kTSDemand] = 0;
|
||||
mINI::Instance()[kFMP4Demand] = 0;
|
||||
mINI::Instance()[kEnableAudio] = 1;
|
||||
mINI::Instance()[kCheckNvidiaDev] = 1;
|
||||
mINI::Instance()[kEnableFFmpegLog] = 0;
|
||||
mINI::Instance()[kWaitTrackReadyMS] = 10000;
|
||||
mINI::Instance()[kWaitAddTrackMS] = 3000;
|
||||
mINI::Instance()[kUnreadyFrameCache] = 100;
|
||||
|
||||
@@ -183,6 +183,10 @@ extern const std::string kTSDemand;
|
||||
extern const std::string kFMP4Demand;
|
||||
//转协议是否全局开启或忽略音频
|
||||
extern const std::string kEnableAudio;
|
||||
//在docker环境下,不能通过英伟达驱动是否存在来判断是否支持硬件转码
|
||||
extern const std::string kCheckNvidiaDev;
|
||||
//是否开启ffmpeg日志
|
||||
extern const std::string kEnableFFmpegLog;
|
||||
//最多等待未初始化的Track 10秒,超时之后会忽略未初始化的Track
|
||||
extern const std::string kWaitTrackReadyMS;
|
||||
//如果直播流只有单Track,最多等待3秒,超时后未收到其他Track的数据,则认为是单Track
|
||||
|
||||
Reference in New Issue
Block a user