有demo就看代码。vs2010 mfc。
木有demo就看bywyh264encoder.h函数定义。
好吧,demo去下载即可。
现在打开bywyh264encoder.h。
BYWYH264ENCODER_API int bywyRewardH264(char* frmTitle);
BYWYH264ENCODER_API int bywyGetDllVersionH264(char* strVer);
BYWYH264ENCODER_API int bywyGetAppVersionH264(char* strVer);
BYWYH264ENCODER_API int bywyH264encoderBuff(char* h264Name, int fps, int dup, int* maxcnt, int ithreads, int bingxing, int* endflag, unsigned char** bmpBuffer, int freebuffer, HWND hwnd);
BYWYH264ENCODER_API int bywyH264encoderBmpfile(char* h264Name, int fps, int dup, int begincnt, int endcnt, int ithreads, int bingxing, int* endflag, unsigned char* fnfmt, int delbmp, HWND hwnd);
BYWYH264ENCODER_API int bywyH264encoderImgfile(char* h264Name, int fps, int dup, int begincnt, int endcnt, int ithreads, int bingxing, int* endflag, unsigned char* fnfmt, int delbmp, HWND hwnd);
BYWYH264ENCODER_API int bywy_h264decoder(char* filename, char* outpath, HWND hwnd, char* dispfmt, int jpgQuality);
BYWYH264ENCODER_API int bywyH264encoderBmpfile2(char* h264Name, int fps, int dup, int begincnt, int endcnt, int ithreads, int bingxing, int* endflag, unsigned char* fnfmt, int delbmp, char *dispfmt,HWND hwnd);
BYWYH264ENCODER_API int bywyH264encoderImgfile2(char* h264Name, int fps, int dup, int begincnt, int endcnt, int ithreads, int bingxing, int* endflag, unsigned char* fnfmt, int delbmp, char *dispfmt,HWND hwnd);
BYWYH264ENCODER_API int bywyGetAppVersionH264W(wchar_t* strVer);
BYWYH264ENCODER_API int bywyGetDllVersionH264W(wchar_t* strVer);
//to mp4
BYWYH264ENCODER_API int bywyH264encoderBuff2Mp4(char* mp4fn, int fps, int dup, int* maxcnt, int ithreads, int bingxing, int* endflag, unsigned char** bmpBuffer, int freebuffer, char* aacfn,int timeflag, HWND hwnd);
BYWYH264ENCODER_API int bywyH264encoderBmpfile2Mp4(char* mp4fn, int fps, int dup, int begincnt, int endcnt, int ithreads, int bingxing, int* endflag, unsigned char* fnfmt, int delbmp, char* aacfn,int timeflag, char* dispfmt, HWND hwnd);
BYWYH264ENCODER_API int bywyH264encoderImgfile2Mp4(char* mp4fn, int fps, int dup, int begincnt, int endcnt, int ithreads, int bingxing, int* endflag, unsigned char* fnfmt, int delbmp, char* aacfn,int timeflag, char* dispfmt, HWND hwnd);
BYWYH264ENCODER_API int bywyH264encoderImgfileAudfile2Mp4(char* mp4fn, int fps, int dup, int begincnt, int endcnt, int ithreads, int bingxing, int* endflag, unsigned char* fnfmt, int delbmp, char* audfn, int timeflag, char* dispfmt, HWND hwnd);
//from mp4(必须h264编码)
BYWYH264ENCODER_API int bywy_h264decoderFromMp4(char* mp4fn, char* outpath,char * aacfn, HWND hwnd, char* dispfmt, int jpgQuality);
BYWYH264ENCODER_API int bywy_h264decoderAudFromMp4(char* mp4fn, char* outpath, char* audfn, HWND hwnd, char* dispfmt, int jpgQuality);
//wav to mp3
BYWYH264ENCODER_API int bywyH264_wav2mp3(char* wavfn, char* mp3fn);
BYWYH264ENCODER_API int bywyH264_wav2mp3W(wchar_t* wavfnW, wchar_t* mp3fnW);
//mp3 to wav
BYWYH264ENCODER_API int bywyH264_mp3Towav(char* mp3fn, char* wavfn);
BYWYH264ENCODER_API int bywyH264_mp3TowavW(wchar_t* mp3fnW, wchar_t* wavfnW);
//wav to aac
BYWYH264ENCODER_API int bywyH264_wav2aac(char* wavfn, char* aacfn);
BYWYH264ENCODER_API int bywyH264_wav2aacW(wchar_t* wavfnW, wchar_t* aacfnW);
//aac to wav
BYWYH264ENCODER_API int bywyH264_aac2wav(char* aacfn, char* wavfn);
BYWYH264ENCODER_API int bywyH264_aac2wavW(wchar_t* aacfnW, wchar_t* wavfnW);
下边摘取demo的程序来看看函数的调用:
编码部分:
int dup = 1;
int fps = 25;
char fmt[1024];
CString str2;
int timeflag=0;//0,2以音频时长为准 1,3以视频时长为准
sprintf(fmt,"%s\\%%d%s",imgpath,imgexname);
str2=outfn;
str2.MakeLower();
if(str2.Right(4) ==".mp4")//这个是编码为mp4的判断,好吧,CString用得很土...
//outfn 生成的文件名;fps 帧数;dup 默认1,以后再说;图片文件名从1到120递增;多线程编码;并行标志,先默认0,以后需要与图片的处理配合时才会需要;结束标志,可在处理中停止;图片文件名通配格式;删除bmp文件标志,先默认0就好;合成进mp4的音频文件名;视频音频时长对齐方式;处理中的提示;提示的控件句柄,可以NULL。
bywyH264encoderImgfileAudfile2Mp4(outfn,fps,dup,1,120, -1, 0, &endflag, (unsigned char*)fmt, 0,inaudfn,timeflag,"编码中:%d", m_hWnd);
else
//除了木有音频相关,其余同上
bywyH264encoderImgfile2(outfn,fps,dup,1,120, -1, 0, &endflag, (unsigned char*)fmt, 0,"编码中:%d", m_hWnd);
AfxMessageBox(L"编码 end.");
解码部分:
CString str2;
str2=infn;
str2.MakeLower();
if(str2.Right(4) ==".mp4")//mp4的话,视频编码必须为h264
{
//待解码视频文件名;解码出图片输出路径名;解码音频文件名;控件句柄;处理中提示格式;jpg压缩质量,为0则为解码出图片为bmp格式文件。
bywy_h264decoderAudFromMp4(infn,outpath,outaudfn,m_hWnd,"正在解码:%d",jpgQuality);
}
else
//同理
bywy_h264decoder(infn,outpath,m_hWnd,"正在解码:%d",jpgQuality);
AfxMessageBox(L"解码 end.");
其它:
{//打赏,我的码,嘿嘿嘿!
bywyRewardH264(NULL);
}
{//aac转wav
char strAacPath[1024]="1.aac";
char wavPath[1024]="a1.wav";
int ret = bywyH264_aac2wav(strAacPath,wavPath);;
if (ret == 0)
{
AfxMessageBox(L"aac转wav成功");
}
else
{
AfxMessageBox(L"aac转wav失败");
}
}
{//wav转aac成功
char strAacPath[1024]="b2.aac";
char wavPath[1024]="2.wav";
int ret = bywyH264_wav2aac(wavPath,strAacPath);;
if (ret == 0)
{
AfxMessageBox(L"wav转aac成功");
}
else
{
AfxMessageBox(L"wav转aac失败");
}
}
{//取应用程序和DLL版本号
wchar_t strverW[1024];
wchar_t strdllverW[1024];
wchar_t strW[1024];
bywyGetAppVersionH264W(strverW);
bywyGetDllVersionH264W(strdllverW);
swprintf(strW,L"bywyh264编解码Demo ver:%s dllver:%s",strverW,strdllverW);
SetWindowText(strW);
}
if(0)
{
char strver[1024];
char strdllver[1024];
char str1[1024];
bywyGetAppVersionH264(strver);
bywyGetDllVersionH264(strdllver);
sprintf(str1,"bywyh264编解码Demo ver:%s dllver:%s",strver,strdllver);
::SetWindowTextA(m_hWnd,str1);
}
主要的函数基本覆盖了,如果有大同小异的都可互相参考。
目的就是希望简单好用。不喜勿喷。
1.0.0.6.demo的代码随后上传。
休息好了,才会有美好的明天~
最后祝老妈生日快乐^_^。