ffmpeg开发中的问题(十一)
来源:互联网 发布:python正则匹配字符串 编辑:程序博客网 时间:2024/04/30 13:48
今天开发一个blackmagic的程序, 要用到ffmpeg的编码库
当然,对于视频,很好处理, 没一上午,就得到了清晰可见的视频, 甚是满意.
但处理音频时颇费周折,具体曲折如下:
1. 硬件不支持
blackmagic的产品各异, 有的支持获取声音, 有的不支持, 虽然用到的板卡可以抓取声音, 并存入文件.但打开的文件全为0, 要么全是噪声.
刚开始分析问题如下:
~Capture程序的模式选择不对
~抓取数据函数不对
~音频未写入
~就算写入,得到的原始的pcm , 播放的参数不对
从上到下,一一排除, 最后发现都不是.
得出结论:
硬件不支持
后来得到验证
启示:
开发过程中, 首先要确定最基本的问题是确信无疑的, 再一步一步往下走. 如果基础出错, 后面的就会一连串的出错. 如同解数学证明题一般.
若前提不对, 一切枉然.
软件开发要义:
确保硬件/驱动无误, 环境无误
换成sony的相机, 一切ok
2. avcodec_fill_audio_frame()
int avcodec_fill_audio_frame(AVFrame * frame, int nb_channels, enum AVSampleFormat sample_fmt, const uint8_t * buf, int buf_size, int align )framethe AVFrame frame->nb_samples must be set prior to calling the function. This function fills in frame->data, frame->extended_data, frame->linesize[0].>=0 on success, negative error code on failure
The buffer buf must be a preallocated buffer with a size big enough to contain the specified samples amount. The filled AVFrame data pointers will point to this buffer.
这里解释很清楚了, 要分配buf, 数据要正确, 且 frame->nb_samples要先赋值, 其它的就不用管了, 如果成功, 返回>0
实际上nb_samples就是编码器的frame_size. oaCodecCtx->frame_size....
3. avcodec_encode_audio2
int avcodec_encode_audio2(AVCodecContext * avctx, AVPacket * avpkt, const AVFrame * frame, int * got_packet_ptr )
这个函数成功, 则返回0,
且:
如果got_packet_ptr>0, 则表示packet有数据,这个很重要, =0 则表示空
这样就可以测试是否编码成功了,如果失败, 那问题就在这个函数的前面了,而不是本身
- ffmpeg开发中的问题(十一)
- ffmpeg开发中的问题(八)
- ffmpeg开发中的问题(九)
- ffmpeg开发中的问题(十)
- ffmpeg开发中的问题--too many slices
- ffmpeg开发中的问题--too many slices
- ffmpeg开发中的问题--too many slices
- ffmpeg开发中的问题--too many slices
- ffmpeg开发中的问题(十二) 一些小点
- FFMPEG中的时间问题
- FFMPEG中的时间问题
- FFMPEG中的时间问题
- FFmpeg中的滤镜(十一):视频滤镜 -- boxblur
- ffmpeg 在cron中的问题
- ffmpeg在eclipse中的开发配置
- ffmpeg在eclipse中的开发配置
- FFMPEG开发过程中的相关术语
- 配置visual studio中的ffmpeg开发环境
- window 下vs 配置lua 环境 c/c++与lua交互
- Working Practice-必要的时候,请求协助
- 获取本地网络参数
- VBA 汇总统计
- makefile 获取指定目录下源文件名称
- ffmpeg开发中的问题(十一)
- 一个有趣的程序
- VSS数据迁移
- Java 浅拷贝、深拷贝与序列化
- 结构体与枚举的区别
- ssh最基本分层机构功能与关系
- oracle中区分audit_file_dest, background_dump_dest, core_dump_dest, user_dump_dest
- Linux下hugetlbpage使用详解
- PHP程序员最常犯的11个MySQL错误