这样的问题:我有两个声道录制的视频文件。我尝试通过以下代码关闭左声道:
MediaPlayer mp;
....
mp.setVolume(0.f, 1f);
...在平板电脑上这项工作很好(正确的音量通道听起来不错)。但后来我在googleTv上试了一下,我连接到三星UE46ES6307U,这个代码没有用,声音很好。 也许它与Dolby Digital Plus / Dolby Pulse音频有关?我能以某种方式以编程方式发现声道设备的声音,以及每个声道设置的音量是多少?
更新: 在这个论坛http://www.googletvforum.org/forum/logitech-revue/375-audio-problems-logitech-revue.html的回复中有一条消息:“罗技还没有想出如何通过hdmi管道多声道音频。你必须使用光输出。哪个好。”
“您如何构建MediaPlayer?”
Videoview vv;
...............
vv.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setVolume(0.f, 1f);
}
});
更新
public class MainActivity extends Activity {
MediaPlayer mp = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (mp != null) {
mp.reset();
mp.release();
}
mp = MediaPlayer.create(this, R.raw.test);
mp.start();
}
public void onTurnOffLeft(View v){
mp.setVolume(0.f, 1.f);
}
public void onTurnOffRight(View v){
mp.setVolume(1.f, 0.f);
}
}
方法onTurnOffLeft关闭所有声音,onTurnOffRight方法无效。
UPDATE2
我尝试播放使用Vorbis编解码器编码的.ogg音频文件 - 频道关闭良好。但是我试着播放用mp3,ac3,pcm,aac编码的视频文件 - 关闭频道的问题仍然存在......我需要关闭视频中的音频频道,但如何解决这个问题,我不知道爱好。
答案 0 :(得分:3)
MediaPlayer对象由设备上的不同库支持(平板电脑和Google TV之间不同)。你是如何构建MediaPlayer的?
您可能想要尝试的一件事是在构建MediaPlayer后立即调用#reset()。默认情况下,当您使用“新”运算符构建MediaPlayer实例时,它处于IDLE状态(至少在Google TV上)。通过调用reset,您可以调用自己的OnErrorListener.onError()处理程序。这将让您查看是否存在其他可见的潜在错误。
您可能还想查看AudioManager#setStreamVolume(int,int,int),它设置特定类型的所有流的音量。
编辑1: 由于您只是从布局中抓取VideoView(我猜是因为代码被省略了),所以在设置监听器后,您应该在视频视图上调用reset。