热门标签 | 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.


推荐阅读
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 本文将深入探讨 iOS 中的 Grand Central Dispatch (GCD),并介绍如何利用 GCD 进行高效多线程编程。如果你对线程的基本概念还不熟悉,建议先阅读相关基础资料。 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 深入RTOS实践,面对原子操作提问竟感困惑
    在实时操作系统(RTOS)的实践中,尽管已经积累了丰富的经验,但在面对原子操作的具体问题时,仍感到困惑。本文将深入探讨RTOS中的原子操作机制,分析其在多任务环境下的重要性和实现方式,并结合实际案例解析常见的问题及解决方案,帮助读者更好地理解和应用这一关键技术。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文详细介绍了在 Android 7.1 系统中调整屏幕分辨率和默认音量设置的方法。针对系统默认音量过大的问题,提供了具体的步骤来降低系统、铃声、媒体和闹钟的默认音量,以提升用户体验。此外,还涵盖了如何通过系统设置或使用第三方工具来优化屏幕分辨率,确保设备显示效果更加清晰和流畅。 ... [详细]
  • 本文介绍了如何利用摄像头捕捉图像,并将捕获的图像数据保存为文件。通过详细的代码示例,展示了摄像头调用的具体实现方法,适用于多种应用场景,如安全监控、图像处理等。 ... [详细]
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社区 版权所有