首页
诗词
字典
板报
句子
名言
友答
励志
学校
网站地图
其他相关
互联网
操作系统
开源软件
共享软件
系统运维
其他相关
当前位置:
首页
>
教程频道
>
其他教程
>
其他相关
>
FFmpeg - 视频解码历程
2012-08-02
FFmpeg - 视频解码过程FFmpeg的文档做得不好,导致学会使用这个库是存在一定难度的。在对文件进行解码时,抄
FFmpeg - 视频解码过程
FFmpeg的文档做得不好,导致学会使用这个库是存在一定难度的。在对文件进行解码时,抄网上流传的例子就可以了。比如,常见的例子是这样的:
// 解析PES得到ES TS_PesDecoder pesdec; pesdec.Parse(m_iDemux.Payload(), m_iDemux.PayloadSize()); // AVPacket应包含的是ES数据 AVPacket avpkt; av_init_packet(&avpkt); avpkt.size = pesdec.m_nEsLength; avpkt.data = pesdec.m_pEs; if (avpkt.size == 0) return -1 ; // 解AVPacket,得到图像数据AVFrame while (avpkt.size > 0) { int got_picture = 0; int len = avcodec_decode_video2(m_pCodecContext, m_pPicture, &got_picture, &avpkt); if (len < 0) { fprintf(stderr, "Error while decoding frame...\n"); break; } if (got_picture) { int width = m_pCodecContext->width; int height = m_pCodecContext->height; VideoFrame frame; frame.nWidth = width; frame.nHeight = height; frame.nPts = pesdec.m_nPts / 45; // in ms AVPicture& pic_rgb = frame.iPic; avpicture_alloc(&pic_rgb, PIX_FMT_RGB24, width, height); // 用swscale库把YUYV420P转成RGB24 SwsContext* img_convert_ctx = sws_getContext(width, height, PIX_FMT_YUV420P, width, height, PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL); sws_scale(img_convert_ctx, m_pPicture->data, m_pPicture->linesize, 0, height, pic_rgb.data, pic_rgb.linesize); sws_freeContext(img_convert_ctx); printf("Saving a frame ....\n"); m_iMutex.Lock(); m_lstFrames.push_back(frame); m_iMutex.Unlock(); return 1; } avpkt.size -= len; avpkt.data += len; }
查看更多
下一篇
本文网址:
https://www.reader8.net/jiaocheng/20120802/2152793.html
读书人精选
热点排行
看了敬仰已久的蝙蝠侠黑暗骑士
怎么快速通过研究生学位论文的查重有关问
基于笔划特征的文字检测探讨
计算机ctrl和ALT经常键自动按住-答案是Q
基准核酸代码表
无限小(Infinitesimal)是什么
妹长期奔放,找不到矜持的方向
坚决删除那些误人子弟人小弟我文章
《黑客帝国》的故事一(转于央视
演说技巧之PPT