搜档网
当前位置:搜档网 › 最新版FFMPEG解码流程(欢迎愿意分享资料群友下载载)

最新版FFMPEG解码流程(欢迎愿意分享资料群友下载载)

最新版FFMPEG解码流程(欢迎愿意分享资料群友下载载)
最新版FFMPEG解码流程(欢迎愿意分享资料群友下载载)

FFMPEG解码流程:

1. 注册所有容器格式和CODEC: av_register_all()

2. 打开文件: av_open_input_file()

3. 从文件中提取流信息: av_find_stream_info()

4. 穷举所有的流,查找其中种类为CODEC_TYPE_VIDEO

5. 查找对应的解码器: avcodec_find_decoder()

6. 打开编解码器: avcodec_open()

7. 为解码帧分配内存: avcodec_alloc_frame()

8. 不停地从码流中提取出帧数据: av_read_frame()

9. 判断帧的类型,对于视频帧调用: avcodec_decode_video()

10. 解码完后,释放解码器: avcodec_close()

11. 关闭输入文件: avformat_close_input_file()

主要数据结构:

基本概念:

编解码器、数据帧、媒体流和容器是数字媒体处理系统的四个基本概念。

首先需要统一术语:

容器/文件(Conainer/File):即特定格式的多媒体文件。

媒体流(Stream):指时间轴上的一段连续数据,如一段声音数据,一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。

数据帧/数据包(Frame/Packet):通常,一个媒体流由大量的数据帧组成,对于压缩数据,帧对应着编解码器的最小处理单元。通常,分属于不同媒体流的数据帧交错复用于容器之中,参见交错。

编解码器:编解码器以帧为单位实现压缩数据和原始数据之间的相互转换。

在FFMPEG中,使用A VFormatContext、A VStream、A VCodecContext、A VCodec及A VPacket 等结构来抽象这些基本要素,它们的关系如上图所示:

A VCodecContext:

这是一个描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息,如下列出了部分比较重要的域:

typedef struct AVCodecContext {

/ **

*一些编解码器需要/可以像使用extradata Huffman表。

* MJPEG:Huffman表

* RV10其他标志

* MPEG4:全球头(也可以是在比特流或这里)

*分配的内存应该是FF_INPUT_BUFFER_PADDING_SIZE字节较大

*,比extradata_size避免比特流器,如果它与读prolems。

* extradata按字节的内容必须不依赖于架构或CPU的字节顺序。

* - 编码:设置/分配/释放由libavcodec的。

* - 解码:由用户设置/分配/释放。

* /

uint8_t *extradata;

int extradata_size;

/ **

*这是时间的基本单位,在条件(以秒为单位)

*帧时间戳派代表出席了会议。对于固定fps的内容,

*基应该1/framerate和时间戳的增量应该

*相同的1。

* - 编码:必须由用户设置。

* - 解码:libavcodec的设置。

* /

A VRational time_base;

/*视频* /

/ **

*图片宽度/高度。

* - 编码:必须由用户设置。

* - 解码:libavcodec的设置。

*请注意:兼容性,它是可能的,而不是设置此

* coded_width/高解码之前。

* /

int width, height;

......

/ *仅音频* /

int sample_rate; ///< 每秒采样

int channels; ///< 音频通道数

/ **

*音频采样格式

* - 编码:由用户设置。

* - 解码:libavcodec的设置。

* /

enum SampleFormat sample_fmt; ///< 样本格式

/ *下面的数据不应该被初始化。* /

/ **

*每包样品,初始化时调用“init”。

* /

int frame_size;

int frame_number; ///<音频或视频帧数量

char codec_name[32];

enum AVMediaType codec_type; /* 看到A VMEDIA_TYPE_xxx */

enum CodecID codec_id; /* see CODEC_ID_xxx */

/ **

*的fourcc(LSB在前,所以“的ABCD” - >(“D”<< 24)(“C”<< 16)(“B”<< 8)+“A”)。

*这是用来解决一些编码错误。

*分路器应设置什么是编解码器用于识别领域中。

*如果有分路器等多个领域,在一个容器,然后选择一个

*最大化使用的编解码器有关的信息。

*如果在容器中的编解码器标记字段然后32位大分路器应该

*重新映射到一个表或其他结构的32位编号。也可选择新

* extra_codec_tag+大小可以添加,但必须证明这是一个明显的优势

*第一。

* - 编码:由用户设置,如果没有则默认基础上codec_id将使用。

* - 解码:由用户设置,将被转换成在初始化libavcodec的大写。

* /

unsigned int codec_tag;

......

/ **

*在解码器的帧重排序缓冲区的大小。

*对于MPEG-2,这是IPB1或0低延时IP。

* - 编码:libavcodec的设置。

* - 解码:libavcodec的设置。

* /

int has_b_frames;

/ **

*每包的字节数,如果常量和已知或0

*用于一些W A V的音频编解码器。

* /

int block_align;

/ **

*从分路器位每个样品/像素(huffyuv需要)。

* - 编码:libavcodec的设置。

* - 解码:由用户设置。

* /

int bits_per_coded_sample;

.....

} A VCodecContext;

如果是单纯使用libavcodec,这部分信息需要调用者进行初始化;如果是使用整个FFMPEG 库,这部分信息在调用avformat_open_input和avformat_find_stream_info的过程中根据文件的头信息及媒体流内的头部信息完成初始化。其中几个主要域的释义如下:extradata/extradata_size:这个buffer中存放了解码器可能会用到的额外信息,在av_read_frame中填充。一般来说,首先,某种具体格式的demuxer在读取格式头信息的时候会填充extradata,其次,如果demuxer没有做这个事情,比如可能在头部压根儿就没有相关的编解码信息,则相应的parser会继续从已经解复用出来的媒体流中继续寻找。在没有找到任何额外信息的情况下,这个buffer指针为空。

time_base:

width/height:视频的宽和高。

sample_rate/channels:音频的采样率和信道数目。

sample_fmt:音频的原始采样格式。

codec_name/codec_type/codec_id/codec_tag:编解码器的信息。

A VStream

该结构体描述一个媒体流,定义如下:

typedef struct AVStream {

int index; /** <在A VFormatContext流的索引* /

int id; /**< 特定格式的流ID */

A VCodecContext *codec; /**< codec context */

/ **

*流的实时帧率基地。

*这是所有时间戳可以最低帧率

*准确代表(它是所有的最小公倍数

*流的帧率)。请注意,这个值只是一个猜测!

*例如,如果时间基数为1/90000和所有帧

*约3600或1800计时器刻度,,然后r_frame_rate将是50/1。

* /

A VRational r_frame_rate;

/ **

*这是时间的基本单位,在条件(以秒为单位)

*帧时间戳派代表出席了会议。对于固定fps的内容,

*时基应该是1/framerate的时间戳的增量应为1。

* /

A VRational time_base;

......

/ **

*解码流量的第一帧,在流量时-base分。

*如果你是绝对100%的把握,设定值

*它真的是第一帧点。

*这可能是未定义(A V_NOPTS_V ALUE)的。

*@注意的业余头不弱者受制与正确的START_TIME的业余

*分路器必须不设定此。

* /

int64_t start_time;

/ **

*解码:时间流流时基。

*如果源文件中没有指定的时间,但不指定

*比特率,这个值将被从码率和文件大小的估计。

* /

int64_t duration;

#if LIBA VFORMA T_VERSION_INT < (53<<16)

char language[4]; /** ISO 639-2/B 3-letter language code (empty string if undefined) */

#endif

/* av_read_frame()支持* /

enum AVStreamParseType need_parsing;

struct AVCodecParserContext *parser;

.....

/*函数av_seek_frame()支持* /

A VIndexEntry *index_entries; / **<仅用于如果格式不notsupport寻求本身。* /

int nb_index_entries;

unsigned int index_entries_allocated_size;

int64_t nb_frames; ///< 在此流的帧,如果已知或0

......

//*平均帧率

A VRational avg_frame_rate;

......

} A VStream;

主要域的释义如下,其中大部分域的值可以由avformat_open_input根据文件头的信息确定,缺少的信息需要通过调用avformat_find_stream_info读帧及软解码进一步获取:

index/id:index对应流的索引,这个数字是自动生成的,根据index可以从A VFormatContext::streams表中索引到该流;而id则是流的标识,依赖于具体的容器格式。比如对于MPEG TS格式,id就是pid。

time_base:流的时间基准,是一个实数,该流中媒体数据的pts和dts都将以这个时间基准为粒度。通常,使用av_rescale/av_rescale_q可以实现不同时间基准的转换。

start_time:流的起始时间,以流的时间基准为单位,通常是该流中第一个帧的pts。

duration:流的总时间,以流的时间基准为单位。

need_parsing:对该流parsing过程的控制域。

nb_frames:流内的帧数目。

r_frame_rate/framerate/avg_frame_rate:帧率相关。

codec:指向该流对应的A VCodecContext结构,调用avformat_open_input时生成。

parser:指向该流对应的A VCodecParserContext结构,调用avformat_find_stream_info 时生成。。

A VFormatContext

这个结构体描述了一个媒体文件或媒体流的构成和基本信息,定义如下:

typedef struct A VFormatContext {

const A VClass *av_class; /**<由avformat_alloc_context设置的。* /

/ *只能是iFormat的,或在同一时间oformat,不是两个。* /

struct AVInputFormat *iformat;

struct AVOutputFormat *oformat;

void *priv_data;

ByteIOContext *pb;

unsigned int nb_streams;

A VStream *streams[MAX_STREAMS];

char filename[1024]; / **<输入或输出的文件名*/

/ *流信息* /

int64_t timestamp;

#if LIBA VFORMA T_VERSION_INT < (53<<16)

char title[512];

char author[512];

char copyright[512];

char comment[512];

char album[512];

int year; /**< ID3 year, 0 if none */

int track; /**< track number, 0 if none */

char genre[32]; /**< ID3 genre */

#endif

int ctx_flags; /** <格式特定的标志,看到A VFMTCTX_xx* /

/*分处理的私人数据(不直接修改)。* /

/ **此缓冲区只需要当数据包已经被缓冲,但

不解码,例如,在MPEG编解码器的参数

流。* /

struct AVPacketList *packet_buffer;

/ **解码元件的第一帧的位置,在

A V_TIME_BASE分数秒。从来没有设置这个值直接:

推导的A VStream值。* /

int64_t start_time;

/ **解码流的时间,在A V_TIME_BASE分数

秒。只设置这个值,如果你知道没有个人流

工期,也不要设置任何他们。这是从推导

A VStream值如果没有设置。

int64_t duration;

/ **解码:总的文件大小,如果未知0* /

int64_t file_size;

/ **解码:在比特/秒的总流率,如果不

可用。从来没有直接设置它如果得到file_size和

时间是已知的如FFmpeg的自动计算。* /

int bit_rate;

/* av_read_frame()支持* /

A VStream *cur_st;

#if LIBA VFORMA T_VERSION_INT < (53<<16)

const uint8_t *cur_ptr_deprecated;

int cur_len_deprecated;

A VPacket cur_pkt_deprecated;

#endif

/* av_seek_frame() 支持*/

int64_t data_offset; /** 第一包抵消*/

int index_built;

int mux_rate;

unsigned int packet_size;

int preload;

int max_delay;

#define AVFMT_NOOUTPUTLOOP -1

#define AVFMT_INFINITEOUTPUTLOOP 0

/** 次循环输出的格式支持它的数量*/

int loop_output;

int flags;

#define AVFMT_FLAG_GENPTS 0x0001 ///< 生成失踪分,即使它需要解析未来框架。

#define AVFMT_FLAG_IGNIDX 0x0002 ///< 忽略指数。

#define AVFMT_FLAG_NONBLOCK 0x0004 ///<从输入中读取数据包时,不要阻止。

#define AVFMT_FLAG_IGNDTS 0x0008 ///< 忽略帧的DTS包含DTS与PTS #define AVFMT_FLAG_NOFILLIN 0x0010 ///< 不要从任何其他值推断值,只是返回存储在容器中

#define AVFMT_FLAG_NOPARSE 0x0020 ///< 不要使用A VParsers,你还必须设置为FILLIN帧代码的工作,没有解析A VFMT_FLAG_NOFILLIN - >无帧。也在寻求框架不能工作,如果找到帧边界的解析已被禁用

#define AVFMT_FLAG_RTP_HINT 0x0040 ///< 暗示到输出文件添加的RTP int loop_input;

/**解码:对探测数据的大小;编码:未使用。* /

unsigned int probesize;

/ **

在此期间,输入*最大时间(在AV_TIME_BASE单位)应

*进行分析在avformat_find_stream_info()。

* /

int max_analyze_duration;

const uint8_t *key;

int keylen;

unsigned int nb_programs;

A VProgram **programs;

/ **

*强迫影片codec_id。

* Demuxing:由用户设置。

* /

enum CodecID video_codec_id;

/ **

*强迫音频codec_id。

* Demuxing:由用户设置。

* /

enum CodecID audio_codec_id;

/ **

*强制的:字幕codec_id。

* Demuxing:由用户设置。

* /

enum CodecID subtitle_codec_id;

/ **

*以字节为单位的最高限额为每个数据流的索引使用的内存。

*如果该指数超过此大小,条目将被丢弃

*需要保持一个较小的规模。这可能会导致较慢或更少

*准确的寻求(分路器)。

*分路器内存中的一个完整的指数是强制性的将忽略

*此。

*混流:未使用

* demuxing:由用户设置* /

unsigned int max_index_size;

/ **

*以字节为单位的最高限额使用帧缓冲内存

*从实时捕获设备获得。* /

unsigned int max_picture_buffer;

unsigned int nb_chapters;

A VChapter **chapters;

/ **

*标志启用调试。* /

int debug;

#define FF_FDEBUG_TS 0x0001

/ **

*原始数据包从分路器之前,解析和解码。

*此缓冲区用于缓冲数据包,直到编解码器可以

*确定,因为不知道不能做解析

*编解码器。* /

struct AVPacketList *raw_packet_buffer;

struct AVPacketList *raw_packet_buffer_end;

struct AVPacketList *packet_buffer_end;

A VMetadata *metadata;

/ **

*剩余的大小可为raw_packet_buffer,以字节为单位。

*不属于公共API* /

#define RAW_PACKET_BUFFER_SIZE 2500000

int raw_packet_buffer_remaining_size;

/ **

*在现实世界中的时间流的开始时间,以微秒

*自Unix纪元(1970年1月1日起00:00)。也就是说,pts= 0

在这个现实世界的时间*流被抓获。

* - 编码:由用户设置。

* - 解码:未使用。* /

int64_t start_time_realtime;

} A VFormatContext;

这是FFMpeg中最为基本的一个结构,是其他所有结构的根,是一个多媒体文件或流的根本抽象。其中:

nb_streams和streams所表示的A VStream结构指针数组包含了所有内嵌媒体流的描述;

iformat和oformat指向对应的demuxer和muxer指针;

pb则指向一个控制底层数据读写的ByteIOContext结构。

start_time和duration是从streams数组的各个A VStream中推断出的多媒体文件的起始时间和长度,以微妙为单位。

通常,这个结构由avformat_open_input在内部创建并以缺省值初始化部分成员。但是,如果调用者希望自己创建该结构,则需要显式为该结构的一些成员置缺省值——如果没有缺省值的话,会导致之后的动作产生异常。以下成员需要被关注:

probesize

mux_rate

packet_size

flags

max_analyze_duration

key

max_index_size

max_picture_buffer

max_delay

A VPacket

A VPacket定义在avcodec.h中,如下:

typedef struct A VPacket {

/ **

A VStream->基time_base单位介绍时间戳的时间

*解压缩包将被提交给用户。

*可A V_NOPTS_V ALUE如果没有存储在文件中。

*分必须大于或等于DTS作为演示不能发生之前

*减压,除非要查看十六进制转储。有些格式滥用

* DTS和PTS/ CTS的条款意味着不同的东西。如时间戳

*必须转换为真正的PTS / DTS之前,他们在A VPacket存储。* /

int64_t pts;

/ **

A VStream->基time_base单位时间的减压时间戳记;

*包解压。

*可A V_NOPTS_V ALUE如果没有存储在文件中。* /

int64_t dts;

uint8_t *data;

int size;

int stream_index;

int flags;

/ **

*这个包的时间A VStream->基time_base单位,如果未知。

*等于next_pts - 在呈现顺序this_pts。* /

int duration;

void (*destruct)(struct A VPacket *);

void *priv;

int64_t pos; ///< 如果未知字节的位置,在流,-1

/ **

* AVStream->基time_base单位的时差,这点

*包从解码器输出的已融合在哪个点

*独立的前一帧的情况下。也就是说,

*框架几乎是一致的,没有问题,如果解码开始从

*第一帧或从这个关键帧。

* AV_NOPTS_V ALUE如果不明。

*此字段是不是当前数据包的显示时间。

*

*这一领域的目的是允许在流,没有寻求

*在传统意义上的关键帧。它所对应的

*恢复点SEI的H.264和match_time_delta在螺母。这也是

*必不可少的一些类型的字幕流,以确保所有

*后寻求正确显示字幕。* /

int64_t convergence_duration;

} A VPacket;

FFMPEG使用A VPacket来暂存解复用之后、解码之前的媒体数据(一个音/视频帧、一个字幕包等)及附加信息(解码时间戳、显示时间戳、时长等)。其中:

dts表示解码时间戳,pts表示显示时间戳,它们的单位是所属媒体流的时间基准。

stream_index给出所属媒体流的索引;

data为数据缓冲区指针,size为长度;

duration为数据的时长,也是以所属媒体流的时间基准为单位;

pos表示该数据在媒体流中的字节偏移量;

destruct为用于释放数据缓冲区的函数指针;

flags为标志域,其中,最低为置1表示该数据是一个关键帧。

A VPacket结构本身只是个容器,它使用data成员引用实际的数据缓冲区。这个缓冲区通常是由av_new_packet创建的,但也可能由FFMPEG的API创建(如av_read_frame)。当某个A VPacket结构的数据缓冲区不再被使用时,要需要通过调用av_free_packet释放。av_free_packet调用的是结构体本身的destruct函数,它的值有两种情况:1)av_destruct_packet_nofree或0;2)av_destruct_packet,其中,情况1)仅仅是将data和size 的值清0而已,情况2)才会真正地释放缓冲区。

FFMPEG内部使用A VPacket结构建立缓冲区装载数据,同时提供destruct函数,如果FFMPEG打算自己维护缓冲区,则将destruct设为av_destruct_packet_nofree,用户调用av_free_packet清理缓冲区时并不能够将其释放;如果FFMPEG打算将该缓冲区彻底交给调用者,则将destruct设为av_destruct_packet,表示它能够被释放。安全起见,如果用户希望自由地使用一个FFMPEG内部创建的A VPacket结构,最好调用av_dup_packet进行缓冲区的克隆,将其转化为缓冲区能够被释放的A VPacket,以免对缓冲区的不当占用造成异常错误。av_dup_packet会为destruct指针为av_destruct_packet_nofree的A VPacket新建一个缓冲区,然后将原缓冲区的数据拷贝至新缓冲区,置data的值为新缓冲区的地址,同时设destruct 指针为av_destruct_packet。

时间信息

时间信息用于实现多媒体同步。

同步的目的在于展示多媒体信息时,能够保持媒体对象之间固有的时间关系。同步有两类,一类是流内同步,其主要任务是保证单个媒体流内的时间关系,以满足感知要求,如按照规定的帧率播放一段视频;另一类是流间同步,主要任务是保证不同媒体流之间的时间关系,如音频和视频之间的关系(lipsync)。

对于固定速率的媒体,如固定帧率的视频或固定比特率的音频,可以将时间信息(帧率或比特率)置于文件首部(header),如A VI的hdrl List、MP4的moov box,还有一种相对复杂的方案是将时间信息嵌入媒体流的内部,如MPEG TS和Real video,这种方案可以处理变速率的媒体,亦可有效避免同步过程中的时间漂移。

FFMPEG会为每一个数据包打上时间标签,以更有效地支持上层应用的同步机制。时间标签有两种,一种是DTS,称为解码时间标签,另一种是PTS,称为显示时间标签。对于声音来说,这两个时间标签是相同的,但对于某些视频编码格式,由于采用了双向预测技术,会造成DTS和PTS的不一致。

无双向预测帧的情况:

图像类型: I P P P P P P ... I P P

DTS: 0 1 2 3 4 5 6... 100 101 102

PTS: 0 1 2 3 4 5 6... 100 101 102

有双向预测帧的情况:

图像类型: I P B B P B B ... I P B

DTS: 0 1 2 3 4 5 6 ... 100 101 102

PTS: 0 3 1 2 6 4 5 ... 100 104 102

对于存在双向预测帧的情况,通常要求解码器对图像重排序,以保证输出的图像顺序为显示顺序:

解码器输入:I P B B P B B

(DTS) 0 1 2 3 4 5 6

(PTS) 0 3 1 2 6 4 5

解码器输出:X I B B P B B P

(PTS) X 0 1 2 3 4 5 6

时间信息的获取:

通过调用avformat_find_stream_info,多媒体应用可以从A VFormatContext对象中拿到媒体文件的时间信息:主要是总时间长度和开始时间,此外还有与时间信息相关的比特率和文件大小。其中时间信息的单位是A V_TIME_BASE:微秒。

typedef struct A VFormatContext {

/ **解码元件的第一帧的位置,在

A V_TIME_BASE分数秒。从来没有设置这个值直接:

推导的A VStream值。* /

int64_t start_time;

/ **解码流的时间,在A V_TIME_BASE分数秒。只设置这个值,如果你知道没有个人流工期,也不要设置任何他们。这是从推导A VStream值如果没有设置。* / int64_t duration;

/ **解码:总的文件大小,如果未知=0* /

int64_t file_size;

/ **解码:在比特/秒的总流率,如果不可用。从来没有直接设置它如果得到file_size 和时间是已知的如FFmpeg的自动计算。* /

int bit_rate;

.....

} A VFormatContext;

以上4个成员变量都是只读的,基于FFMpeg的中间件需要将其封装到某个接口中,如:LONG GetDuratioin(IntfX*);

LONG GetStartTime(IntfX*);

LONG GetFileSize(IntfX*);

LONG GetBitRate(IntfX*);

APIs

avformat_open_input:

int avformat_open_input(A VFormatContext **ic_ptr, const char *filename, AVInputFormat *fmt, A VDictionary **options);

avformat_open_input完成两个任务:

打开一个文件或URL,基于字节流的底层输入模块得到初始化。

解析多媒体文件或多媒体流的头信息,创建A VFormatContext结构并填充其中的关键字段,依次为各个原始流建立AVStream结构。

一个多媒体文件或多媒体流与其包含的原始流的关系如下:

多媒体文件/多媒体流(movie.mkv)

原始流1 (h.264 video)

原始流2 (aac audio for Chinese)

原始流3 (aac audio for english)

原始流4 (Chinese Subtitle)

原始流5 (English Subtitle)

...

关于输入参数:

ic_ptr,这是一个指向指针的指针,用于返回avformat_open_input内部构造的一个A VFormatContext结构体。

filename,指定文件名。

fmt,用于显式指定输入文件的格式,如果设为空则自动判断其输入格式。

options

这个函数通过解析多媒体文件或流的头信息及其他辅助数据,能够获取足够多的关于文件、流和编解码器的信息,但由于任何一种多媒体格式提供的信息都是有限的,而且不同的多媒体内容制作软件对头信息的设置不尽相同,此外这些软件在产生多媒体内容时难免会引入一些错误,因此这个函数并不保证能够获取所有需要的信息,在这种情况下,则需要考虑另一个函数:

avformat_find_stream_info:

int avformat_find_stream_info(A VFormatContext *ic, A VDictionary **options);

这个函数主要用于获取必要的编解码器参数,设置到ic→streams[i]→codec中。

首先必须得到各媒体流对应编解码器的类型和id,这是两个定义在avutils.h和avcodec.h 中的枚举:

enum AVMediaType {

A VMEDIA_TYPE_UNKNOWN = -1,

A VMEDIA_TYPE_VIDEO,

A VMEDIA_TYPE_AUDIO,

A VMEDIA_TYPE_DA TA,

A VMEDIA_TYPE_SUBTITLE,

A VMEDIA_TYPE_A TTACHMENT,

A VMEDIA_TYPE_NB

};

enum CodecID {

CODEC_ID_NONE,

/* video codecs */

CODEC_ID_MPEG1VIDEO,

CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding

CODEC_ID_MPEG2VIDEO_XVMC,

CODEC_ID_H261,

CODEC_ID_H263,

...

};

