資源簡(jiǎn)介
一個(gè)含界面窗口的程序,調(diào)用FFmpeg API讀取視音頻文件信息(MP4、AVI、MKV...),可以讀取文件播放時(shí)長(zhǎng)、碼率、視音頻編碼格式,視頻分辨率,幀率,音頻屬性等信息。
代碼片段和文件信息
/**
**?作者:pengwz
**?http://blog.csdn.net/zhoubotong2012
**?郵箱:1795387053@qq.com
**/
#include?“stdafx.h“
#include?“FFMediaInfoReader.h“
#include?
//#include?
string?to_string(int?n)
{
std::ostringstream?stm;
string?str;
stm?< str?=?stm.str();
//std::cout?< return?str;
}
//////////////////////////////////////////////////////////////
FFMediaInfoReader::FFMediaInfoReader()
{
????m_stop_status?=?false;
????m_inputAVFormatCxt?=?nullptr;
????m_videoStreamIndex?=?-1;
m_audioStreamIndex?=?-1;
m_bInited?=?FALSE;
????m_width?=?m_height?=?0;
????m_frame_rate?=?25;
????m_video_frame_count?=?0;
m_audio_samplerate?=?0;
m_audio_channels?=?0;
?/*?register?all?codecs?demux?and?protocols?*/
????avcodec_register_all();
????av_register_all();
}
FFMediaInfoReader::~FFMediaInfoReader()
{
CloseFileStream();
}
BOOL?FFMediaInfoReader::OpenFileStream(const?char*?szFilePath)
{
????m_filePath???=?szFilePath;
????m_video_frame_count?=?0;
????m_videoStreamIndex?=?-1;
m_audioStreamIndex?=?-1;
m_vcodec_name?=?““;
m_acodec_name?=?““;
m_width?=?m_height?=?0;
????m_audio_samplerate?=?0;
m_audio_channels?=?0;
????m_video_frame_count?=?0;
????m_bInited?=?FALSE;
return?openMediaFile();
}
void?FFMediaInfoReader::CloseFileStream()
{
????m_stop_status?=?true;
????closeMediaFile();
????m_bInited?=?FALSE;
}
//打開輸入文件
BOOL?FFMediaInfoReader::openMediaFile()
{
????if?(m_inputAVFormatCxt)
????{
????????TRACE(“already?has?input?avformat?\n“);
return?FALSE;
????}
????int?res?=?0;
????if?((res?=?avformat_open_input(&m_inputAVFormatCxt?m_filePath.c_str()?0?NULL))?0)
????{
??
????}
????
????if(res?0)
????{
????????string?strError?=?“can?not?open?file:“?+?m_filePath?+?“errcode:“?+?to_string(res)?+?“err?msg:“?+?av_make_error_string(m_tmpErrString?AV_ERROR_MAX_STRING_SIZE?res);
TRACE(“--------------%s?\n“?strError.c_str());
return?FALSE;
????}
????if?(avformat_find_stream_info(m_inputAVFormatCxt?0)?0)
????{
????????TRACE(“can?not?find?stream?info?\n“);
return?FALSE;
????}
TRACE(“filepath:?%s?format:?%s?Bitrate:?%d?Kbps?\n“??m_filePath.c_str()?m_inputAVFormatCxt->iformat->name?m_inputAVFormatCxt->bit_rate/1000);
????av_dump_format(m_inputAVFormatCxt?0?m_filePath.c_str()?0);
????for?(int?i?=?0;?i?nb_streams;?i++)
????{
????????AVStream?*in_stream?=?m_inputAVFormatCxt->streams[i];
if?(in_stream->codec->codec_type?==?AVMEDIA_TYPE_VIDEO)
{
m_videoStreamIndex?=?i;
m_width?=?in_stream->codec->width;
m_height?=?in_stream->codec->height;
if(in_stream->avg_frame_rate.den?!=?0?&&?in_stream->avg_frame_rate.num?!=?0)
{
??m_frame_rate?=?in_stream->avg_frame_rate.num/in_stream->avg_frame_rate.den;//每秒多少幀?
}
m_video_frame_count?=?in_stream->nb_frames;?//視頻幀數(shù)
//m_vcodec_name?=?in_stream->codec->codec_name;?//獲取編碼器名稱。不行,
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-10-27?10:29??MediaFileInfoList\
?????目錄???????????0??2019-10-27?10:29??MediaFileInfoList\Debug\
?????文件????22285824??2018-04-15?08:51??MediaFileInfoList\Debug\avcodec-57.dll
?????文件?????6437376??2018-04-15?08:51??MediaFileInfoList\Debug\avfilter-6.dll
?????文件?????3991552??2018-04-15?08:51??MediaFileInfoList\Debug\avformat-57.dll
?????文件??????693248??2018-04-15?08:51??MediaFileInfoList\Debug\avutil-55.dll
?????文件???????23730??2019-10-27?10:00??MediaFileInfoList\Debug\BuildLog.htm
?????文件??????388096??2019-10-27?10:28??MediaFileInfoList\Debug\MediaFileInfoList.exe
?????文件??????116224??2018-04-15?08:51??MediaFileInfoList\Debug\postproc-54.dll
?????文件??????324096??2018-04-15?08:51??MediaFileInfoList\Debug\swresample-2.dll
?????文件??????504320??2018-04-15?08:51??MediaFileInfoList\Debug\swscale-4.dll
?????文件????????7002??2019-10-27?10:00??MediaFileInfoList\FFMediaInfoReader.cpp
?????文件????????2907??2019-10-27?09:51??MediaFileInfoList\FFMediaInfoReader.h
?????文件????????5694??2016-05-12?11:36??MediaFileInfoList\FileInfo.cpp
?????文件????????1285??2016-05-12?09:48??MediaFileInfoList\FileInfo.h
?????文件????????1209??2019-10-26?17:21??MediaFileInfoList\FuncUtils.cpp
?????文件?????????549??2019-10-26?17:21??MediaFileInfoList\FuncUtils.h
?????目錄???????????0??2019-10-26?16:44??MediaFileInfoList\include\
?????文件????????5729??2018-04-15?08:48??MediaFileInfoList\include\inttypes.h
?????目錄???????????0??2019-10-26?16:44??MediaFileInfoList\include\libavcodec\
?????文件??????217772??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\avcodec.h
?????文件????????2570??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\avdct.h
?????文件????????3111??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\avfft.h
?????文件????????2853??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\d3d11va.h
?????文件????????4044??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\dirac.h
?????文件????????3715??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\dv_profile.h
?????文件????????2361??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\dxva2.h
?????文件????????1650??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\jni.h
?????文件????????2825??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\mediacodec.h
?????文件????????3763??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\qsv.h
?????文件????????4550??2018-04-15?08:48??MediaFileInfoList\include\libavcodec\vaapi.h
............此處省略137個(gè)文件信息
評(píng)論
共有 條評(píng)論