VideoVideo - Ширина видео x Высота - выпуск MediaPlayer

Я написал пример приложения, которое воспроизводит проблему:

https://github.com/blundell/VideoRatioProblemPerDevice

VideoView документация гласит:

Отображает видео файл. ... заботится о том, чтобы вычислить результаты измерений из видео, чтобы их можно было использовать в любом менеджере компоновки, и предоставляет различные параметры отображения, например масштаб

Проблема в том, что Samsung Galaxy S3 делает странные вещи с видео и не уважает соотношение видео. (также происходит на устройстве HTC).

Активность с полноэкранным фрагментом:

Я обнаружил, что при воспроизведении видео на Samsung Galaxy S3 оно воспроизводится в неправильном соотношении. Похоже, что он был растянут до высоты просмотра без учета соотношения исходного видео.

Вот:

Однако, если я воспроизведу видео на Samsung Galaxy Nexus, видео будет в правильном соотношении.

Вот:

Если я заставлю видео взять полный размер фрагмента, на S3 все будет хорошо (потому что соотношение экрана - это соотношение видео). Однако я нене хочу делать это как онозавинчивает фрагмент, используемый в других местах, то есть таблетках.

Код является:

Деятельность с фрагментом с помощью VideoView. Это можно увидеть здесь:GITHUB CODE LINK

если вам нужен какой-то код, вот VideoPlayerFragment:

public class VideoPlayerFragment extends Fragment {

    private static final String TAG = "VideoPlayer";

    private FitVideoView videoView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_video_player, container, false);

        videoView = (FitVideoView) root.findViewById(R.id.surface);

        return root;
    }

    public void playVideo() {
        Uri uri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.test_vid);
        Log.d(TAG, "Uri is: " + uri);
        setVideoLocation(uri);
        if (!videoView.isPlaying()) {
            videoView.start();
        }
    }

    private void setVideoLocation(Uri uri) {
        try {
            videoView.setVideoURI(uri);
        } catch (Exception e) {
            Log.e(TAG, "VideoPlayer uri was invalid", e);
            Toast.makeText(getActivity(), "Not found", Toast.LENGTH_SHORT).show();
        }
    }

    public void pauseVideo() {
        if (videoView.isPlaying()) {
            videoView.pause();
        }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос