你可以試試OpenCV。我有讀取和修改視頻文件的功能,它可以打開各種格式。它適用於C++,但不確定它是否可用於JAVA。它也不會解析音頻。
這裏是我的一個樣本實現,我在我的計算機視覺利用項目
.h文件中
#ifndef _VPLAYER_H_
的#define _VPLAYER_H_
的#include 的#include 的#include #包括「cv.h」# #include「highgui。H」
類VPLAYER {
公共: VPLAYER(); 〜VPLAYER();
私人:
CvCapture* pAvi;
IplImage* pFrame;
公共: INT身高; INT寬度; int fps; int numFrames; double CodecCode;
市民:
bool LoadVideo(char * fname);
void GetFrame(int FrameNo);
void GetImage (IplImage* &pOutBuffer);
void GetProperties();
};
#ENDIF
.cpp文件
的#include 「stdafx.h中」 的#include 「VideoPlayer_PB_1.h」
布爾VPLAYER :: LoadVideo(字符* FNAME){
if(pAvi)cvReleaseCapture(&pAvi);
if(!(pAvi = cvCaptureFromAVI(fname)))return false;
GetProperties();
return true;
}
VPlayer :: VPlayer(){ pAvi = 0; pFrame = 0; }
VPLAYER ::〜VPLAYER(){
cvReleaseCapture(&pAvi);
}
空隙VPLAYER ::的getFrame(INT FrameNo){
cvSetCaptureProperty(pAvi,CV_CAP_PROP_POS_FRAMES,FrameNo);
if(!cvGrabFrame(pAvi)){ // capture a frame
printf("Could not grab a frame\n\7");
exit(0);
}
pFrame = cvRetrieveFrame(pAvi);
}
空隙VPLAYER :: GetImage(IplImage * & pOutBuffer){
pOutBuffer = cvCloneImage(pFrame);
}
空隙VPLAYER ::的GetProperties(){ 如果(PAVI){ cvQueryFrame(PAVI); //這個調用是必要得到我看到正確的捕獲性能
Height = (int) cvGetCaptureProperty(pAvi, CV_CAP_PROP_FRAME_HEIGHT);
Width = (int) cvGetCaptureProperty(pAvi, CV_CAP_PROP_FRAME_WIDTH);
fps = (int) cvGetCaptureProperty(pAvi, CV_CAP_PROP_FPS);
numFrames = (int) cvGetCaptureProperty(pAvi, CV_CAP_PROP_FRAME_COUNT);
CodecCode = cvGetCaptureProperty(pAvi, CV_CAP_PROP_FOURCC);
}
}
較早[FMJ(http://fmj-sf.net/)SO提到的。不記得帖子,但有[許多帖子](http://stackoverflow.com/search?q=fmj)。 (我還沒有使用它,所以沒有關於質量或易用性的任何說明) – Atreys