⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp4live_config.h

📁 jpeg and mpeg 编解码技术源代码
💻 H
字号:
/*
 * The contents of this file are subject to the Mozilla Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 * 
 * The Original Code is MPEG4IP.
 * 
 * The Initial Developer of the Original Code is Cisco Systems Inc.
 * Portions created by Cisco Systems Inc. are
 * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved.
 * 
 * Contributor(s): 
 *		Dave Mackie		dmackie@cisco.com
 *		Bill May 		wmay@cisco.com
 */

#ifndef __LIVE_CONFIG_H__
#define __LIVE_CONFIG_H__

#include <sys/types.h>
#include <linux/videodev.h>

#define CONFIG_SAFETY 0		// go fast, live dangerously
#include "config_set.h"

#include "media_time.h"
#include "video_util_tv.h"

#define NUM_FILE_HISTORY		8

#define FILE_SOURCE				"FILE"
#define URL_SOURCE				"URL"

#define AUDIO_SOURCE_OSS		"OSS"

#define AUDIO_ENCODER_FAAC		"faac"
#define AUDIO_ENCODER_LAME		"lame"

#define AUDIO_ENCODING_NONE		"None"
#define AUDIO_ENCODING_PCM16	"PCM16"
#define AUDIO_ENCODING_MP3		"MP3"
#define AUDIO_ENCODING_AAC		"AAC"
#define AUDIO_ENCODING_AC3		"AC3"
#define AUDIO_ENCODING_VORBIS	"VORBIS"

#define VIDEO_SOURCE_V4L		"V4L"

#define VIDEO_ENCODER_FFMPEG	"ffmpeg"
#define VIDEO_ENCODER_DIVX		"divx"
#define VIDEO_ENCODER_H26L		"h26l"
#define VIDEO_ENCODER_XVID		"xvid"

#define VIDEO_ENCODING_NONE		"None"
#define VIDEO_ENCODING_YUV12	"YUV12"
#define VIDEO_ENCODING_MPEG2	"MPEG2"
#define VIDEO_ENCODING_MPEG4	"MPEG4"
#define VIDEO_ENCODING_H26L		"H26L"

#define VIDEO_NTSC_FRAME_RATE	((float)29.97)
#define VIDEO_PAL_FRAME_RATE	((float)25.00)

#define VIDEO_STD_ASPECT_RATIO 	((float)1.33)	// standard 4:3
#define VIDEO_LB1_ASPECT_RATIO 	((float)2.35)	// typical "widescreen" format
#define VIDEO_LB2_ASPECT_RATIO 	((float)1.85)	// alternate widescreen format
#define VIDEO_LB3_ASPECT_RATIO 	((float)1.78)	// hdtv 16:9

#define MP3_MPEG1_SAMPLES_PER_FRAME	1152	// for MPEG-1 bitrates
#define MP3_MPEG2_SAMPLES_PER_FRAME	576		// for MPEG-2 bitrates

// forward declarations
class CVideoCapabilities;
class CAudioCapabilities;
class CLiveConfig;

// some configuration utility routines
void CalculateVideoFrameSize(CLiveConfig* pConfig);
void GenerateMpeg4VideoConfig(CLiveConfig* pConfig);
bool GenerateSdpFile(CLiveConfig* pConfig);

enum {
	CONFIG_APP_REAL_TIME,
	CONFIG_APP_REAL_TIME_SCHEDULER,
	CONFIG_APP_DURATION,
	CONFIG_APP_DURATION_UNITS,
	CONFIG_APP_FILE_0,
	CONFIG_APP_FILE_1,
	CONFIG_APP_FILE_2,
	CONFIG_APP_FILE_3,
	CONFIG_APP_FILE_4,
	CONFIG_APP_FILE_5,
	CONFIG_APP_FILE_6,
	CONFIG_APP_FILE_7,
	CONFIG_APP_DEBUG,
	CONFIG_APP_LOGLEVEL,

	CONFIG_AUDIO_ENABLE,
	CONFIG_AUDIO_SOURCE_TYPE,
	CONFIG_AUDIO_SOURCE_NAME,
	CONFIG_AUDIO_MIXER_NAME,
	CONFIG_AUDIO_INPUT_NAME,
	CONFIG_AUDIO_SOURCE_TRACK,
	CONFIG_AUDIO_CHANNELS,
	CONFIG_AUDIO_SAMPLE_RATE,
	CONFIG_AUDIO_BIT_RATE,
	CONFIG_AUDIO_ENCODING,
	CONFIG_AUDIO_ENCODER,

