ffmpeg跨平台开发实现

在cpp类中使用回调函数时,回调函数为类成员必须为静态成员函数

具体介绍如博客 回调函数必须要用static的原因

黑屏没有图像

以为是分辨率或h264解码的问题,
发现一些接口过时的操作,于是采用了对应的ffmpeg-2.0.2版本,但还是黑屏

后来发现是yvu转rgb有问题

发现如下打印,怀疑是swscaler有问题

[swscaler @ 0x7f76d4004de0] bad dst image pointers

发现是swscaler用 this->img_convert_ctx = sws_alloc_context();获取有问题
要采用如下接口,有上下文环境,

    this->img_convert_ctx  = sws_getContext(this->pCodecCtx->width,this->pCodecCtx->height,this->pCodecCtx->pix_fmt,640,360,AVPixelFormat::AV_PIX_FMT_RGB24,SWS_FAST_BILINEAR,NULL,NULL,NULL);

ffmpeg解码方法:

H264Decoder::H264Decoder()
{pCodec              =NULL;pCodecCtx           =NULL;pVideoFrame         =NULL;img_convert_ctx     =NULL;pictureWidth            =0;setRecordREsolveState   =0;av_register_all();avcodec_register_all();pCodec=avcodec_find_decoder(AV_CODEC_ID_H264);if(pCodec==NULL){printf("codec not found!\n");}pCodecCtx=avcodec_alloc_context3(pCodec);if(pCodecCtx == NULL){printf("alloc codec ctx failed \n");}avcodec_open2(pCodecCtx,pCodec,NULL);pVideoFrame=avcodec_alloc_frame();avpicture_alloc(&outPicture,PIX_FMT_RGB24,640,360);}
int H264Decoder::DecoderH264Frames(unsigned char* inputBuffer,int alenth,RGBData_Define *outputRgbBuff)
{int gotPicPtr = 0;int result = 0;av_init_packet(&this->pAvPacket);this->pAvPacket.data = (unsigned char*)inputBuffer;this->pAvPacket.size = alenth;result = avcodec_decode_video2(this->pCodecCtx,this->pVideoFrame,&gotPicPtr,&this->pAvPacket);printf("decoder result %d\n",result);if(gotPicPtr ) {if(this->img_convert_ctx == NULL) {this->img_convert_ctx  = sws_getContext(this->pCodecCtx->width,this->pCodecCtx->height,this->pCodecCtx->pix_fmt,640,360,AVPixelFormat::AV_PIX_FMT_RGB24,SWS_FAST_BILINEAR,NULL,NULL,NULL);}printf("decoder frame------------->\n");sws_scale(img_convert_ctx,(const uint8_t **)this->pVideoFrame->data,this->pVideoFrame->linesize,0,this->pVideoFrame->height,this->outPicture.data ,this->outPicture.linesize);outputRgbBuff->width = this->pCodecCtx->width;outputRgbBuff->height = this->pCodecCtx->height;outputRgbBuff->bufferSize = this->outPicture.linesize[0];outputRgbBuff->dataBuffer = this->outPicture.data[0];}else {}av_free_packet(&this->pAvPacket);return  0;
}

ffmepg优化


图像相关的框架



在编程时遇到计算大小的问题

sizeof(“CCTD”) != 4,sizeof(“CCTD”)-1==4

字符串后面会自动加一个‘0’


=

ffmpeg相关的数据结构






SDL




播放器开发


ffplay框架

FFmpeg音视频核心技术精讲与实战-李超-ffmpeg开发使用笔记2相关推荐

  1. java音视频开发技术_FFmpeg音视频核心技术精讲与实战

    百度网盘2 D2 h2 i; n# o0 D# M* C! [: B1 M 第1章 学习指南[课程提供200+问题与答案库]4 a# t% {  h6 ^: E# O [你遇到的坑,别人已经出坑了,课 ...

  2. NDK学习笔记:FFmpeg音视频同步3(你追我赶,升级ffmpeg/libyuv支持neon)

    NDK学习笔记:FFmpeg音视频同步3 本篇内容说多不多,但如果要说得明明白白的,可能就有点难度了.所以我决定把我的调试过程日志都呈现出来,方便大家理解.继上一篇文末,我们学习到了什么是DTS/PT ...

  3. 【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】一、FFmpeg so库编译

    转自:https://juejin.im/post/5e130df55188253a8b42ebac 目录 一.Android音视频硬解码篇: 1,音视频基础知识 2,音视频硬解码流程:封装基础解码框 ...

  4. Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 1.1.ffmpeg音视频合成  1.2.Atitit 视频音频分离 提取法 1.3.ffmpeg对视频封装和分离 使用ffmpeg对

    Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 目录 1.1. ffmpeg音视频合成 1 1.2. Atitit 视频音频分离 提取法 1 1.3. ffmpeg对视频封装和分离 1 ...

  5. 视频教程-FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-C/C++

    FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟 ...

  6. java核心技术精讲-李兴华-专题视频课程

    java核心技术精讲-101993人已学习 课程介绍         本课程主要读者全面细致的讲解Java编程的所有核心知识,从基础语法.到面向对象以及Java的实际应用进行完整讲解.官方QQ群:61 ...

  7. 云计算数据中心系列 【服务器篇】 视频课程(硬件精讲 + 项目实战)-夏杰-专题视频课程...

    云计算数据中心系列 [服务器篇] 视频课程(硬件精讲 + 项目实战)-283人已学习 课程介绍         平台上去搜索服务器,基本只有两类课程,要么讲系统(Windows/Linux),要么讲虚 ...

  8. 网络工程师实战系列视频课程【IP地址规划篇】(考题精讲 + 项目实战)-夏杰-专题视频课程...

    网络工程师实战系列视频课程[IP地址规划篇](考题精讲 + 项目实战)-1128人已学习 课程介绍         1.我的自学经历分享(分享我各个方向自学探索,终选定网络的过程,告诉大家:勇于尝试( ...

  9. FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-夏曹俊-专题视频课程...

    FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-3798人已学习 课程介绍         本课程讲解的是基于流行的直播技术 FFMpeg3.3音视频处理框架,和应用广的 ...

最新文章

  1. 微信小程序配置WSS协议
  2. ue4 classuobject没有成员beginplay_给社团新成员准备的教学大纲
  3. delphi 关闭时缩小到托盘_delphi 实现最小化系统托盘
  4. 使用Apache Storm和Kite SDK Morphlines的可配置ETL处理
  5. 计算尖峰电流的目的_183 新能源汽车电机控制器母线电容容值如何计算?
  6. Tomcat服务器响应特别慢(服务器假死)的解决办法
  7. Linux下文件的打包、解压缩指令——tar,gzip,bzip2,unzip,rar
  8. 自学python能找到工作吗-学习完Python后真的能找到工作吗?老男孩Python培训班
  9. Android开源库集合(UI效果)
  10. macOS Monterey 12.4 (21F79) 虚拟机 ISO 镜像
  11. ftp服务器FileZilla Server详细配置教程
  12. 如何用犀牛自带的电池快速制作tekla自定义截面
  13. java怎么写脚本_一名资深牛人写的Java脚本编程指南
  14. TortoiseSVN 如何去掉文件夹左下角的绿色对勾的方法
  15. nexus仓库数据完整迁移到新的nexus仓库
  16. matlab 微分符号,Matlab 符号微积分
  17. 学习记录【1】--chrome的控制台打开很慢
  18. win10 常用命令
  19. 梅科尔工作室-江凌宇-鸿蒙笔记1
  20. 计算机五笔字型编码方法,无字型五笔编码计算机中文输入法

热门文章

  1. LaTeX—如何把论文模板的关键词从Index Terms 改为Keywords
  2. 《量化交易:如何建立自己的算法交易》简介及PDF电子书下载
  3. defined but not used [-Wunused-function] 使用 __attribute__((unused)) 告诉编译器忽略此告警
  4. 牛客网笔试系统ACM模式下的程序输入格式总结
  5. 伺服驱动器cn1引脚定义_PCI-9014端子板DIN-68S和安川驱动器(SGDV-R90A01A002000)接线图...
  6. java数据结构20:Big Bang(链表的插入、删除、遍历和查找)
  7. 看了这篇文章我才真正理解了!和快手大佬的技术面谈,附架构师必备技术详解
  8. 四元数和欧拉角的个人理解
  9. ROS中四元数、欧拉角、旋转矩阵等格式转换
  10. 袁绍说,吾比曹操英勇伟大,因为吾方战死数量远超