zoukankan      html  css  js  c++  java
  • ffmpeg开发中的问题(十一)

          今天开发一个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 
      )
    frame the 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 则表示空

    这样就可以测试是否编码成功了,如果失败, 那问题就在这个函数的前面了,而不是本身




    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/vintion/p/4116983.html
Copyright © 2011-2022 走看看