Невозможно потоковое видео
Вот мой код видеообзора:
Uri uri = Uri.parse(vidurl);
MediaController mediaController = new MediaController(this);
videoView.setMediaController(mediaController);
videoView.requestFocus();
videoView.setVideoURI(uri);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
videoView.start();
}
});
Видео, которые я пытаюсь воспроизвести, хранятся на моем сервере. Они отправляются туда из одного приложения, используя пользовательскую камеру. Вот параметры захвата видео: (На всякий случай что-то не так с ними, я пробовал каждую комбинацию, VP8 Format сделал поток, за исключением того, что на выходе не было звука и вращался вбок)
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
if (currentCameraId == Camera.CameraInfo.CAMERA_FACING_BACK) {
mMediaRecorder.setOrientationHint(90);
} else {
mMediaRecorder.setOrientationHint(270);
}
mMediaRecorder.setVideoSize(list.get(sizex).width, list.get(sizex).height);
mMediaRecorder.setVideoEncodingBitRate(1500000);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setMaxDuration(15000);
mMediaRecorder.setOutputFile(getVidFile().getAbsolutePath());
Я пытался решить это в течение долгого времени, но теперь я не в курсе. Я хотел бы передать эти видеоролики в виде видео. Но вместо этого, я должен ждать 10-20 секунд. После этого запускается либо видео, либо сообщение об ошибке, которую невозможно воспроизвести.
Дополнительная информация:
Минимальный размер проекта sdk равен 18, но я могу его изменить, если это поможет.
Мое тестовое устройство - Asus Zenfone 2 (5.0)
Я не тестировал никакое другое устройство
Видео хранятся в хостинге Linux. www.mydomain.com/videos/
Видеокодирование - это базовый профиль h264
Моовский атом находится наверху (после fytp (или что-то в этом роде)), как рекомендовано
Я пробовал использовать сторонние видеоплееры, такие как exomedia
Некоторые видео работают, например:
http://www.html5videoplayer.net/videos/toystory.mp4
Я проверил, что кодирование видео. Он закодирован в h264 MAIN PROFILE (из моего исследования, основной профиль не поддерживается для большинства устройств Android, рекомендуется использовать базовый профиль) И MOOV ATOM IS ПОСЛЕДНЕЕ ПОЛОЖЕНИЕ. Но это видео играет просто отлично... dafuq?
РЕДАКТИРОВАТЬ: Свойства этого звукового видео, которое работает:
1
2
И вот видео, снятое из моего приложения с параметрами, приведенными выше (обратите внимание, что атом moov находится в нужном месте, но это все еще не работает)
3
4
Ответы
Ответ 1
Какой сетевой протокол используется, когда ваше видео передается с сервера на приложение? Возможно, сетевой протокол, который вы используете, не поддерживается VideoView.
VideoView поддерживает только ограниченные протоколы.
Согласно андроидным документам на "Поддерживаемые медиаформаты":
Поддерживаются следующие сетевые протоколы для воспроизведения аудио и видео:
- RTSP (RTP, SDP)
- прогрессивная потоковая передача HTTP/HTTPS
Протокол черновика HTTPS/HTTPS:
MPEG-2 TS media files only
Protocol version 3 (Android 4.0 and above)
Protocol version 2 (Android 3.x)
Not supported before Android 3.0
- Примечание: HTTPS не поддерживается до Android 3.1.