	CONFIG_VIDEO_ENABLE,
	CONFIG_VIDEO_SOURCE_TYPE,
	CONFIG_VIDEO_SOURCE_NAME,
	CONFIG_VIDEO_INPUT,
	CONFIG_VIDEO_SIGNAL,
	CONFIG_VIDEO_TUNER,
	CONFIG_VIDEO_CHANNEL_LIST_INDEX,
	CONFIG_VIDEO_CHANNEL_INDEX,
	CONFIG_VIDEO_SOURCE_TRACK,
	CONFIG_VIDEO_PREVIEW,
	CONFIG_VIDEO_RAW_PREVIEW,
	CONFIG_VIDEO_ENCODED_PREVIEW,
	CONFIG_VIDEO_ENCODER,
	CONFIG_VIDEO_RAW_WIDTH,
	CONFIG_VIDEO_RAW_HEIGHT,
	CONFIG_VIDEO_ASPECT_RATIO,
	CONFIG_VIDEO_FRAME_RATE,
	CONFIG_VIDEO_KEY_FRAME_INTERVAL,
	CONFIG_VIDEO_BIT_RATE,
	CONFIG_VIDEO_PROFILE_ID,
	CONFIG_VIDEO_PROFILE_LEVEL_ID,

	CONFIG_RECORD_ENABLE,
	CONFIG_RECORD_RAW_AUDIO,
	CONFIG_RECORD_RAW_VIDEO,
	CONFIG_RECORD_ENCODED_AUDIO,
	CONFIG_RECORD_ENCODED_VIDEO,
	CONFIG_RECORD_MP4_FILE_NAME,
	CONFIG_RECORD_MP4_HINT_TRACKS,
	CONFIG_RECORD_MP4_OVERWRITE,
	CONFIG_RECORD_MP4_OPTIMIZE,

	CONFIG_RTP_ENABLE,
	CONFIG_RTP_DEST_ADDRESS,
	CONFIG_RTP_AUDIO_DEST_PORT,
	CONFIG_RTP_VIDEO_DEST_PORT,
	CONFIG_RTP_OVER_RTSP,
	CONFIG_RTP_RECV_BUFFER_TIME,
	CONFIG_RTP_PAYLOAD_SIZE,
	CONFIG_RTP_MCAST_TTL,
	CONFIG_RTP_DISABLE_TS_OFFSET,
	CONFIG_RTP_USE_SSM,
	CONFIG_SDP_FILE_NAME,

	CONFIG_RAW_ENABLE,
	CONFIG_RAW_PCM_FILE_NAME,
	CONFIG_RAW_PCM_FIFO,
	CONFIG_RAW_YUV_FILE_NAME,
	CONFIG_RAW_YUV_FIFO,
};

// normally this would be in a .cpp file
// but we have it here to make it easier to keep
// the enumerator list and the variables in sync

