热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用ffmpeg开发,遇到的问题,整理

Windows10下开发,ffmpeg3.4问题一:pCodecOut_Audioavcodec_find_encoder_by_name(lib

Windows10下开发,ffmpeg3.4


问题一:


  • pCodecOut_Audio = avcodec_find_encoder_by_name("libfdk_aac");//什么也没有,打不开
  • pCodecOut_Audio = avcodec_find_encoder(AV_CODEC_ID_AAC);  //可以打开

原因:ffmpeg3.4 版本中,AAC编码器打不开,需要额外的lib_aac库加入进去。所以后来直接用mp2编码音频。mp2编码的音频,用win10自带的播放器,不能播放声音。换QQ播放器、vlc都可以。

 


问题二:

avcodec_open2(pCodecCtxOut_Audio, pCodecOut_Audio, 0);// 返回-22

win10系统下,下面这个参数设置为S16,导致avcodec_open2()不能打开,返回-22

改为FLTP,avcodec_open2() 打开成功。

pCodecCtxOut_Audio->sample_fmt = AV_SAMPLE_FMT_FLTP;  //AV_SAMPLE_FMT_S16;

 


问题三:

avio_open(&pFormatCtx_Out->pb, outFileName, AVIO_FLAG_WRITE);  //可以打开

avformat_write_header(pFormatCtx_Out, NULL);     //返回-22

原因:缺少参数。

问题重现: pFormatCtx_Out, pCodecOut_Audio 这两个参数设置好了,但是流里面的codec没有sample_rate的数据。导致了pFormatCtx_Out,参数不够,打开失败。添加了红色两行之后,就通过了。

 


 问题四:

输入流信息已经获取,现在要赋值输入流的解码器,绿框赋值之后,可以avcodec_open2() ; 成功。

如果不用绿框,直接红框这种方式,则avcodec_open2() 不成功。

如果,有输入帧且需要编码的话,采用红框这种方式,初始化编码器,然后为pCodecCtx_Audio_in赋值各种参数,才能使用。

所以,我的程序的正解,就是采用绿框,注释掉红框。然后问题5也解决了。


 


问题五:

av_read_frame() 成功,但是avcodec_decode_audio4()失败。究其原因,是第一个参数即解码器的参数不对。

改用直接用流的codec 就通过了

 


问题六:

av_audio_fifo_write(fifo_audio, (void **)audioFrame->data, audioFrame->nb_samples);// 运行的时候,崩溃

原因是:fifo_audio的格式sample_fmt 与 audio_Frame的格式不相同。

 空指针。是因为上面生成的fifo_audio格式与audioFrame->data的格式不匹配,找不到地址。

 


问题七:

未见处理的异常:0xC0000005:读取位置0xfeeeff22时发生访问冲突

释放指针出的问题。在哪里定义,就在哪里释放。注意释放顺序。读取的数据,结果指针已经被释放了。

 


问题八:

可能是MFC多线程句柄释放的问题

 


问题九:

 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突

原因:说明指针所指向的空间已经被释放。

其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。

 


问题十:

音频的重采样。

如果采样的音频各种格式和要输出的采样的各种格式不同,那么就需要重采样,否则无法输出。

比如:pcm_s16 重采样为 AAC,先记录下重采样的学习地址,稍后再整理。

http://codepad.org/qoknuYAB

https://www.jianshu.com/p/314a929f99fc

https://www.jianshu.com/p/bf5e54f553a4

https://blog.csdn.net/hiwubihe/article/details/81259134

 


问题十一:

录制MP4成功,但是播放的时候,画面有问题,花屏,模糊。

是因为视频码率设置出了问题。参数设置的不对。后来,直接把ffmpeg-dev版中的sample----encode_video的参数拿来用,解决问题。还是因为基础不够扎实,不知道如何根据屏幕大小自动设置码率。整理基础知识。

 


问题十二:

avformat_open_input(); 返回-2. 里面的参数,初始化也失败。

错误原始: 没有添加初始化:av_register_all(); // 添加之后,正常打开。

 

avformat_open_input(); 返回-22. 提示无效参数。

是因为有如下设置:将前两行用最后一行替换,就可以了。

//const char * screen_size = "352x288";

//av_dict_set(&options,"video_size", screen_size, 0);

av_dict_set(&options,"video_size", "352x288", 0);

 


问题十三:

ret = avcodec_open2(pCodecCtx, pCodec, NULL);

返回 ret = -542398533

是因为,录屏的时候,不小心,把屏幕参数,设置成了"352x255"。所以pCodecCtx->height就变成了奇数,然后就报错了。好像屏幕的尺寸,不可以有奇数。 将尺寸改为 "352x288"这个是正确的参数,就可以正常打开了。

 


问题十四:

EnterCricalSection(); // 这里总是报错

CapScreen_MFC_2.exe 中的 0x77883cb3 处有未经处理的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突

原因是:没有对VideoSection初始化

在主函数中,添加:

InitializeCriticalSection(&VideoSection);            // 使用临界区对象之前,必须初始化 临界区对象

 


问题十五:

有三个线程,但是只运行了1个线程。原因是:名字写错了。手误害si人。

应该是写成:trhead1, thread2, thread3. 因为写错,导致只运行了thread1.


推荐阅读
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • ffmpeg  spydroid jrtplib
    2019独角兽企业重金招聘Python工程师标准手机上采用Spydroid程序。https:github.comfyhertzspydroid-ipcamera先用libcu ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法
    本文介绍了修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法。首先解释了UEFI的概念和作用,然后提供了两种解决方法。第一种方法是在bios界面中将Boot Mode设置为Legacy Support,Boot Priority设置为Legacy First,并关闭UEFI。第二种方法是使用U盘启动盘进入PE系统,运行磁盘分区工具DiskGenius,将硬盘的分区表设置为gpt格式,并留出288MB的内存。最后,通过运行界面输入命令cmd来完成设置。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 1,初始化AVAudioSession7.0第一次运行会提示,是否允许使用麦克风AVAudioSession*session[AVAudioSessionsharedInsta ... [详细]
author-avatar
少年放肆的温存
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有