FFMPEG工程浩大,可以參考的書籍又不是很多,因此很多剛學習FFMPEG的人常常感覺到無從下手。我剛接觸FFMPEG的時候也感覺不知從何學起。
因此我把自己做項目過程中實現的一個非常簡單的視頻播放器(大約100行代碼)源代碼傳上來,以作備忘,同時方便新手學習FFMPEG。
該播放器雖然簡單,但是幾乎包含了使用FFMPEG播放一個視頻所有必備的API,並且使用SDL顯示解碼出來的視頻。
並且支持流媒體等多種視頻輸入,處於簡單考慮,沒有音頻部分,同時視頻播放采用直接延時40ms的方式
平台使用VC2010
使用了最新的FFMPEG類庫
直接貼代碼
_tmain( argc, _TCHAR**** filepath[]==(avformat_open_input(&pFormatCtx,filepath,NULL,NULL)!= -(av_find_stream_info(pFormatCtx)< -=-(i=; i<pFormatCtx->nb_streams; i++(pFormatCtx->streams[i]->codec->codec_type===(videoindex==- -=pFormatCtx->streams[videoindex]->=avcodec_find_decoder(pCodecCtx->(pCodec== -(avcodec_open(pCodecCtx, pCodec)< -*pFrame,*==*= uint8_t[avpicture_get_size(PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->*)pFrameYUV, out_buffer, PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx-> (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO |*= SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->height, , (!screen) { printf(*= SDL_CreateYUVOverlay(pCodecCtx->width, pCodecCtx-> SwsContext * y_size = pCodecCtx->width * pCodecCtx->*packet=(AVPacket *)malloc( printf(,filepath, (av_read_frame(pFormatCtx, packet)>=(packet->stream_index=== avcodec_decode_video2(pCodecCtx, pFrame, &(ret < -= sws_getContext(pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx-> uint8_t* *)pFrame->data, pFrame->linesize, , pCodecCtx->height, pFrameYUV->data, pFrameYUV->->pixels[]=pFrameYUV->data[->pixels[]=pFrameYUV->data[->pixels[]=pFrameYUV->data[->pitches[]=pFrameYUV->linesize[->pitches[]=pFrameYUV->linesize[->pitches[]=pFrameYUV->linesize[= = = pCodecCtx->= pCodecCtx->& SDL_Delay(&
軟件運行截圖:
完整工程下載地址:
http://download.csdn.net/detail/leixiaohua1020/5122959