通常,如果某种媒体格式具备完备而正确的头信息,调用avformat_open_input即可以得到这两个参数,但若是因某种原因avformat_open_input无法获取它们,这一任务将由avformat_find_stream_info完成。

其次还要获取各媒体流对应编解码器的时间基准。

此外,对于音频编解码器,还需要得到:

采样率,

声道数,

位宽,

帧长度(对于某些编解码器是必要的),

对于视频编解码器,则是:

图像大小,

色彩空间及格式,

av_read_frame

int av_read_frame(A VFormatContext *s, AVPacket *pkt);

这个函数用于从多媒体文件或多媒体流中读取媒体数据,获取的数据由A VPacket结构pkt来存放。对于音频数据,如果是固定比特率,则pkt中装载着一个或多个音频帧;如果是可变比特率,则pkt中装载有一个音频帧。对于视频数据,pkt中装载有一个视频帧。需要注意的是:再次调用本函数之前,必须使用av_free_packet释放pkt所占用的资源。

通过pkt→stream_index可以查到获取的媒体数据的类型,从而将数据送交相应的解码器进行后续处理。

av_seek_frame

int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags);

这个函数通过改变媒体文件的读写指针来实现对媒体文件的随机访问,支持以下三种方式:

基于时间的随机访问:具体而言就是将媒体文件读写指针定位到某个给定的时间点上,则之后调用av_read_frame时能够读到时间标签等于给定时间点的媒体数据,通常用于实现媒体播放器的快进、快退等功能。

基于文件偏移的随机访问:相当于普通文件的seek函数,timestamp也成为文件的偏移量。

基于帧号的随机访问:timestamp为要访问的媒体数据的帧号。

关于参数:

s:是个AVFormatContext指针,就是avformat_open_input返回的那个结构。

stream_index:指定媒体流,如果是基于时间的随机访问,则第三个参数timestamp 将以此媒体流的时间基准为单位;如果设为负数,则相当于不指定具体的媒体流,FFMPEG 会按照特定的算法寻找缺省的媒体流,此时,timestamp的单位为A V_TIME_BASE(微秒)。

timestamp:时间标签,单位取决于其他参数。

flags:定位方式,A VSEEK_FLAG_BYTE表示基于字节偏移,A VSEEK_FLAG_FRAME表示基于帧号,其它表示基于时间。

av_close_input_file:

void av_close_input_file(A VFormatContext *s);

关闭一个媒体文件:释放资源,关闭物理IO。

avcodec_find_decoder:

A VCodec *avcodec_find_decoder(enum CodecID id);

A VCodec *avcodec_find_decoder_by_name(const char *name);

根据给定的codec id或解码器名称从系统中搜寻并返回一个A VCodec结构的指针。avcodec_open:

int avcodec_open(A VCodecContext *avctx, A VCodec *codec);

此函数根据输入的A VCodec指针具体化A VCodecContext结构。在调用该函数之前,需要首先调用avcodec_alloc_context分配一个A VCodecContext结构,或调用avformat_open_input获取媒体文件中对应媒体流的A VCodecContext结构;此外还需要通过avcodec_find_decoder获取A VCodec结构。

这一函数还将初始化对应的解码器。

avcodec_decode_video2

