分享

FLV解码软件开发

 neroliu 2011-11-21
FLV解码软件开发的开发,在本课题中是利用的FFmpeg为基础的。FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案[23]FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg支持MPEGDivXMPEG4AC3DVFLV40多种编码,AVIMPEGOGGMatroskaASF90多种解码。TCPMP, VLC, MPlayer等开源播放器都用到了FFmpeg [24]FFmpeg主目录下主要有libavcodeclibavformatlibavutil等子目录。其中libavcodec用于存放各个encode/decode模块,libavformat用于存放muxer/demuxer模块,libavutil用于存放内存操作等常用模块。
flash movieflv文件格式为例, muxer/demuxerflvenc.cflvdec.c文件在libavformat目录下,encode/decodempegvideo.ch263de.clibavcodec目录下。
FLV视频文件格式实际上并没有明确指出应该使用哪种编码来解析音频和视频数据;它们只是定义了音频流和视频流(或者,有可能是多个音频视频流)如何被绑定在一个文件里面。这就是为什么有时候,当你打开了一个FLV文件时,你只能听到声音,却不能看到图象--因为没有合适的视频解码器。所以,libavformat 用来处理解析视频文件并将包含在其中的流分离出来,而libavcodec 则处理原始音频和视频流的解码。
解码处理流程:
1、   通过函数flvdec_init(void)注册初始化编码器,通过REGISTER_MUXDEMUX(FLV, flv)完成对FLV格式的注册,内含音频视频编解码的初始化;
2、   打开视频文件,通过av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)实现,
通过av_find_stream_info(pFormatCtx)dump_format(pFormatCtx, 0, filename, false)分析文件数据包编码格式,再把pFormatCtx的流域填满;
3、通过avcodec_find_decoder(pCodecCtx->codec_id)找到相应的解码器,
4
、打开解码器,通过函数(avcodec_open(pCodecCtx, pCodec)
5、视频数据解码通过avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, rawData, bytesRemaining)解析视频数据包,得到视频帧,GetNextFrame(AVFormatContext *pFormatCtx, AVCodecContext *pCodecCtx, int videoStream, AVFrame *pFrame );视频编码格式为FLV1
6、音频数据包通过avcodec_decode_audio()解码,得到的数据存入buffer中,根据时间戳来实现音视频的同步;音频编码格式有PCMADPCMMP3
7、释放解码器,关闭解码器(codec),avcodec_close(pCodecCtx); 关闭视频文件av_close_input_file(pFormatCtx);
表5-6 FLV解码软件中部分重要处理函数接口
函数接口
作用
flv_probe()
探测文件是否为FLV文件
flv_read_packet ( )
读入数据包,分析数据包
flv_read_close( )
关闭读操作
flv_read_header()
读入头数据
av_register_input_format()
初始化输入格式

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多