мое приложение для Android потоки видео онлайн в VideoView
. При воспроизведении видео из файла он отлично работает или даже транслируется в реальном времени (m3u8
); Он всегда передается из одного источника, и когда я использую внешний проигрыватель/браузер, он также отлично передает потоки (поэтому я не думаю, что это проблема с источником, что является разновидностью такого файла: https://publish.dvlabs.com/democracynow/360/dn2016-0810.mp4VideoView Поток загружается не достаточно буферизировать
Андроида Monitor журналы это как раз перед крушением:
10-13 12:02:56.204 32460-32748/com.workingagenda.democracydroid D/MediaHTTPConnection: filterOutInternalHeaders: key=User-Agent, val= stagefright/1.2 (Linux;Android 6.0.1)
10-13 12:02:56.205 32460-32472/com.workingagenda.democracydroid D/MediaHTTPConnection: proxy null port 0
10-13 12:02:57.904 32460-32460/com.workingagenda.democracydroid D/MediaPlayer: getMetadata
10-13 12:02:58.438 32460-377/com.workingagenda.democracydroid W/MediaPlayer: info/warning (3, 0)
, а затем я получаю эти журналы, когда он выходит из строя:
10-13 12:05:33.812 32460-32472/com.workingagenda.democracydroid W/MediaHTTPConnection: readAt 26869519/241 => java.net.ProtocolException: unexpected end of stream
10-13 12:08:32.480 32460-3546/com.workingagenda.democracydroid E/MediaPlayer: error (1, -1004)
10-13 12:08:32.480 32460-32460/com.workingagenda.democracydroid E/MediaPlayer: Error (1,-1004)
10-13 12:08:32.481 32460-32460/com.workingagenda.democracydroid D/VideoView: Error: 1,-1004
[ 10-13 12:08:32.512 5066: 453 E/ ]
Destroy C2D instance
[ 10-13 12:08:32.512 5066: 453 E/ ]
Destroy C2D instance
10-13 12:08:32.635 32460-32472/com.workingagenda.democracydroid E/MediaPlayer: error (1, -1004)
10-13 12:08:32.668 32460-32460/com.workingagenda.democracydroid E/MediaPlayer: Error (1,-1004)
10-13 12:08:32.668 32460-32460/com.workingagenda.democracydroid D/VideoView: Error: 1,-1004
Чтобы быть более точным мой вопрос:
- Я хотел бы знать, что это за ошибка,
E/MediaPlayer: Error (1,-1004)
есть (так как я не нашел никакой информации в Интернете об этом). - Если это то, что я подозреваю, в основном как конец ошибки файла/потока, то я надеюсь получить некоторую помощь буферизации или иным образом загрузить видео таким образом, чтобы этого избежать?
Я видел этот вопрос, Android Streaming with MediaPlayer: Error(1, -1004) and 3GPP video, но ответы не очень помогают.
Я нашел функцию, MediaPlayer.prepareAsync()
, здесь https://developer.android.com/reference/android/media/MediaPlayer.html#prepareAsync(), это автоматически вызывается, когда VideoView
открывает видеоролик, но это, похоже, не работает.
Редактировать
Таким образом, решение привело меня к Google, ExoPlayer, который был довольно легко поменять в моей VideoView, и он работает как шарм.
- Добавить ExoPlayer в зависимости
- Изменить вид в макете, чтобы
SimpleExoPlayerView
- Initialize
SimpleExoPlayer
в деятельности - Initialize
MediaSource
и прикрепить к игроку - Помните
release()
, когда больше не нужны.
И с этим потоковые работы беспрепятственно.
Использование https://github.com/google/ExoPlayer – Qamar
Да ... это решение – Nevermore