• peter
    2022-09-09 来自北京
    请教老师几个问题啊: Q1:编码器的输入是什么? 代码“audioEncoder->encode(&audioPacket);”,其中的audioPacket是存放编码后的数据,那编码器需要的PCM数据从哪里来的? Q2:03课的AudioTrack例子,提到“decoder 是一个decoder实例,构建这个decoder实例比较简单,在这里我就不详细介绍了”。我不知道该用哪个解decoder,就创建了一个MediaCodec: MediaCodec.createDecoderByType(“audio/mpeg”); 线程中:decoder.readSamples(samples);。 但是,MediaCodec并没有readSamples这个函数? 请问:decoder.readSamples只是一个伪代码吗?还是说某一个类有这个函数?(安卓平台除了MediaCodec还有其他的系统decoder吗?) Q3:华为安卓10上不能用FFmpeg播放音频。 华为手机,安卓10,用FFmpeg,能够将两个音频合并,然后可以用原生的MediaPlayer将合并后的音频播放出来。但我想尝试用FFmpeg播放,本来以为很简单,但怎么都播放不出来。 为什么啊? 方法1:用RxFFmpegPlayer,听不到声音 RxFFmpegPlayer fFmpegPlayer = new RxFFmpegPlayerImpl(); fFmpegPlayer.play(musicFilePath,false); 方法2:用RxFFmpegPlayerView,还是听不到声音 RxFFmpegPlayerView rxFFmpegPlayerView = new RxFFmpegPlayerView(MainActivity2.this); rxFFmpegPlayerView.switchPlayerCore(RxFFmpegPlayerView.PlayerCoreType.PCT_RXFFMPEG_PLAYER); Log.d(TAG,"before play, get volume = " + rxFFmpegPlayerView.getVolume()); //缺省就是100 rxFFmpegPlayerView.setVolume(100);//此处没有必要 RxFFmpegPlayerController controller = new RxFFmpegPlayerControllerImpl(MainActivity2.this); rxFFmpegPlayerView.setController(controller, MeasureHelper.FitModel.FM_DEFAULT); rxFFmpegPlayerView.play(musicFilePath,false); 注意注意:上面用到的”decoder”是指”JieMaQi”,如果用中文,会被当做敏感词而不能提交。
    展开

    作者回复: A1: 输入就是PCM,是从PCM队列中取出来封装到AudioPacket这个结构体中,建议中秋之后结合源码来看。 A2: 这个decoder是一个自己封装的Native层的【jiema】控制器,readSamples也是自己封装的方法,内部会从队列中读取数据,而队列中的数据是这个【jiema】控制器开了一个线程调用ffmpeg底层【jiema】器将数据【jiema】为PCM数据。也建议中秋之后结合源码进行学习; A3: 这里你使用的并不是原始的ffmpeg哈,应该是一个基于ffmpeg的封装的库,如果此段代码在别的地方都可以运行但是仅仅在华为安卓10上不能播放的话,建议看看权限之类的。

    
    
  • 我的無力雙臂
    2022-09-09 来自北京
    有示例demo吗 求分享

    作者回复: 有的,中秋节以后更新到github。

    
    