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();
}
}
}