zoukankan      html  css  js  c++  java
  • JAVACV推流音频报错:org.bytedeco.javacv.FrameRecorder$Exception: avcodec_open2() error -22: Could not open audio codec.

      上次说到如果音频帧的声道设置为0时,在推流写帧时会报错(参见JavaCV音频推流报错:org.bytedeco.javacv.FrameRecorder$Exception: No audio output stream (Is audioChannels > 0 and has start() been called?) ),实际上,如果声道设置的值 > 2,也会报错:

    Exception in thread "main" org.bytedeco.javacv.FrameRecorder$Exception: avcodec_open2() error -22: Could not open audio codec.
        at org.bytedeco.javacv.FFmpegFrameRecorder.startUnsafe(FFmpegFrameRecorder.java:791)
        at org.bytedeco.javacv.FFmpegFrameRecorder.start(FFmpegFrameRecorder.java:384)
        at com.lxy.service.SubtitleMix.main(SubtitleMix.java:52)
    Input #0, matroska,webm, from 'E:BaiduNetdiskDownload	estout.mkv':
      Metadata:
        title           : 天下足球网 http://www.txzqw.cc
        ENCODER         : Lavf58.39.101
      Duration: 00:01:11.11, start: 0.000000, bitrate: 2485 kb/s
        Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
        Metadata:
          ENCODER         : Lavc58.73.102 libx264
          DURATION        : 00:01:09.243000000
        Stream #0:1: Audio: vorbis, 48000 Hz, 5.1, fltp (default)
        Metadata:
          ENCODER         : Lavc58.73.102 libvorbis
          DURATION        : 00:01:09.331000000
        Stream #0:2: Subtitle: ass
        Metadata:
          ENCODER         : Lavc58.73.102 ssa
          DURATION        : 00:01:11.113000000
    [libx264 @ 000000001bb89a80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
    [libx264 @ 000000001bb89a80] profile High, level 3.1, 4:2:0, 8-bit
    [libx264 @ 000000001bb89a80] 264 - core 157 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    [libmp3lame @ 000000001ba83540] Specified channel layout '2.1' is not supported

      根据上面的异常堆栈,定位到这里:

                        if ((ret = avcodec.avcodec_open2(this.audio_c, this.audio_codec, options)) < 0) {
                            this.releaseUnsafe();
                            avutil.av_dict_free(options);
                            throw new Exception("avcodec_open2() error " + ret + ": Could not open audio codec.");
                        }

      至于avcodec_open2里面是啥,那就不得而知了:

    public static native int avcodec_open2(AVCodecContext var0, @Const AVCodec var1, @ByPtrPtr AVDictionary var2);

      真要想了解,就得扒FFMPEG的源码了。

  • 相关阅读:
    迎战智能手机时代,芯片厂商谁能笑到最后?
    古老Ubuntu 安装 EDB 的奇葩旅程
    今天做了一个很糟糕的storage and buffer manager
    android 数据库SQL 框架例子
    关于VS2008编译错误"error LNK2005: 已经在 .obj 中定义"
    ListActivity源码分析
    最优非对称加密填充(OAEP)
    EVP_DigestInit(3)源码解析
    Java EE学习笔记(1:Servlet & JSP)
    Servlet
  • 原文地址:https://www.cnblogs.com/wuxun1997/p/12937678.html
Copyright © 2011-2022 走看看