Menu Home

ffmpeg

NALU Type Array

NSString * const naluTypesStrings[] = { @”0: Unspecified (non-VCL)”, @”1: Coded slice of a non-IDR picture (VCL)”, // P frame @”2: Coded slice data partition A (VCL)”, @”3: Coded slice data partition B (VCL)”, @”4: Coded slice data partition C (VCL)”, @”5: Coded slice of an IDR picture (VCL)”, // […]

ffmpeg UINT64_C 未定义错误

在C++项目中使用ffmpeg时报错: $ /usr/local/include/libavutil/common.h:170:47: 错误: ‘UINT64_C’在此作用域中尚未声明 解决方法: extern “C”{ #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #ifdef _STDINT_H #undef _STDINT_H #endif # include <stdint.h> #endif }

编译ffmpeg使支持PIPE输入

查看ffmpeg支持的输入协议 ./configure –list-protocols 可能的输出: applehttp httpproxy rtmp bluray https rtmpe cache librtmp rtmps concat librtmpe rtmpt crypto librtmps rtmpte ffrtmpcrypt librtmpt rtmpts ffrtmphttp librtmpte rtp file md5 sctp gopher mmsh tcp hls mmst tls http pipe udp 增加PIPE支持 ./configure –enable-protocol=pipe 一个完整的编译参数 ./configure –enable-libmp3lame –enable-vdpau –enable-libx264 –enable-gpl –disable-static –enable-shared –disable-armv5te –disable-armv6 […]

ffmpeg常用命令

把mpg文件转换成一系列JPG图片 ffmpeg -i video.mpg image%d.jpg 其他支持的格式: PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI … MP4转换MOV 这里只是转换了包装格式,不改变视频和音频编码格式。 -vcodec copy:拷贝源视频编码格式 -acodec copy:拷贝源音频编码格式 ffmpeg -i inputfile.mp4 -vcodec copy -acodec copy output.mov 其它常用参数: -s:设置视频大小 ffmpeg -i inputfile.mp4 -vcodec copy -acodec copy -s 1920×1080 output.mov -r:设置视频帧率 ffmpeg -i inputfile.mp4 -vcodec copy -acodec copy […]

基于ffmpeg的流媒体服务器

OS:ubuntu 12.04 ffmpeg:N-47141-g4063bb2 x264:0.133.2334 a3ac64b 目标: 使用ffserver建立流媒体服务器 使用ffmpeg对本地文件流化(x264编码器) 使用ffplay播放 ffserver.conf配置 Port 8090 #访问端口 RTSPPort 554 #rtsp端口 BindAddress 0.0.0.0 #服务器地址绑定 MaxHTTPConnections 2000 #允许的最大连接数 MaxClients 1000 #最大的客户数 MaxBandwidth 10000 CustomLog – <Feed feed1.ffm> File /tmp/feed1.ffm FileMaxSize 1G ACL allow 127.0.0.1 #只允许本地连接 </Feed> ################ asf ################ <Stream test.asf> Feed feed1.ffm Format asf #流媒体格式 […]

ffmpeg的内部Video Buffer管理和传送机制

ffmpeg的内部Video Buffer管理和传送机制 本文主要介绍ffmpeg解码器内部管理Video Buffer的原理和过程,ffmpeg的Videobuffer为内部管理,其流程大致为:注册处理函数->帧级释放->帧级申请->清空。 1 注册get_buffer()和release_buffer() FFAPI_InitCodec() avcodec_alloc_context() avcodec_alloc_context2() avcodec_get_context_default2(AVCodecContext *s,…){ …… s->get_buffer = avcodec_default_get_buffer; s->release_buffer = avcodec_default_release_buffer; …… } 2帧级的内存申请和释放调用

FFMPEG + SDL音频播放分析

抽象流程: 设置SDL的音频参数 —-> 打开声音设备,播放静音 —-> ffmpeg读取音频流中数据放入队列 —-> SDL调用用户设置的函数来获取音频数据 —-> 播放音频 SDL内部维护了一个buffer来存放解码后的数据,这个buffer中的数据来源是我们注册的回调函数(audio_callback),audio_callback调用audio_decode_frame来做具体的音频解码工作,需要引起注意的是:从流中读取出的一个音频包(avpacket)可能含有多个音频桢(avframe),所以需要多次调用avcodec_decode_audio4来完成整个包的解码,解码出来的数据存放在我们自己的缓冲中(audio_buf2)。SDL每一次回调都会引起数据从audio_buf2拷贝到SDL内部缓冲区,当audio_buf2中的数据大于SDL的缓冲区大小时,需要分多次拷贝。 关键实现: main()函数 int main(int argc, char **argv){ SDL_Event event; //SDL事件变量 VideoState *is; // 纪录视频及解码器等信息的大结构体 is = (VideoState*) av_mallocz(sizeof(VideoState)); if(argc < 2){ fprintf(stderr, “Usage: play <file>\n”); exit(1); } av_register_all(); //注册所有ffmpeg的解码器 /* 初始化SDL,这里只实用了AUDIO,如果有视频,好需要SDL_INIT_VIDEO等等 */ if(SDL_Init(SDL_INIT_AUDIO)){ fprintf(stderr, “Count not initialize SDL – […]