#ifdef DECLARE_CONFIG_VARIABLES
static SConfigVariable MyConfigVariables[] = {
	// APP

	{ CONFIG_APP_REAL_TIME, "isRealTime", 
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_APP_REAL_TIME_SCHEDULER, "useRealTimeScheduler", 
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_APP_DURATION, "duration", 
		CONFIG_TYPE_INTEGER, (config_integer_t)1, },

	{ CONFIG_APP_DURATION_UNITS, "durationUnits", 
		CONFIG_TYPE_INTEGER, (config_integer_t)60, },

	{ CONFIG_APP_FILE_0, "file0", 
		CONFIG_TYPE_STRING, "", },

	{ CONFIG_APP_FILE_1, "file1", 
		CONFIG_TYPE_STRING, "", },

	{ CONFIG_APP_FILE_2, "file2", 
		CONFIG_TYPE_STRING, "", },

	{ CONFIG_APP_FILE_3, "file3", 
		CONFIG_TYPE_STRING, "", },

	{ CONFIG_APP_FILE_4, "file4", 
		CONFIG_TYPE_STRING, "", },

	{ CONFIG_APP_FILE_5, "file5", 
		CONFIG_TYPE_STRING, "", },

	{ CONFIG_APP_FILE_6, "file6", 
		CONFIG_TYPE_STRING, "", },

	{ CONFIG_APP_FILE_7, "file7", 
		CONFIG_TYPE_STRING, "", },

	{ CONFIG_APP_DEBUG, "debug", 
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_APP_LOGLEVEL, "logLevel", 
		CONFIG_TYPE_INTEGER, (config_integer_t)0, },

	// AUDIO

	{ CONFIG_AUDIO_ENABLE, "audioEnable", 
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_AUDIO_SOURCE_TYPE, "audioSourceType", 
		CONFIG_TYPE_STRING, AUDIO_SOURCE_OSS, },

	{ CONFIG_AUDIO_SOURCE_NAME, "audioDevice", 
		CONFIG_TYPE_STRING, "/dev/dsp", },

	{ CONFIG_AUDIO_MIXER_NAME, "audioMixer", 
		CONFIG_TYPE_STRING, "/dev/mixer", },

	{ CONFIG_AUDIO_INPUT_NAME, "audioInput", 
		CONFIG_TYPE_STRING, "mix", },

	{ CONFIG_AUDIO_SOURCE_TRACK, "audioSourceTrack", 
		CONFIG_TYPE_INTEGER, (config_integer_t)0, },

	{ CONFIG_AUDIO_CHANNELS, "audioChannels", 
		CONFIG_TYPE_INTEGER, (config_integer_t)2, },

	{ CONFIG_AUDIO_SAMPLE_RATE, "audioSampleRate", 
		CONFIG_TYPE_INTEGER, (config_integer_t)44100, },

	{ CONFIG_AUDIO_BIT_RATE, "audioBitRate", 
		CONFIG_TYPE_INTEGER, (config_integer_t)128, },

	{ CONFIG_AUDIO_ENCODING, "audioEncoding",
		CONFIG_TYPE_STRING, AUDIO_ENCODING_MP3, },

	{ CONFIG_AUDIO_ENCODER, "audioEncoder",
		CONFIG_TYPE_STRING, AUDIO_ENCODER_LAME, },

	// VIDEO

	{ CONFIG_VIDEO_ENABLE, "videoEnable", 
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_VIDEO_SOURCE_TYPE, "videoSourceType", 
		CONFIG_TYPE_STRING, VIDEO_SOURCE_V4L, },

	{ CONFIG_VIDEO_SOURCE_NAME, "videoDevice", 
		CONFIG_TYPE_STRING, "/dev/video0", },

	{ CONFIG_VIDEO_INPUT, "videoInput",
		CONFIG_TYPE_INTEGER, (config_integer_t)1, },

	{ CONFIG_VIDEO_SIGNAL, "videoSignal",
		CONFIG_TYPE_INTEGER, (config_integer_t)VIDEO_MODE_NTSC, },

	{ CONFIG_VIDEO_TUNER, "videoTuner",
		CONFIG_TYPE_INTEGER, (config_integer_t)-1, },

	{ CONFIG_VIDEO_CHANNEL_LIST_INDEX, "videoChannelListIndex",
		CONFIG_TYPE_INTEGER, (config_integer_t)0, },

	{ CONFIG_VIDEO_CHANNEL_INDEX, "videoChannelIndex",
		CONFIG_TYPE_INTEGER, (config_integer_t)1, },

	{ CONFIG_VIDEO_SOURCE_TRACK, "videoSourceTrack", 
		CONFIG_TYPE_INTEGER, (config_integer_t)0, },

	{ CONFIG_VIDEO_PREVIEW, "videoPreview",
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_VIDEO_RAW_PREVIEW, "videoRawPreview",
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_VIDEO_ENCODED_PREVIEW, "videoEncodedPreview",
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_VIDEO_ENCODER, "videoEncoder",
		CONFIG_TYPE_STRING, VIDEO_ENCODER_XVID, },

	{ CONFIG_VIDEO_RAW_WIDTH, "videoRawWidth",
		CONFIG_TYPE_INTEGER, (config_integer_t)320, },

	{ CONFIG_VIDEO_RAW_HEIGHT, "videoRawHeight",
		CONFIG_TYPE_INTEGER, (config_integer_t)240, },

	{ CONFIG_VIDEO_ASPECT_RATIO, "videoAspectRatio",
		CONFIG_TYPE_FLOAT, VIDEO_STD_ASPECT_RATIO },

	{ CONFIG_VIDEO_FRAME_RATE, "videoFrameRate", 
		CONFIG_TYPE_FLOAT, VIDEO_NTSC_FRAME_RATE, },

	{ CONFIG_VIDEO_KEY_FRAME_INTERVAL, "videoKeyFrameInterval", 
		CONFIG_TYPE_FLOAT, (float)2.0, },

	{ CONFIG_VIDEO_BIT_RATE, "videoBitRate",
		CONFIG_TYPE_INTEGER, (config_integer_t)500, },

	{ CONFIG_VIDEO_PROFILE_ID, "videoProfileId",
		CONFIG_TYPE_INTEGER, (config_integer_t)1, },

	{ CONFIG_VIDEO_PROFILE_LEVEL_ID, "videoProfileLevelId",
		CONFIG_TYPE_INTEGER, (config_integer_t)3, },

	// RECORD

	{ CONFIG_RECORD_ENABLE, "recordEnable", 
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_RECORD_RAW_AUDIO, "recordRawAudio", 
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_RECORD_RAW_VIDEO, "recordRawVideo", 
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_RECORD_ENCODED_AUDIO, "recordEncodedAudio", 
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_RECORD_ENCODED_VIDEO, "recordEncodedVideo", 
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_RECORD_MP4_FILE_NAME, "recordMp4File", 
		CONFIG_TYPE_STRING, "capture.mp4", },

	{ CONFIG_RECORD_MP4_HINT_TRACKS, "recordMp4HintTracks", 
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_RECORD_MP4_OVERWRITE, "recordMp4Overwrite", 
		CONFIG_TYPE_BOOL, true, },

	{ CONFIG_RECORD_MP4_OPTIMIZE, "recordMp4Optimize", 
		CONFIG_TYPE_BOOL, false, },

	// RTP

	{ CONFIG_RTP_ENABLE, "rtpEnable", 
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_RTP_DEST_ADDRESS, "rtpDestAddress",
		CONFIG_TYPE_STRING, "224.1.2.3", },

	{ CONFIG_RTP_AUDIO_DEST_PORT, "rtpAudioDestPort",
		CONFIG_TYPE_INTEGER, (config_integer_t)20002, },

	{ CONFIG_RTP_VIDEO_DEST_PORT, "rtpVideoDestPort",
		CONFIG_TYPE_INTEGER, (config_integer_t)20000, },

	{ CONFIG_RTP_OVER_RTSP, "rtpOverRtsp",
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_RTP_RECV_BUFFER_TIME, "rtpRecvBufferTime",
		CONFIG_TYPE_INTEGER, (config_integer_t)2, },

	{ CONFIG_RTP_PAYLOAD_SIZE, "rtpPayloadSize",
		CONFIG_TYPE_INTEGER, (config_integer_t)1460, },

	{ CONFIG_RTP_MCAST_TTL, "rtpMulticastTtl",
		CONFIG_TYPE_INTEGER, (config_integer_t)15, },

	{ CONFIG_RTP_DISABLE_TS_OFFSET, "rtpDisableTimestampOffset", 
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_RTP_USE_SSM, "rtpUseSingleSourceMulticast", 
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_SDP_FILE_NAME, "sdpFile", 
		CONFIG_TYPE_STRING, "capture.sdp", },


	// RAW sink

	{ CONFIG_RAW_ENABLE, "rawEnable", 
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_RAW_PCM_FILE_NAME, "rawAudioFile", 
		CONFIG_TYPE_STRING, "capture.pcm", },

	{ CONFIG_RAW_PCM_FIFO, "rawAudioUseFifo", 
		CONFIG_TYPE_BOOL, false, },

	{ CONFIG_RAW_YUV_FILE_NAME, "rawVideoFile", 
		CONFIG_TYPE_STRING, "capture.yuv", },

	{ CONFIG_RAW_YUV_FIFO, "rawVideoUseFifo", 
		CONFIG_TYPE_BOOL, false, },

};
#endif /* DECLARE_CONFIG_VARIABLES */


