录制avi文件(三)——对文件的操作

来源:互联网 发布:网络课程培训 编辑:程序博客网 时间:2024/05/17 09:09

我们在做avi的录制时,最重要的结构体是

typedef struct tagAVI_FILE_INFO
{
 AVI_HEADER_INFO  file_header;                               //在录制avi文件(一)——avi文件的结构 有详细列举
 AVI_IndexRecorder index_recorder;
 void*    index_tmpstream;
 int32      index_writealready;
 
 int32  sec_per_frame;
 
 uint32  video_frames;
 uint32  video_length;
 uint32  audio_frames;
 uint32  audio_length;
  
 uint32  movi_length;
 uint32  movi_start;
 uint32  trunk_position;

 char   audio_tags[8];
 uint32 audio_cachebytes;
 char* audio_cachebuffer;  
 uint32 data_cachebytes;
 char* data_cachebuffer; 

 void* file_stream;
 int32  file_position;
 int32   (*read_func) (void *file, char* buffer, int32 readbytes);
 int32   (*write_func)(void *file, char* buffer, int32 writebytes);
 int32   (*seek_func) (void *file, int32 ioffset, int32 mode);
 int32   (*tell_func) (void *file);
}avi_record_infor_t;

 

 

typedef struct
{
 char   tags[8];
 uint32   total_entries; 
 uint32 cache_entries;
 AVI_IndexTable *cache_table;  } AVI_IndexRecorder;

 

typedef struct
{
 uint32  chunk_id;   /* 4 bytes in file */
 uint32  chunk_flags;   /* 4 bytes in file */
 uint32  chunk_offset;   /* 4 bytes in file */
 uint32  chunk_size;   /* 4 bytes in file */
} AVI_IndexTable;

 

 

1、保存avi文件的头信息

调用流程

media_recorder_file_open           //首先,有fileopen的操作,使以后基于文件的操作都有了句柄

->me_muxer_open

->muxer_avi_init

->avi_record_init / avi_write_headerinfor

 avi_record_init : 主要是初始化结构体AVI_HEADER_INFO,具体初始化的值在录制avi文件(一)——avi文件的结构 有详细列举。

avi_write_headerinfor : 将AVI_HEADER_INFO  file_header数据copy到data_cachebuffer ; 并创建临时文件index_tmpstream保存index表。

 

2、保存音频视频数据

调用流程

media_recorder_audio_write_frames/media_recorder_video_write_frames

->muxer_avi_write_audio_frames/muxer_avi_write_video_frames

->avi_write_audio_frames/avi_write_video_frames

avi_write_audio_frames : 将音频数据保存到文件,并将对应的index信息保存到临时文件index_tmpstream,具体流程参考录制avi文件(二)——设置数据缓冲区

avi_write_video_freames:将视频数据保存到文件,并将对应的index信息保存到临时文件index_tmpstream,具体流程参考录制avi文件(二)——设置数据缓冲区

 

3、保存index文件

调用流程

media_recorder_file_close

->me_recorder_close

->me_muxer_close

->muxer_avi_release

->avi_record_release

->avi_mux_indextable2datafile

avi_mux_indextable2datafile: 将临时文件index_tmpstream中的index数据通过data_cachebuffer保存到avi的文件file_stream中。

原创粉丝点击