2012-09-19 99 views
0

我正試圖在Android中開發一款錄像機和播放應用程序。所以,我正在使用ffmpeg庫,並且已經編譯了要在項目中使用的庫。如何使用ffmpeg庫轉置視頻?

我錄製的視頻,當我播放,一些設備不認方向矩陣,所以我想用的ffmpeg庫來開發一個C方法來完成這個命令:

的ffmpeg -i F。 MP4 -vf 「轉= 1」 -r 24 -sameq f2.mp4"

我發現這個文檔,但不幫我,因爲不使用AVFilter和AVFilterContext類。

http://dranger.com/ffmpeg/tutorial01.html

http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/structAVFilterContext.html

http://ffmpeg.org/doxygen/trunk/api-example_8c-source.html

現在我只有打開和關閉視頻文件

這裏我的代碼:

/*open the video file*/ 
if ((lError = av_open_input_file(&gFormatCtx, gFileName, NULL, 0, NULL)) !=0) { 
    LOGE(1, "Error open video file: %d", lError); 
    return; //open file failed 
} 
/*retrieve stream information*/ 
if ((lError = av_find_stream_info(gFormatCtx)) < 0) { 
    LOGE(1, "Error find stream information: %d", lError); 
    return; 
} 
/*find the video stream and its decoder*/ 
gVideoStreamIndex = av_find_best_stream(gFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, &lVideoCodec, 0); 
if (gVideoStreamIndex == AVERROR_STREAM_NOT_FOUND) { 
    LOGE(1, "Error: cannot find a video stream"); 
    return; 
} else { 
LOGI(10, "video codec: %s", lVideoCodec->name); 
} 
if (gVideoStreamIndex == AVERROR_DECODER_NOT_FOUND) { 
    LOGE(1, "Error: video stream found, but no decoder is found!"); 
    return; 
} 
/*open the codec*/ 
gVideoCodecCtx = gFormatCtx->streams[gVideoStreamIndex]->codec; 
LOGI(10, "open codec: (%d, %d)", gVideoCodecCtx->height, gVideoCodecCtx->width); 
#ifdef SELECTIVE_DECODING 
gVideoCodecCtx->allow_selective_decoding = 1; 
#endif 
if (avcodec_open(gVideoCodecCtx, lVideoCodec) < 0) { 
LOGE(1, "Error: cannot open the video codec!"); 
    return; 
} 
LOGI(10, "get video info ends"); 

我如何使用轉ffmpeg的庫中的視頻?

+0

什麼是問題? – alk

+0

當你編譯'ffmpeg'庫時,你已經在觸摸代碼了,那麼爲什麼不看看'ffmpeg'工具本身的來源呢? – alk

+0

是的,我正在查看如何使用ffmpeg庫的代碼。但是,我沒有找到如何將avfilter類與打開的視頻連接起來進行換位的方法。 – beni

回答

0

如何使用FFmpeg的解碼客戶的I/O

AVCodec *pCodec; 
avcodec_register_all(); 
// Register all formats and codecs 
av_register_all(); 

//av_init_packet(&packet); 
if(avformat_network_init()!=0){ 
    goto initError; // Couldn't init new work 
} 
// Open video file 

pFormatCtx = avformat_alloc_context(); 
printf("==========>>%p %lu\n", buff,sizeof(buff)); 
pFormatCtx->pb=av_malloc(buff_size);//pFormatCtx->pb=av_alloc_put_byte(buff,buff_size,0,NULL,NULL,NULL,NULL); 
pFormatCtx->pb=avio_alloc_context(buff,buff_size,0,NULL,NULL,NULL,NULL); 

pFormatCtx->iformat=av_find_input_format("h264"); 
pFormatCtx->flags = AVFMT_FLAG_CUSTOM_IO; 
pFormatCtx->iformat->flags=AVFMT_NOFILE; 

// Retrieve stream information 
if(avformat_find_stream_info(pFormatCtx,NULL)<0){ 
     goto initError; // Couldn't find stream information 
} 
streamNo=-1; 
// Find the first video stream 
if ((streamNo = av_find_best_stream(pFormatCtx,AVMEDIA_TYPE_VIDEO, -1, -1, &pCodec, 0)) < 0) 
{ 
    av_log(NULL, AV_LOG_ERROR, "Cannot find a video stream in the input file %d\n",streamNo); 
    goto initError; 
} 

雖然我無法從我的緩衝區查找流streamNo荃是-1381258232 我緩衝區是無效* BUFF INT BUFF_SIZE