int avcodec_decode_video2(A VCodecContext *avctx, A VFrame *picture, int *got_picture_ptr, A VPacket *avpkt);

解码一个视频帧。got_picture_ptr指示是否有解码数据输出。

输入数据在A VPacket结构中,输出数据在A VFrame结构中。A VFrame是定义在avcodec.h 中的一个数据结构:

typedef struct A VFrame {

FF_COMMON_FRAME

} A VFrame;

FF_COMMON_FRAME定义了诸多数据域,大部分由FFMpeg内部使用,对于用户来说,比较重要的主要包括:

#define FF_COMMON_FRAME \

......

uint8_t *data[4];\

int linesize[4];\

int key_frame;\

int pict_type;\

int64_t pts;\

int reference;\

......

FFMpeg内部以planar的方式存储原始图像数据,即将图像像素分为多个平面(R/G/B 或Y/U/V),data数组内的指针分别指向四个像素平面的起始位置,linesize数组则存放各个存贮各个平面的缓冲区的行宽:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++data[0]->#################################++++++++++++

++++++++++++###########picture data##########++++++++++++

........................

++++++++++++#################################++++++++++++

|<-------------------line_size[0]---------------------->|

此外,key_frame标识该图像是否是关键帧;pict_type表示该图像的编码类型:I(1)/P(2)/B(3)……;pts是以time_base为单位的时间标签,对于部分解码器如H.261、H.263和MPEG4,可以从头信息中获取;reference表示该图像是否被用作参考。

avcodec_decode_audio4

int avcodec_decode_audio4(A VCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, A VPacket *avpkt);

解码一个音频帧。输入数据在A VPacket结构中,输出数据在frame中,got_frame_ptr 表示是否有数据输出。

avcodec_close

int avcodec_close(A VCodecContext *avctx);

关闭解码器,释放avcodec_open中分配的资源。

测试程序

#include

#include

#include

#include

#include "libavutil/avstring.h"

#include "libavformat/avformat.h"

#include "libavdevice/avdevice.h"

#include "libavcodec/opt.h"

#include "libswscale/swscale.h"

#define DECODED_AUDIO_BUFFER_SIZE 192000

struct options

{

int streamId;

int frames;

int nodec;

int bplay;

int thread_count;

int64_t lstart;

char finput[256];

char foutput1[256];

char foutput2[256];

};

int parse_options(struct options *opts, int argc, char** argv)

{

int optidx;

char *optstr;

if (argc < 2) return -1;

opts->streamId = -1;

opts->lstart = -1;

opts->frames = -1;

opts->foutput1[0] = 0;

opts->foutput2[0] = 0;

opts->nodec = 0;

opts->bplay = 0;

opts->thread_count = 0;

strcpy(opts->finput, argv[1]);

optidx = 2;

while (optidx < argc)

{

optstr = argv[optidx++];

if (*optstr++ != '-') return -1;

switch (*optstr++)

{

case 's': //< stream id

opts->streamId = atoi(optstr);

break;

case 'f': //< frames

opts->frames = atoi(optstr);

break;

case 'k': //< skipped

opts->lstart = atoll(optstr);

break;

case 'o': //< output

strcpy(opts->foutput1, optstr);

strcat(opts->foutput1, ".mpg");

strcpy(opts->foutput2, optstr);

strcat(opts->foutput2, ".raw");

break;

case 'n': //decoding and output options

if (strcmp("dec", optstr) == 0)

opts->nodec = 1;

break;

case 'p':

opts->bplay = 1;

break;

case 't':

opts->thread_count = atoi(optstr);

break;

default:

return -1;

}

}

return 0;

}

void show_help(char* program)

{

printf("简单的FFMPEG测试方案\n");

printf("Usage: %s inputfile [-sstreamid [-fframes] [-kskipped]

[-ooutput_filename(without extension)] [-p] [-tthread_count]]\n",

program);

return;

}

static void log_callback(void* ptr, int level, const char* fmt, va_list vl)

{

vfprintf(stdout, fmt, vl);

}

/ *音频渲染器的代码(OSS)*/

#include

#include

#include

#include

#define OSS_DEVICE "/dev/dsp0"

struct audio_dsp

{

int audio_fd;

int channels;

int format;

int speed;

};

int map_formats(enum SampleFormat format)

{

switch(format)

{

case SAMPLE_FMT_U8:

return AFMT_U8;

case SAMPLE_FMT_S16:

return AFMT_S16_LE;

default:

return AFMT_U8;

}

}

int set_audio(struct audio_dsp* dsp)

{

if (dsp->audio_fd == -1)

{

printf("无效的音频DSP ID!\n");

return -1;

}

if (-1 == ioctl(dsp->audio_fd, SNDCTL_DSP_SETFMT, &dsp->format)) {

printf("无法设置DSP格式!\n");

return -1;

}

if (-1 == ioctl(dsp->audio_fd, SNDCTL_DSP_CHANNELS, &dsp->channels)) {

printf("无法设置DSP格式!\n");

return -1;

}

if (-1 == ioctl(dsp->audio_fd, SNDCTL_DSP_SPEED, &dsp->speed))

{

printf("无法设置DSP格式!\n");

return -1;

}

return 0;

}

int play_pcm(struct audio_dsp* dsp, unsigned char *buf, int size)

{

if (dsp->audio_fd == -1)

{

printf("无效的音频DSP ID!\n");

return -1;

}

if (-1 == write(dsp->audio_fd, buf, size))

{

printf("音频DSP无法写入!\n");

return -1;

}

return 0;

}

/* 音频渲染代码结束*/

/* 视频渲染代码*/

#include

#include

#define FB_DEVICE "/dev/fb0"

enum pic_format

{

eYUV_420_Planer,

};

struct video_fb

{

int video_fd;

struct fb_var_screeninfo vinfo;

struct fb_fix_screeninfo finfo;

股指期货基础知识介绍

股指期货基础知识介绍:五类要点需牢记 2010年02月22日06:46上海证券报我要评论(1) 字号:T|T 前言 积极稳妥地发展股指期货等金融期货市场,既是资本市场进一步深入发展的客观需要,也是市场各类投资者进行风险管理的迫切要求。从全球经验来看,股指期货为市场提供了保值避险的工具,增加了做空交易机制,有利于促进股票市场实现健康、持续、稳定发展。构建健康稳定的金融期货市场,离不开成熟理性的市场投资者。为了帮助广大投资者掌握股指期货基础知识与交易规则,了解产品功能及市场特点,中国金融期货交易所推出本期股指期货基础知识专版,供投资者学习参考。有足够知识准备的投资者,才是真正受保护的投资者!希望投资者认真做好知识准备,强化风险防范意识,建立“买者自负”的意识,做一名“知风险、懂规则”的理性投资者。 一、股指期货基础 1、什么是股指期货 期货合约是由期货交易所统一制定的、规定在将来某一特定的时间和地点交割一定数量标的物的标准化合约。这个标的物,又叫基础资产或者标的资产,可以是某种商品,如铜或原油,也可以是某种金融资产,如外汇、债券,还可以是某个金融指标,如三个月同业拆借利率或指数等。如果这个标的物是某个股票价格指数,则该期货就是股票价格指数期货,简称股指期货。 2、股指期货的产生与发展过程 股指期货最早出现于美国市场。20世纪70年代,西方各国出现了经济滞胀,经济增长缓慢,物价飞涨,政治局势动荡,当时股票市场经历了二战后最严重的一次危机,在1973-1974年的股市下跌中道琼斯指数跌幅达到了45%,投资者意识到在股市下跌中没有适当的管理金融风险的手段,开始研究用于规避股票市场系统性风险的工具。1982年2月,美国商品期货交易委员会(CFTC)批准推出股指期货。同年2月24日,美国堪萨斯期货交易所(KCBT)推出了全球第一只股指期货合约——价值线综合指数期货合约;4月21日,芝加哥商业交易所(CME)推出了S&P 500指数期货合约。股指期货一经诞生就受到了市场的广泛关注,价值线指数期货推出的当年就成交了35万张,S&P 500指数期货的成交量更达到了150万张。股指期货的成功,不仅扩大了美国期货市场的规模,也引发了世界性的股指期货交易热潮。成熟市场及新兴市场纷纷推出股指期货交易。目前,全部成熟市场以及绝大多数的新兴市场都有股指期货交易,股指期货成为股票市场最为常见、应用最为广泛的风险管理工具。按照世界交易所联合会的统计,2009

期货入门基础知识视频

期货入门基础知识视频 1、只用你赔得起的钱: 如果以家计中的资金来从事期货商品投资,那注定要失败的,因为如此,你将不能从容运用 心智上的自由作出稳健的买卖决定。期货商品买卖的成功要素之一,就是心态独立;也就是说:“买卖的决定,必须不受赔掉家用钱的恐惧感所左右。” 2、认识自己: 你必须具有冷静客观的气质,控制情绪的能力,并且在持有一笔买卖合约时不会失眠。虽然这种功夫能够训练出来,但成功商品买卖者似乎向来就能在交易进行当中处之泰然。“在期货商品市场中,每天都有许多令人激奋的事情发生,所以你必须要有决断的心态,有能力应付市场短期的状况,不然你会在短短几分钟之内,数度改变你的心意和合约方向。” 3、资金不要投入超过1/3: 最好的方法,就是你的交易资金常保持三倍于持有合约所需的保证金。为了遵循这个规则,必要时减少合约口数也无妨。这个规则可帮助你避免用所有的交易资金来决定买卖,有时会被迫提早平仓,但你会因而避免大赔。 4、交易判断不要建立在希望上: 不要太过希望立刻有所进展,否则你会根据希望进行买卖。成功者能够在买卖中不受情绪影响。“虽然在生活的其它领域中希望是一种美德,但在期货商品买卖中,它却会成为真正的障碍。”一个新手盼望市场会转变成对他有利时,往往会违反基本的买卖规则。 5、要有适当的休息:

每天买卖会使判断力钝化。休息一下,你会对市场有一个较为超然的看法;它还会帮你以另一个心境来看自己以及下一个目标,使你有一个更好的视野来观察市场诸多因素。 6、赚钱合约不轻易平仓,要让利润持续: 将赚钱的合约卖出,可能是导致商品投资失败的原因之一。“只要有钱赚,就不会破产”的口号将不适用于商品投资。其理由为:假如你不能让利润继续滋长,则你的损失将会超过利润把你压垮。成功的交易者说,不可只为了有利润而平仓;要结掉一个赚钱的合约,你必须有个理由。 7、学着喜爱损失: “学着喜爱损失,因为那是商业的一部份。如果你能心平气和地接受损失,而且不伤及你的元气,那你就是走在通往商品投资的成功路上。”在你成为一位买卖好手之前,务须去除你对损失的恐惧感。 8、避免以市价进出: 成功的交易者认为,依市价买卖是缺乏自律功夫表现,除非是要平仓才用市价买卖,否则“你应朝着尽量不用市价单的目标走。

最新服务器基础知识(初学者必看)

服务器基础知识【初学者必看】 1. 什么是服务器 就像他的名字一样,服务器在网络上为不同用户提供不同内容的信息、资料和文件。可以说服务器就是Internet网络上的资源仓库,正是因为有着种类繁多数量庞大内容丰富的服务器的存在,才使得Internet如此的绚丽多彩。 2. 服务器的种类和功能 (1) WWW服务器(WWW Server) WWW服务器也称为Web服务器(Web Server)或HTTP服务器(HTTP Server),它是Internet上最常见也是使用最频繁的服务器之一,WWW服务器能够为用户提供网页浏览、论坛访问等等服务。比如:我们在使用浏览器访问https://www.sodocs.net/doc/325899918.html,的时候,实际上就是在访问Discuz!的WWW服务器,从该WWW服务器获取需要的论坛资料和网页。 (2) FTP服务器(FTP Server) FTP服务器是专门为用户提供各种文件(File)的服务器,FTP服务器上往往存储大量的文件,例如:软件、MP3、电影、程序等等。用户只要使用FTP客户端软件登录到FTP服务器上就可以从FTP服务器下载所需文件和资源到自己的电脑上,同时,

你也可以把自己电话上的文件上传到FTP上供其他用户下载,以实现文件资源的共享。 (3) 邮件服务器(Mail Server) e-mail是Internet上应用最频繁的服务之一,而Internet上每天数亿百亿计的电子邮件的收发都是通过邮件服务器实现的。邮件服务器就像邮局一样,可以为用户提供电子邮件的接收存储和发送服务。 除了以上介绍的3种主要服务器之外,还有很多其他类型的网络服务器,例如:数据库服务器(DatabaseServer)、代理服务器(Proxy Server)、域名服务器(Domain Name Server)等等…… 3. 服务器的操作系统 目前服务器中使用的操作系统主要有两类:Windows和Unix。 (1) Windows Windows是美国微软公司(Microsoft)开发的操作系统,在服务器领域,主要有Windows2000Server/Advanced Server/Data Center与Windows2003 Standard Edition/EnterpriseEdition操作系统,Windows的优点是操作简 单,由于Windows使用图形界面进行操作,因而对各种服务器软件功能配置简

期货新手入门手册

期货新手入门手册 (一)期货专有名词释义 熊市:处于价格下跌期间的市场。 牛市:处于价格上涨期间的市场。 套利:一种交易技术,即在某市场买进现货或期货商品,同时在另一个市场卖出相同或类似的商品,并借两个交易产生的价差而获利,叫做跨市套利。此外,还有跨期套利、期现套利等。 投机:为获取大量利润进行风险性买卖,不是为了避险或投资。 期货合约:由交易所统一制定的、规定在将来某一特定的时间和地点交割一定数量标的物的标准化合约。 保证金:期货交易者按照规定标准交纳的资金,用于结算和保证履约,一般为合约价值的10%—15%。交易所和期货公司有权调整保证金的收取比例。 开盘价:某一期货合约开市前五分钟内经集合竞价产生的成交价格。集合竞价未产生成交价格的,以集合竞价后第一笔成交价为开盘价。 开盘集合竞价:在某品种某月份合约每一交易日开市前5分钟内进行,其中前4分钟为期货合约买、卖指令申报时间,后1分钟为集合竞价撮合时间,开市时产生开盘价。 收盘价:某一期货合约当日交易的最后一笔成交价格。 结算价:某一期货合约当日成交价格按照成交量的加权平均价。当日无成交的,以上一交易日的结算价作为当日结算价。

最小变动价位:某一合约的单位价格涨跌变动的最小值。 持仓量:期货交易者所持有的未平仓合约的双边数量。 开仓:交易者新买入或新卖出一定数量的期货合约,也称为“建仓”。与股票市场不同,期货实行双向交易,既可以先买入也可以先卖出。买入期货合约后持有的头寸成为多头头寸,简称“多头”。卖出期货合约后持有的头寸成为空头头寸,简称“空头”。 平仓:投资者建仓后,可选择在合约到期日前通过一笔数量及交割月份相同、方向相反的同品种期货合约来冲销原有的期货合约,以此完成期货交易的行为。期货是T+0交易方式,日内随时可以平仓。 强行平仓:当投资者违反《期货经纪合同》和交易所相关业务规定时,交易所及会员对其违规持有的相关合约持仓予以平仓的强制措施。 限仓:交易所规定会员或投资者可以持有的,按单边计算的某一合约投机头寸的最大数额。套期保值头寸实行审批制,不受限仓数量限制。

(仅供参考)服务器硬件入门基础知识

服务器硬件入门基础知识 开篇一:服务器主板 服务器主板概述 对于服务器而言,稳定性才是首要,服务器必须承担长年累月高负荷的工作要求,而且不能像台式机一样随意的重起,为了提高起可靠性普遍的做法都是部件的冗余技术,而这一切的支持都落在主板的肩上。下面我就来看看有关服务器主板的一些特性: 1、首先,服务器的可扩展性决定着它们的专用板型为较大的ATX,EATX或WATX。 2、中高端服务器主板一般都支持多个处理器,所采用的CPU也是专用的CPU。 3、主板的芯片组也是采用专用的服务器/工作站芯片组,比方Intel E7520、ServerWorks GC-HE等等,不过像入门级的服务器主板,一般都采用高端的台式机芯片组(比如Intel875P芯片组) 4、服务器通常要扩展板卡(比如如网卡,SCSI卡等),因此我们通常都会发现服务器主板上会有较多的PCI、PCI-X、PCI—E插槽。 5、服务器主板同时承载了管理功能。一般都会在服务器主板上集成了各种传感器,用于检测服务器上的各种硬件设备,同时配合相应管理软件,可以远程检测服务器,从而使网络管理员对服务器系统进行及时有效的管理。

6、在内存支持方面。由于服务器要适应长时间,大流量的高速数据处理任务,因此其能支持高达十几GB甚至几十GB的内存容量,而且大多支持ECC内存以提高可靠性(ECC内存是一种具有自动纠错功能的内存,由于其优越的性能使造价也相当高)。 7、存储设备接口方面。中高端服务器主板多采用SCSI接口、SATA接口而非IDE接口,并且支持RAID方式以提高数据处理能力和数据安全性。 8、在显示设备方面。服务器与工作站有很大不同,服务器对显示设备要求不高,一般多采用整合显卡的芯片组,例如在许多服务器芯片组中都整合有ATI的RAGE XL显示芯片,要求稍高点的就采用普通的AGP显卡。而如果是图形工作站,那一般都是选用高端的3DLabs、ATI等显卡公司的专业显卡。 9、在网络接口方面。服务器/工作站主板也与台式机主板不同,服务器主板大多配备双网卡,甚至是双千兆网卡以满足局域网与Internet的不同需求。 10、最后是服务器的价格方面。一般台式机主板顶天也不过1、2千,而服务器主板的价格则从1千多元的入门级产品到几万元甚至十几万元的高档产品都有! 推荐品牌:泰安、超微、Intel 开篇二:服务器CPU 服务器CPU概述 服务器是网络中的重要设备,要接受少至几十人、多至成千上万人的访问,因此对服务器具有大数据量的快速吞吐、超强的稳定性、长时间运行等严格要求。所以说CPU是计算机的“大脑”,是衡量服务器

期货交易基本知识

期货(现货中远交易)交易基本知识 期货交易是市场经济发展到一定阶段的必然产物,它只需交纳少量保证金,通过在期货交易所公开竞价买卖期货合约,并在合约到期前通过对冲,即先买入后卖出(或相反),或者进行实物交割来完成交易。因此,期货交易是对期货合约进行的买卖,主要目的在于转移现货交易中的风险,或猎取风险利润,又分套期保值业务与风险投资业务。 一、期货交易的主要特征 以小博大(保证金制度) 期货交易只需交纳比率很低的履约保证金,通常占交易额的5-10%,从而使交易者可以用少量资金进行大宗买卖,节省大量的流动资金。 获利机会多(双向交易) 无论市场行情看涨还是下跌,均可入市和获得盈利机会。价格看涨时,先低买再高卖的过程称为“多头”;价格看跌时,先高卖再低买的过程称为“空头”。

交易便利(标准化合约) 期货市场中买卖的是标准化的合约,只有价格是可变因素,其它交货时间、地点、方式、数量、质量都是固定的,只通过频繁的合约交易而创造较多的盈利机会,而无需面临找上家、找下家的问题。 不担心履约问题(结算制度) 所有期货交易都通过期货交易所进行结算,且期货交易所成为任何一个买者或卖者的交易对方,为每笔交易做担保。 二、期货交易的主要功能 转移、回避价格风险 这种功能作用主要针对生产厂商、加工厂商和贸易厂商而言的,也就是对套期保值者来讲的。随着商品交换的复杂化、社会化、市场经济的运行变得越来越充满不确定性。某种商品的价格因以供求为代表的多种因素的影响而非常容易发生波动。而价格的波动对无论是商品供给者还是商品需求者来说是有很大影响的,因此,人们总是想方设法转移、回避和分散价格风险,这也正是期货交易发展起来的主要

商品期货入门基础知识

商品期货入门基础知识 具体而言,农副产品约20种,包括玉米,大豆、小麦、稻谷、 燕麦、大麦、黑麦、猪肚、活猪、活牛、小牛、大豆粉、大豆油、 可可、咖啡、棉花、羊毛、糖、橙汁、菜籽油等,其中大豆、玉米、小麦被称为三大农产品期货:金属产品9种、包括金、银、铜、铝、铅、锌、镍、耙、铂、钢;化工产品5种,有原油、取暖用油、无铅 普通汽油、丙烷、天然橡胶;林业产品2种,有木材、夹板。 上市的商品期货品种 截止2013年10月31日,经中国证监会的批准,国内可以上市 交易的期货商品有以下种类: (1)上海期货交易所:螺纹、热卷、线材、铜、铝、锌、铅、天 然橡胶、燃油、黄金、钢材、白银 (2)大连商品交易所:大豆、豆粕、豆油、塑料、棕榈油、玉米、PVC、焦炭、焦煤、铁矿石、纤板、pp合约、鸡蛋、胶板 (3)郑州商品交易所:小麦、棉花、白糖、PTA、菜籽油、早籼稻、甲醇、玻璃、菜籽、菜粕 期货品种代码: 大连商品交易所:大豆--a豆粕--m豆油--y玉米--cLLDPE--l棕榈油--pPVC--v焦炭--j焦煤--jm;铁矿石--i 郑州商品交易所:白糖--SRPTA--TA棉花--CF郑麦--WH普麦-- PM早籼稻--RI玻璃--FG菜粕--RM菜籽--RS菜油--OI甲醇--ME 上海商品交易所:铜--cu铝--al锌--zn铅--pb天胶--ru燃油- -fu黄金--au线材--wr螺纹钢--rb白银--ag

(1)杠杆机制,以小博大。投资商品期货只需要交纳5%~20%的 履约保证金,就可控制100%的虚拟资金。 (2)交易便利。由于期货合约中主要因素如商品质量、交货地点 等都已标准化, 商品期货走势 合约的互换性和流通性较高。 (3)信息公开,交易效率高。期货交易通过公开竞价的方式使交 易者在平等的条件下公平竞争。同时,期货交易有固定的场所、程 序和规则,运作高效。 (4)期货交易可以双向操作,简便、灵活。交纳保证金后即可买 进或卖出期货合约,且只需用少数几个指令在数秒或数分钟内即可 达成交易。 (5)合约的履约有保证。期货交易达成后,须通过结算部门结算、确认,无须担心交易的履约问题。 卖方交割流程 卖方交割流程:交割预报——货物入库(交割仓库验收)——交割仓库或指定质检机构检验——交割仓库开具《标准仓单注册申请表》——到交易所办理标准仓单注册——到交易所交仓单——参与交割,获得货款和开具增值税发票。 如在厂库标准仓单注册,则从上述流程中“交割仓库开具《标准仓单注册申请表》”开始交割流程。 卖方必须在最后交割日闭市以前完成标准仓单注册,并将仓单交到交易所,否则即判定为违约。滚动交割时,卖方在交收日结算后 拿到80%货款,余款在提交了增值税专用发票后结清。一次性交割时,卖方在最后交割日结算后拿到80%货款,余款在提交了增值税 专用发票后结清。 买方交割流程

期货入门知识

期货入门知识 期货交易 所谓期货交易,是指交易双方在期货交易所集中买卖期货合约的交易行为。 在现货市场上,买卖双方一方交货,另一方付款,或通过谈判和签订合同达成交易。合同中可规定商品的质量、数量、价格和交货时间、地点等。 期货交易是在现货交易基础上发展起来的、通过在期货交易所内成交标准化期货合约的一种新型交易方式。期货合约对商品质量、规格、交货的时间、地点等都做了统一的规定,唯一的变量是商品的价格。买卖者交纳一定的保证金后,按一定的规则就可以通过商品期货交易所公开地竞价买卖。交易遵从“公开、公平、公正”的原则。一般情况下,大多数合约都在到期前以对冲方式了结,只有极少数要进行实货交割。 期货交易与现货交易有相同的地方,如都是一种交易方式、都是真正意义上的买卖、涉及商品所有权的转移等,不同的地方有以下几点: 1. 买卖的直接对象不同。现货交易买卖的直接对象是商品本身,有样品、有实物、看货定价。而期货交易买卖的直接对象是期货合约,是买进或卖出多少手或多少张期货合约。 2. 交易的目的不同。现货交易是一手钱、一手货的交易,马上或一定时期内进行实物交收和货款结算。期货交易的目的不是到期获得实物,而是通过套期保值回避价格风险或投资获利。 3. 交易方式不同。现货交易一般是一对一谈判签订合同,具体内容由双方商定,签订合同之后不能兑现,就要诉诸于法律。期货交易是以公开、公平竞争的方式进行交易。一对一谈判交易(或称私下对冲)被视为违法。 4. 交易场所不同。现货交易一般分散进行,如粮油、日用工业品、生产资料都是由一些贸易公司、生产厂商、消费厂家分散进行交易的,只有一些生鲜和个别农副产品是以批发市场的形式来进行集中交易。但是,期货交易必须在交易所内依照法规进行公开、集中交易,不能进行场外交易。 5. 保障制度不同。现货交易有《合同法》等法律保护,合同不兑现即毁约时要用法律或仲裁的方式解决。期货交易除了国家的法律和行业、交易所规则之外,主要是经保证金制度为保障,以保证到期兑现。 6. 商品范围不同。现货交易的品种是一切进入流通的商品,而期货交易品种是有限的。主要是农产品、石油、金属商品以及一些初级原材料和金融产品。 7. 结算方式不同。现货交易是货到款清,无论时间多长,都是一次或数次结清。期货交易由于实行保证金制度,必须每日结算盈亏,实行逐日盯日制度。结算价格是按照成交价为依据计算的。 期货交易入门: 1. 期货合约的概念: 期货合约是由交易所设计,经国家监管机构审批上市的标准化的合约。期货合约可借交收现货或进行对冲交易来履行或解除合约义务。 2. 合约组成要素: A. 交易品种 B. 交易数量和单位 C. 最小变动价位,报价须是最小变动价位的整倍数。 D. 每日价格最大波动限制,即涨跌停板,它充当了市场价格波动的刹车器。市场价格不会因突发的歇斯底 里症”而被推挤至不当的水平,同时期货交易者也会有充裕的时间来重新评估其市场部位。 当市场价格涨到最大涨幅时,我们称“涨停板”,反之称“跌停板”。当市场价格到达当日的涨跌停板时,市场交易并未封闭起来,它只是禁止市场不得以逾越涨跌停板范围的价格去进行交易。如果交易者愿意取得相反方向的期货部位,亦即涨停时有人愿意卖出,跌停时有人愿意买进,在此一涨跌停板下,交易还会发生。当然,当日价格也可能从涨停板下跌到跌停板,也可能从跌停板上涨到涨停板。 E. 合约月份 F. 交易时间 G. 最后交易日

服务器基础知识(初学者必看)

精心整理服务器基础知识【初学者必看】 1. 什么是服务器? ?? 就像他的名字一样,服务器在网络上为不同用户提供不同内容的信息、资料和文件。可以说服 2. ?? WWW服务器也称为Web服务器(Web Server)或HTTP服务器(HTTP Server),它是Internet上最常见也是使用最频繁的服务器之一,WWW服务器能够为用户提供网页浏览、论坛访问等等服务。比如:我们在使用浏览器访问?

? (2) FTP服务器(FTP Server)? 以从 (3)

?? e-mail是Internet上应用最频繁的服务之一,而Internet上每天数亿百亿计的电子邮件的收发都是通过邮件服务器实现的。邮件服务器就像邮局一样,可以为用户提供电子邮件的接收存储和发送服务。? ?? ……? 3. ? ?? Windows是美国微软公司(Microsoft)开发的操作系统,在服务器领域,主要有Windows2000Server/Advanced?Server/Data Center与Windows2003 Standard Edition/EnterpriseEdition操作系统,Windows的优点是操作简?

单,由于Windows使用图形界面进行操作,因而对各种服务器软件功能配置简便。但它的缺点也不可忽视,例如:Windows操? 作系统成本较高;安全性相对较低;能承受的访问量较低等等。? Linux, Linux 企业(包括电信企业和Google、百度、新浪、搜狐等等)的服务器都运行在Unix/Linux系统之上。?

4. Apache与IIS? ?Apache与IIS都属于WWW服务器,是世界上使用最多的两种WWW服务器。? ?IIS操议 协议 但IIS 的性能和安全性相对较差,并且IIS只能在Windows中使用,无法在UNIX中运行。? (2) Apache?

现货交易基础知识

现货交易基础知识 现货交易作为商品期货的基础,在19世纪末20世纪初就已出现。从商品交易发展的过程(传统现货商品交易?中远期合约交易?现货仓单交易?商品期货交易?商品期权交易?股权交易)来看,现货交易是期货、股票交易的基础,期货、股票交易是现货交易的派生,二者不能相互代替。由于种种原因,我国是最早发展的股票市场,然后才是期货市场,2000年之后大力发展现货市场。可以肯定的是,国家越来越重视到现货交易的基础功能了,没有现货市场的充分发展,期货市场、股票市场的发展也将会受到制约。现货交易投资成为近年中国金融市场的一种新兴投资方式,现货投资在现今股市低迷,品种繁多,令投资者无从选择,突显优势,能抓住真正的“黑马”,让大多数的投资者在被套的情况下,更具有积极意义。一现货交易在现代经济中的社会地位和作用: 现货交易进入市场运作的切入点为电子商务,参与经营大宗初级原料商品包括农产品,金属类,建材类,能源等多种交易品种,开展专业纵深的B-to-B商业模式。 1 现货交易为买卖双方提供资金在线结算服务,避免了企业的“三角债”问题 现货交易采用先进的交易结算智能网络体系,在网上开展集中竞价交易,由交易市场进行统一撮合,统一资金结算,保证现货交易的公开,公平,公正。交易成交后,市场为买卖双方进行资金结算,实物交收,先进的即时入账,保证买卖双方的共同利益,从而避免了我国企业现存的较严重的“三角债”问题。 2 现货仓单的标准化,杜绝了“假冒伪劣”商品 3 完善的物流配送体系,满足不同交易商的交割需求 4 现货交易行业的形成,对我国现货贸易流通的发展起到了不可替代的作用

现货交易是我国现货流通领域出现的新兴事物,在我国经济生活中尚处于起步阶段,但其先进的运作方式,特有的功能已经引起全社会的普遍关注。 二现货交易的优点: 现货交易是以现货市场为基础进行的,现货交易也称为网上现货商品交易,因为我国地域辽阔,资源丰富,人口众多,故而商品经济的发展更是突飞猛进。在不远的将来,一半以上的商品将在网上进行。从97年开始,国内已经纷纷成立了各种商品的专业交易市场,各现货商品交易市场交易金额成几何倍增长,这充分说明:现货交易让我们拥有了一个无限的发展空间。 1 投资成员多 a.现货生产商 b.现货使用商 c.套利投机商 在现货交易里,我们所做的就是套利投机商,现货交易市场上市的交易品种在现货市场中较大的价格波动幅度,完善的交易机制有利于投机者灵活买卖,风险控制,充分博取价格波动中的差价,从而获得巨额投资回报。 2 信息明确,规律明显 现货交易是利用国际互联网进行集中竞价,统一撮合,在线结算,价格行情实时显示有利于交易商准确快速判断价格行情 3 操作简单,投资见效快 投资者可长线持有现货商品进行实物交收(割),也可短线即时买卖,对冲交易套取差价,正所谓投资小风险小,回报快收益高 三.现货交易的特点: 1 现货仓单标准化 现货仓单的所有条款包括商品的等级,质量,数量,色泽等都是预先规定好的,具有标准化的特点。 2 网上交易集中化

期货从业基础知识讲义

一、题型及分布: 单选题:每题0.5分,60题,共30分 多选题:每题0.5分,60题,共30分 判断题:每题0.5分,20题,共10分 综合题:每题2分,15题,共30分 满分100分,60分及格 二、科目章节概要: 第一章期货及衍生品概述 第二章期货市场组织结构与投资者 第三章期货合约与期货交易制度 第四章套期保值 第五章期货投机与套利交易 第六章期权 第七章外汇衍生品 第八章利率期货及衍生品 第九章股指期货及其他权益类衍生品 第十章期货价格分析 第一章期货及衍生品概述 一、期货及相关衍生品 (一)期货(Futures) 期货与现货相对应,并由现货衍生而来。期货不是货,通常是指以某种大宗商品或金融资产为标的可交易的标准化合约。期货合约是期货交易所统一制定的、规定在将来某一特定的时间和地点交割一定数量标的物的标准化合约。期货合约包括商品期货合约、金融期货合约及其他期货合约。 (二)远期(Forwards/Forward Contract) 远期,也称为远期合同或远期合约。远期合约是指交易双方约定在未来的某一确定时间,以确定的价格买卖一定数量的某种标的资产的合约。一般说来,双方协议确定合约的各项条款,其合约条件是为买卖双方量身定制的,满足了买卖双方的特殊要求,一般通过场外交易市场(OTC)达成。常见的远期交易包括商品远期交易、远期利率协议(FRA)、外汇远期交易、无本金交割外汇远期交易(NDF)以及远期股票合约等 (三)互换(Swaps) 互换是指两个或两个以上当事人按照商定条件,在约定时间内交换一系列现金流的合约。远期合约可以看成仅交换一次现金流的互换。在大多数情况下,由于互换双方会约定在未来多次交换现金流,因此互换可以看作是一系列远期的组合。最常见也最重要的互换是利率互换和货币互换,此外还有商品互换、股权类互换、远期互换等等。 (四)期权(Options) 期权是一种选择的权利,即买方能够在未来的特定时间或者一段时间内按照事先约定的价格买入或者卖出某种约定标的物的权利。期权在交易所交易的是标准化的合约;也有在场外交易市场(OTC)交易的,它是由交易双方协商确定合同的要素,满足交易双方的特殊需求而签订的非标准化合约。按照标的资产划分,常见的期权包括利率期权、外汇期权、

期货入门基础知识

目录 期货概述 (1) 期货市场的基本特点与功能 (4) 期货市场的组织结构 (5) 期货的套期保值 (6) 期货市场的赢利方式 (10) 如何做个成功的期货投资者 (13) 期货市场的投资理念 (16) 股指期货基础知识 (17) 附录 (19)

1期货交易概述 1.1概念 (一)期货合约:是指由期货交易所统一制订的,规定在将来某一特定的时间和地点交割一定数量和质量实物商品或金融商品的标准化合约。所谓标准化合约是指合约的数量、质量、交货时间和地点等都是既定的,唯一的变量是价格。广义的期货概念还包括了交易所交易的期权合约。大多数期货交易所同时上市期货与期权品种。 (二)期货交易:是指在期货交易所内集中买卖期货合约的交易活动 (三)期货交易的特点: ①保证金制度。利用杠杆原理以小博大。 ②双向交易制度。可以买涨,可以抛空,涨跌都有获利的机会。 ③T+0的交易结算制度。当天可以多次买入或卖出。 ④信息公开及时。投资者均在同一起跑线上。 (四)期货的分类 (五)期货与现货远期合同的区别 1、期货是标准化的契约交易,交易数量、地点和交割日期都是标准化的,没有零星的交 易;而远期交易契约的数量与交割日期由交易的双方自行决定。 2、期货交易在期货交易所内公开进行,而远期契约交易没有固定的交易场所,交易内容 一般不会公开。 3、期货交易的保证金比例固定,而远期契约交易的保证金有双方自行商议。 4、期货交易由期货交易所负责结算,只有价格风险;而远期交易有价格与信用双重风险。 5、期货交易可以实际交割,也可平仓;而远期契约确定后,不可以平仓,只能交割。(六)期货投资与股票投资的区别 1、股票交易是产权转移,而期货交易是风险的转移。 2、股票可以长期持有,而期货则有月份的限制,到期必须实物交割,交割结 束后合约取消。 3、股票只能先买后卖,而期货既能先买后卖,也可以先卖后买。

服务器系统基础知识

服务器系统基础知识 1 什么是服务器? 服务器是计算机的一种,它是在网络操作系统的控制下为网络环境里的客户机提供(如PC) 共享资源(包括查询、存储、计算等)的高性能计算机,它的高性能主要体现在高速度的CPU 运算能力、长时间的可靠运行、强大的I/O 外部数据吞吐能力等方面。服务器主要为客户机提供Web 应用、数据库、文件、打印服务。简单的说,服务器就是在网络中为其他客户机提供服务的计算机. 2 服务器包括哪些子系统? CPU、内存、磁盘、扩展插槽、显示卡和网卡、电源、风扇。 3 服务器按处理器架构分哪几类? 巨型机与大型机(专用处理器)、小型机(IA-64,RISC处理器)、PC服务器(CISC处理器) 4 PC服务器按外形结构分类? A 塔式服务器(通用式服务器):具有较大的机箱尺寸,因此其内部扩展能力较强,可以安装的扩展板卡以及硬盘的数量都比较多 B 机架式服务器(机柜优化服务器):机箱尺寸比较小巧,在机柜中可以同时放置多台服务器,从而获得更高的处理能力。 C 刀片式服务器:超高密度服务器为动态的,空间紧缺的,向外扩展的环境而优化的快速部署。 5 服务器按CPU个数分类:? 4路及4路以上服务器(企业级服务器)、2路服务器(部门级服务器)、1路服务器(入门级服务器) 6 什么是内存? 内存是界于CPU 和外部存储之间,是CPU 对外部存储中程序与数据进行高速运算时存放程序指令、数据和中间结果的临时场所,它的物理实质就是一组具备数据输入输出和数据存储功能的高速集成电路。 7 服务器内存技术有哪些? ?Parity (校验) ?ECC ?ChipKill和高级ECC技术 ?双通道技术 ?内存交错技术 ?Registered内存 在线备用内存技术 内存镜像

期货基础入门知识

期货基础入门知识:期货K线图 期货K线图基础知识是期货技术分析的基础,小编在此将期货市场技术分析的一些基础知识进行归纳整理,希望能对进入期货市场的新手朋友们一些帮助。 1、什么是期货K线图: K线图又被称为蜡烛图,据说起源于十八世纪日本的米市,当时日本的米商用来表示米价的变动,后因其标画方法具有独到之处,因而在股市及期市中被广泛引用。它是以每个交易日的开盘价、最高价、最低价、和收盘价绘制而成,K线的结构可分为上影线、下影线及中间实体三部分。 K线是一条柱状的线条,由影线和实体组成。中间的矩形称为实体,影线在实体上方的细线叫上影线,下方的部分叫下影线。实体分阳线和阴线。如上图所示,左边的当收盘价在开盘价上方,叫做阳线(一般显示为红色),右边收盘价在开盘价下方叫做阴线。期货K 线按照不同的时间周期,可以分为日K线、周K线、月K线、60分钟K线、30分钟K线、1分钟K线等等,时间周期可以自己在期货行情软件上面进行设置。 2、期货K线的作用:

期货K线图的基础分析方法主要是结合K线的实体和上下影线来判断。在不考虑其他因素的情况下,单根K线如果是阳线则有利于上涨,阳线的实体越大越有利于上涨。单根K线如果是阴线,则有利于价格下跌,阴线实体越长越有利于下跌。上影线越长说明上方抛压较大,有利于下跌,上影线越长越有利于下跌。下影线越长说明下方买盘较强,越有利于价格上涨。 3、期货K线组合的作用: 期货K线图基础知识期货K线的组合通常是对连续的若干根K 线进行组合分析,作用要远大于单根K线的分析。如图所示,不同的K线组合反应出多头和空头的局势对比。例如通常情况下,希望十字星和希望之星都是有可能短期见底的信息,短期走势可能止跌反弹。期货K线组合对短线交易者作用较大,但是使用的时候也要注意,随着现在使用技术分析的人越来越多,实际走势当中也经常会出现技术陷阱,所以这些K线组合分析只能作为一种参考。 4、期货K线图的作用: 期货K线图就是有很多K线组合而成的。判断大势我们一般推荐看长期图,如周K线图和月K线图。 当周K线或者月K线处于上涨趋势,说明市场的中长期走势是上涨的,做中长期交易的应该持有多单;如果下跌趋势则持有空单。 当日K线或者60分钟K线处于上涨趋势,说明中短期趋势是上涨趋势,做中短期的交易者应该持有多单;如果下跌趋势则持有空单。

期货基础知识TXT

期货基础知识TXT.txt我的人生有A 面也有B面,你的人生有S面也有B面。失败不可怕,关键看是不是成功他妈。现在的大学生太没素质了!过来拷毛片,居然用剪切!有空学风水去,死后占个好墓也算弥补了生前买不起好房的遗憾。期货交易 所谓期货交易,是指交易双方在期货交易所集中买卖期货合约的交易行为。 在现货市场上,买卖双方一方交货,另一方付款,或通过谈判和签订合同达成交易。合同中可规定商品的质量、数量、价格和交货时间、地点等。 期货交易是在现货交易基础上发展起来的、通过在期货交易所内成交标准化期货合约的一种新型交易方式。期货合约对商品质量、规格、交货的时间、地点等都做了统一的规定,唯一的变量是商品的价格。买卖者交纳一定的保证金后,按一定的规则就可以通过商品期货交易所公开地竞价买卖。交易遵从“公开、公平、公正”的原则。一般情况下,大多数合约都在到期前以对冲方式了结,只有极少数要进行实货 GAGGAGAGGAFFFFAFAF

交割。期货交易与现货交易有相同的地方,如都是一种交易方式、都是真正意义上的买卖、涉及商品所有权的转移等,不同的地方有以下几点: 1、买卖的直接对象不同。现货交易买卖的直接对象是商品本身,有样品、有实物、看货定价。而期货交易买卖的直接对象是期货合约,是买进或卖出多少手或多少张期货合约。 2、交易的目的不同。现货交易是一手钱、一手货的交易,马上或一定时期内进行实物交收和货款结算。期货交易的目的不是到期获得实物,而是通过套期保值回避价格风险或投资获利。 3、交易方式不同。现货交易一般是一对一谈判签订合同,具体内容由双方商定,签订合同之后不能兑现,就要诉诸于法律。期货交易是以公开、公平竞争的方式进行交易。一对一谈判交易(或称私下对冲)被视为违法。 4、交易场所不同。现货交易一般分散进行,如粮油、日用工业品、生产资料都是由一些贸易公司、生产厂商、消费厂家分散进行交易的,只有一些生鲜和个别农副产品是以批发 GAGGAGAGGAFFFFAFAF

期货投资学 复习资料 期权期货整理

一、名词解释 1.期货:所谓期货,一般指期货合约,就是指由期货交易所统一制定的、规定在将来某一特定的时间和地点交割一定数量标的物的标准化合约。 2.期货价格理论:即持有成本理论,商品期货价格等于即期现货价格加上合约到期的储存费用(持有成本)。 3.结算机构:结算机构是负责对每日成交的期货合约进行清算,对结算所会员的保证金账户进行调整平衡,负责收取和管理保证金的机构。 4.期货经纪公司:是以期货经纪代理业务为主业的公司,即依法成立,代理客户,用自己的名义进行期货买卖,以收取客户佣金为主业的独立核算经济实体 5.期货合约:是指由期货交易所统一制定的、规定在将来某一特定的时间和地点交割一定数量和质量商品的标准化合约。它是期货交易的对象 6.保证金制度:是指在期货交易中,任何交易者必须按照其所买卖期货合约价值的一定比例缴纳资金,作为其履行期货合约的财力保证,然后才能参与期货合约的买卖,所交的资金就是保证金,这个比例通常是5%~10%,合约规定的保证金是最低的保证金,主要有会员保证金和客户保证金。 7.平仓制度:平仓指在交割期之前,卖出(或买进)与先前已买进(卖出)相同交割月份、相同数量、同种商品的期货合约的交易行为。 8.持仓限额制度:是指期货交易所为了防范操纵市场价格的行为和防止期货市场风险过度集中于少数投资者,对会员及客户的持仓数量进行限制的制度。超过限额,交易所可按规定强行平仓或提高保证金比例。 9.强行平仓制度:是指当会员或客户的保证金不足并未在规定时间内补足,或者当会员或客户的持仓量超出规定的限额时,或者当会员或客户违规时,交易所为了防止风险进一步扩大,实行强行平仓的制度。是交易所对违规者的有关持仓实行平仓的一种强制措施。10.套期保值:就是通过买卖期货合约来避免现货市场上相应实物商品交易的价格风险。在期货市场上买进(卖出)与现货市场品种相同、数量相同的期货合约,以期在未来某一时间在现货市场上买进(卖出)商品时,能够通过期货市场上持有的期货合约的平仓盈利来冲抵因现货市场上价格变动所带来的风险。 11.买入套期保值:套期保值者由于将来需要买入现货,首先在期货市场买入相应期货合约,在实际需要买入现货时,将期货合约平仓的交易行为称为买入套期保值。 12.卖出套期保值:套期保值者由于将来需要卖出现货,首先在期货市场卖出相应期货合约,在实际需要卖出现货时,将期货合约平仓的交易行为称为卖出套期保值。 13.基差交易:买卖双方通过协商,由在期货市场参与保值的一方确定协议基差的幅度以及交易对手通过期货市场选择交易价格的时间范围,也即交易对手在这一时间范围内选择某日的期货价格作为计价基础,在所确定的计价基础上加上协议基差得到双方现货交易的协议价格,从而双方以该协议价格交割现货,而不需要考虑该商品在交割时的现货市场实际价格。 14.套利交易:指的是在买入(卖出)某种合约的同时,卖出(买入)相关的数量相同的另一种合约,并在某个时间同时将两种合约平仓的交易。 15.蝶式套利:是由两个共享居中交割月份的买近卖远套利和卖近买远套利组成。原理:套利者认为中间交割月份的期货合约价格与两旁交割月份期货合约价格之间的相关关系将会出现差异。 16.外汇:外汇是外国货币或以外国货币表示的能用来清算国际收支差额的资产。 一种外币成为外汇的前提条件是自由兑换性和普遍接受性。 17.外汇汇率:是指一国货币表示的另一国货币的价格,即两种不同货币的比价。

相关主题