class CLiveConfig : public CConfigSet {
public:
	CLiveConfig(SConfigVariable* variables, 
		config_index_t numVariables, const char* defaultFileName);

	~CLiveConfig();

	// recalculate derived values
	void Update();
	void UpdateFileHistory(char* fileName);
	void UpdateVideo();
	void UpdateAudio();
	void UpdateRecord();

	bool IsOneSource();
	bool IsCaptureVideoSource();
	bool IsCaptureAudioSource();

	bool SourceRawVideo() {
		return (GetBoolValue(CONFIG_VIDEO_RAW_PREVIEW)
			|| (GetBoolValue(CONFIG_RECORD_ENABLE)
				&& GetBoolValue(CONFIG_RECORD_RAW_VIDEO))
			|| GetBoolValue(CONFIG_RAW_ENABLE));
	}

	bool SourceRawAudio() {
		return (GetBoolValue(CONFIG_RECORD_ENABLE)
				&& GetBoolValue(CONFIG_RECORD_RAW_AUDIO))
			|| GetBoolValue(CONFIG_RAW_ENABLE);
	}

public:
	// command line configuration
	bool		m_appAutomatic;

	// derived, shared video configuration
	CVideoCapabilities* m_videoCapabilities;
	bool		m_videoEncode;
	u_int32_t	m_videoPreviewWindowId;
	u_int16_t	m_videoWidth;
	u_int16_t	m_videoHeight;
	u_int16_t	m_videoMaxWidth;
	u_int16_t	m_videoMaxHeight;
	u_int32_t	m_ySize;
	u_int32_t	m_uvSize;
	u_int32_t	m_yuvSize;
	bool		m_videoNeedRgbToYuv;
	u_int16_t	m_videoMpeg4ConfigLength;
	u_int8_t*	m_videoMpeg4Config;
	u_int32_t	m_videoMaxVopSize;
	u_int8_t	m_videoTimeIncrBits;

	// derived, shared audio configuration
	CAudioCapabilities* m_audioCapabilities;
	bool		m_audioEncode;

	// derived, shared file configuration
	u_int64_t	m_recordEstFileSize;
};

#endif /* __LIVE_CONFIG_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -