资源简介
本程序是一个基于FFMPEG的封装格式转换器的源代码。可以用于学习FFMPEG的开发相关知识。
需要注意的是,本程序并不进行视音频的编码和解码工作。而是直接将视音频压缩码流从一种封装格式文件中获取出来然后打包成另外一种封装格式的文件。
支持FLV,AVI,TS,MP4等封装格式之间的互相转换。相比于转码程序,本程序有以下两个特点:
1.速度很快。
2.视音频质量无损
代码片段和文件信息
/*
*最简单的基于FFmpeg的封装格式转换器
*Simplest FFmpeg Remuxer
*
*雷霄骅 Lei Xiaohua
*leixiaohua1020@126.com
*中国传媒大学/数字电视技术
*Communication University of China / Digital TV Technology
*http://blog.csdn.net/leixiaohua1020
*
*本程序实现了视频封装格式之间的转换。
*需要注意的是本程序并不改变视音频的编码格式。
*
* This software converts a media file from one container format
* to another container format without encoding/decoding video files.
*/
#include “stdafx.h“
extern “C“
{
#include “libavformat/avformat.h“
};
int _tmain(int argc _TCHAR* argv[])
{
AVOutputFormat *ofmt = NULL;
//输入对应一个AVFormatContext,输出对应一个AVFormatContext
//(Input AVFormatContext and Output AVFormatContext)
AVFormatContext *ifmt_ctx = NULL *ofmt_ctx = NULL;
AVPacket pkt;
const char *in_filename *out_filename;
int ret i;
if (argc < 3) {
printf(“usage: %s input output\n“
“Remux a media file with libavformat and libavcodec.\n“
“The output format is guessed according to the file extension.\n“
“Modified by Lei Xiaohua leixiaohua1020@126.com\n“
“Communication University of China / Digital TV Technology\n“
“http://blog.csdn.net/leixiaohua1020“ argv[0]);
return 1;
}
in_filename = argv[1];//输入文件名(Input file URL)
out_filename = argv[2];//输出文件名(Output file URL)
av_register_all();
//输入(Input)
if ((ret = avformat_open_input(&ifmt_ctx in_filename 0 0)) < 0) {
printf( “Could not open input file.“);
goto end;
}
if ((ret = avformat_find_stream_info(ifmt_ctx 0)) < 0) {
printf( “Failed to retrieve input stream information“);
goto end;
}
av_dump_format(ifmt_ctx 0 in_filename 0);
//输出(Output)
avformat_alloc_output_context2(&ofmt_ctx NULL NULL out_filename);
if (!ofmt_ctx) {
printf( “Could not create output context\n“);
ret = AVERROR_UNKNOWN;
goto end;
}
ofmt = ofmt_ctx->oformat;
for (i = 0; i < ifmt_ctx->nb_streams; i++) {
//根据输入流创建输出流(Create output AVStream according to input AVStream)
AVStream *in_stream = ifmt_ctx->streams[i];
AVStream *out_stream = avformat_new_stream(ofmt_ctx in_stream->codec->codec);
if (!out_stream) {
printf( “Failed allocating output stream\n“);
ret = AVERROR_UNKNOWN;
goto end;
}
//复制AVCodecContext的设置(Copy the settings of AVCodecContext)
ret = avcodec_copy_context(out_stream->codec in_stream->codec);
if (ret < 0) {
printf( “Failed to copy context from input to output stream codec context\n“);
goto end;
}
out_stream->codec->codec_tag = 0;
if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
}
//输出一下格式------------------
av_dump_format(ofmt_ctx 0 out_filename 1);
//打开输出文件(Open output file)
if (!(ofmt->flags & AVFMT_NOFILE)) {
ret = avio_open(&ofmt_ctx->pb out_filename AVIO_FLAG_WRITE);
if (ret < 0) {
printf( “Could not open output file ‘%s‘“ out_filename);
goto end;
}
}
//写文件头(Write file header)
ret = avformat_write_header(ofmt_ctx N
- 上一篇:rtmpdump vs2005版本
- 下一篇:有关Qt的二十篇中文论文
相关资源
- nginx-rtmp-win32-master.rar
- onvif协议视频转码推流网页播放
- FFMEPG实现h264解码
- ffmpegh265rtmp.zip
- ffserver(windows下编译32位)
- 魅思视频系统V10新版msvodx,msvodV10支持
- qt_ffmpeg_mp4_export_and_import.zip
- 最简单的基于FFmpeg的推流器 1.2
- 简单的ffmpeg推流demo
- FFmpeg和SDL,读内存中的视频流,进行
- ffmpeg之pcm转AAC
- ffmpeg-2.8.14.tar.gz
- 利用ffmpeg的filter混音
- vs2010 ffmpeg实时解码h264码流
- ffmpeg 音视频转码代码
- windows上自己编译的最新的ffmpeg库
- Qt基于FFmpeg播放本地 H.264H264文件
- 从ffmpeg中抽取的h264解码器,可用于
- ffplay源代码
- 最简单的基于FFmpeg的推流器以推送R
- DVD文件VOB的生成代码
- FFmpeg 采集摄像头输出rtmp直播流媒体,
- 基于ffmpeg将avi视频转换为mp4视频
- (补充)修改output-example,将H.264AAC帧
- ffmpeg-win64位库
- X264实时编码,FFmpeg实时解码
- FFmpeg API读取视音频文件信息的一个工
- 使用FFmpeg采集摄像头图像和麦克风音
- opencv_ffmpeg249.dll
- FFmpeg-3.1 windows vs2013编译动态库静态库
评论
共有 条评论