2

这样的问题:我有两个声道录制的视频文件。我试图通过以下代码关闭左声道:

MediaPlayer mp; 

....

mp.setVolume(0.f, 1f);

...并且在平板电脑上这项工作很好(右音量通道听起来不错)。但后来我在连接到三星 UE46ES6307U 的 googleTv 上尝试了它,但此代码不起作用,声音关闭。也许它是杜比数字+/杜比脉冲音频的界限?我可以以某种方式以编程方式发现声音通道设备的功能,以及每个通道设置的音量吗?

更新:在这个论坛上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 方法无效。

更新2

我尝试播放使用 Vorbis 编解码器编码的 .ogg 音频文件 - 通道关闭良好。但我尝试播放用 mp3、ac3、pcm、aac 编码的视频文件 - 关闭频道的问题仍然存在......我需要关闭视频中的音频频道,但如何解决这个问题,我不知道然而。

4

1 回答 1

3

MediaPlayer 对象由跨设备的不同库支持(平板电脑和 Google TV 之间不一样)。你是如何构建 MediaPlayer 的?

您可能想尝试的一件事是在 MediaPlayer 构建后立即调用它的 #reset()。默认情况下,当您使用“新”运算符构造 MediaPlayer 实例时,它处于空闲状态(至少在 Google TV 上)。通过调用 reset 您允许调用您自己的 OnErrorListener.onError() 处理程序。这将让您查看是否存在其他不可见的潜在错误。

您可能还想查看 AudioManager#setStreamVolume(int, int, int) 设置特定类型的所有流的音量。

编辑 1:由于您只是在设置监听器后从布局中获取 VideoView(我猜是因为省略了该代码),因此您应该在视频视图上调用重置。

于 2012-12-04T16:52:19.380 回答