У меня есть два различных видео , которые я пытаюсь загрузить в VideoView
использовании
videoView.setVideoURI(Uri.parse(url));
Два видео, пусть это будут видео 1 и видео 2 , имеют следующие характеристики (извлечены с использованием ffmpeg -i
); по сути, это две разные кодировки одного и того же видео:
Видео 1:
Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 90000.00 (180000/2) Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '4fbfd5ece4b0932236fc234d.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42isomavc1 creation_time : 2011-12-03 04:43:46 genre : Trailer artist : Paramount Pictures title : Captain America: The First Avenger - Theatrical Trailer #2 encoder : HandBrake 4344svn 2011111001 date : 2011 Duration: 00:02:30.67, start: 0.000000, bitrate: 6738 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1920x800 [PAR 1:1 DAR 12:5], 6575 kb/s, 23.97 fps, 90k tbr, 90k tbn, 180k tbc Metadata: creation_time : 2011-12-03 04:43:46 Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 159 kb/s Metadata: creation_time : 2011-12-03 04:43:46
Видео 2:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '500416ea44aeb4b95d5ae8a0_hd.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 2011-12-03 04:43:46 title : Captain America: The First Avenger - Theatrical Trailer #2 artist : Paramount Pictures date : 2011 encoder : Lavf53.32.100 genre : Trailer Duration: 00:02:30.69, start: 0.000000, bitrate: 2045 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720 [PAR 27:20 DAR 12:5], 1889 kb/s, 23.99 fps, 90k tbr, 180k tbn, 180k tbc Metadata: creation_time : 2011-12-03 04:43:46 Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16, 151 kb/s Metadata: creation_time : 2011-12-03 04:43:46
Я знаю, что поддержка AAC пришла с Honeycomb, поэтому я тестировал видео на нескольких устройствах; результаты приведены ниже:
SGS II with custom 4.0.3 OS(Sensation ROM 3.4 with CF-Root kernel) - Video 1:OK - Video2:OK
SGS I with Samsung 2.3.3 OS - Video 1:error (1, -2147483648) - Video 2:OK
SGS I with custom 4.0.3 OS(ICS SGS TEAM ROM with Devil kernel) - Video 1:error (1, -2147483648) - Video 2:OK
Nexus One with original 2.3.6 OS - Video 1:See (1) below - Video 2:See (2) below
Emulator with 2.2 OS - Video 1:error (1, -2147483648) - Video 2:error (1, -2147483648)
Emulator with 4.0.3 OS - Video 1:error (1, -2147483648) - Video 2:error (1, -2147483648)
Оба видео отлично воспроизводятся в Google Chrome на ПК. Было бы полезно добавить, что в случае ОК видео и звук воспроизводятся правильно. В случае ошибки (1, -2147483648) один и тот же журнал выводится со всех устройств (кроме Nexus One):
07-18 10:25:10.996: I/MediaPlayer(17860): uri is:http://s3-eu-west-1.amazonaws.com/cf-templates-k6ohn88yswx5-eu-west-1/videos/4fbc88e7e4b0b0896e877764/4fbfd5ece4b0932236fc234d.mp4
07-18 10:25:10.996: I/MediaPlayer(17860): path is null
07-18 10:25:10.996: D/MediaPlayer(17860): Couldn't open file on client side, trying server side
07-18 10:25:39.859: D/MediaPlayer(17860): getMetadata
07-18 10:25:45.070: E/MediaPlayer(17860): error (1, -2147483648)
07-18 10:25:45.074: E/MediaPlayer(17860): Error (1,-2147483648)
07-18 10:25:45.078: D/VideoView(17860): Error: 1,-2147483648
В случае (1) следующий журнал выводится из Nexus One, и видео никогда не загружается:
07-18 13:49:20.115: D/MediaPlayer(10109): Couldn't open file on client side, trying server side
07-18 13:49:20.115: I/StagefrightPlayer(68): setDataSource('http://s3-eu-west-1.amazonaws.com/cf-templates-k6ohn88yswx5-eu-west-1/videos/4fbc88e7e4b0b0896e877764/4fbfd5ece4b0932236fc234d.mp4')
07-18 13:49:20.135: I/NuHTTPDataSource(68): connect to s3-eu-west-1.amazonaws.com:80/cf-templates-k6ohn88yswx5-eu-west-1/videos/4fbc88e7e4b0b0896e877764/4fbfd5ece4b0932236fc234d.mp4 @0
07-18 13:49:20.155: I/ActivityManager(98): Displayed com.woisio/.video.VideoActivity: +450ms
07-18 13:49:20.795: I/NuCachedSource2(68): Keep alive
07-18 13:49:22.185: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 4 buffers of size 460800 on input port
07-18 13:49:22.195: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 8 buffers of size 2304000 on output port
07-18 13:49:25.325: D/dalvikvm(9499): GC_EXPLICIT freed 13K, 50% free 2726K/5379K, external 1625K/2137K, paused 116ms
07-18 13:49:27.525: I/NuCachedSource2(68): Keep alive
07-18 13:49:28.235: I/NuCachedSource2(68): Cache full, done prefetching for now
07-18 13:49:30.275: D/dalvikvm(9902): GC_EXPLICIT freed 8K, 50% free 2714K/5379K, external 1625K/2137K, paused 69ms
07-18 13:49:34.255: D/Finsky(9066): [1] 5.onFinished: Installation state replication succeeded.
07-18 13:49:35.855: I/NuCachedSource2(68): Keep alive
07-18 13:49:39.055: D/dalvikvm(9911): GC_EXPLICIT freed 22K, 50% free 2710K/5379K, external 1625K/2137K, paused 38ms
07-18 13:49:42.575: I/NuCachedSource2(68): Keep alive
07-18 13:49:43.285: I/NuCachedSource2(68): Keep alive
07-18 13:49:44.095: D/dalvikvm(9918): GC_EXPLICIT freed 7K, 50% free 2708K/5379K, external 1625K/2137K, paused 66ms
07-18 13:49:49.085: D/dalvikvm(9925): GC_EXPLICIT freed 15K, 49% free 3268K/6407K, external 1625K/2137K, paused 50ms
07-18 13:49:50.925: I/NuCachedSource2(68): Keep alive
07-18 13:49:54.115: D/dalvikvm(6756): GC_EXPLICIT freed 9K, 44% free 3774K/6727K, external 1625K/2137K, paused 77ms
07-18 13:49:57.685: I/NuCachedSource2(68): Keep alive
07-18 13:49:58.375: I/NuCachedSource2(68): Keep alive
07-18 13:49:59.105: D/dalvikvm(9066): GC_EXPLICIT freed 385K, 53% free 3186K/6727K, external 1625K/2137K, paused 66ms
07-18 13:50:05.955: I/NuCachedSource2(68): Keep alive
07-18 13:50:06.045: D/dalvikvm(8047): GC_EXPLICIT freed 9K, 47% free 3830K/7111K, external 1625K/2137K, paused 86ms
07-18 13:50:09.465: I/3gw.Service(488): Mobile Network not connected - not roaming
07-18 13:50:12.765: I/NuCachedSource2(68): Keep alive
07-18 13:50:13.465: I/NuCachedSource2(68): Keep alive
07-18 13:50:18.775: I/WindowManager(98): Setting rotation to 3, animFlags=0
07-18 13:50:18.795: I/ActivityManager(98): Config changed: { scale=1.0 imsi=286/2 loc=en_US touch=3 keys=1/1/2 nav=3/1 orien=2 layout=34 uiMode=17 seq=34}
07-18 13:50:18.895: D/dalvikvm(169): GC_EXTERNAL_ALLOC freed 108K, 48% free 3253K/6215K, external 5172K/5180K, paused 37ms
07-18 13:50:21.005: I/NuCachedSource2(68): Keep alive
07-18 13:50:21.265: D/dalvikvm(98): GC_EXPLICIT freed 394K, 42% free 6631K/11335K, external 4458K/5567K, paused 109ms
В случае (2) следующий журнал выводится из Nexus One и, как вы можете видеть, заканчивается ошибкой (1, -2147483648):
07-18 13:47:03.595: D/MediaPlayer(10059): Couldn't open file on client side, trying server side
07-18 13:47:03.595: I/StagefrightPlayer(68): setDataSource('http://s3-eu-west-1.amazonaws.com/cf-templates-k6ohn88yswx5-eu-west-1/videos/4ff4514444aec3d2f9f07ead/500416ea44aeb4b95d5ae8a0_hd.mp4')
07-18 13:47:03.605: I/NuHTTPDataSource(68): connect to s3-eu-west-1.amazonaws.com:80/cf-templates-k6ohn88yswx5-eu-west-1/videos/4ff4514444aec3d2f9f07ead/500416ea44aeb4b95d5ae8a0_hd.mp4 @0
07-18 13:47:03.625: I/ActivityManager(98): Displayed com.woisio/.video.VideoActivity: +505ms
07-18 13:47:05.355: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 4 buffers of size 460800 on input port
07-18 13:47:05.355: I/OMXCodec(68): [OMX.qcom.video.decoder.avc] allocating 8 buffers of size 1382400 on output port
07-18 13:47:05.365: I/NuCachedSource2(68): Keep alive
07-18 13:47:08.375: D/MediaPlayer(10059): getMetadata
07-18 13:47:08.745: D/dalvikvm(9925): GC_EXPLICIT freed 651K, 49% free 3275K/6407K, external 1625K/2137K, paused 68ms
07-18 13:47:09.205: I/3gw.Service(488): Mobile Network not connected - not roaming
07-18 13:47:11.565: I/NuCachedSource2(68): Cache full, done prefetching for now
07-18 13:47:12.095: I/NuCachedSource2(68): Keep alive
07-18 13:47:14.245: W/QCvdec(68): H264_Utils::check_header
07-18 13:47:14.245: W/QCvdec(68): check_header: start code 33
07-18 13:47:14.245: W/QCvdec(68): H264_Utils::check_header
07-18 13:47:14.245: W/QCvdec(68): check_header: start code 10
07-18 13:47:14.245: W/QCvdec(68): Parsing Error unsupported profile or level
07-18 13:47:14.245: W/QCvdec(68): ETB in Invalid State
07-18 13:47:14.245: E/OMXCodec(68): [OMX.qcom.video.decoder.avc] ERROR(0x8000100a, 0)
07-18 13:47:14.245: E/MediaPlayer(10059): error (1, -2147483648)
07-18 13:47:14.285: E/MediaPlayer(10059): Error (1,-2147483648)
07-18 13:47:14.285: D/VideoView(10059): Error: 1,-2147483648
Из того, что я прочитал, ошибка (1, -2147483648) может соответствовать неподдерживаемым кодекам, поврежденным метаданным или неправильным заголовкам файлов. Если это так, не могли бы вы указать мне в правильном направлении, какой кодек использовать? Благодарю.
источник
Ответы:
Просто чтобы прояснить кое-что для всех, кто читает этот вопрос на основе заголовка.
При просмотре значения ошибки (1, -2147483648) значение «1» соответствует константе в MediaPlayer.MEDIA_ERROR_UNKNOWN .
-2147483648 соответствует шестнадцатеричному 0x80000000, который определен как UNKNOWN_ERROR в frameworks / native / include / utils / Errors.h
Это показывает, что источник ошибки трудно определить, так как это довольно типичное возвращаемое значение, вызванное проблемами кодека и совместимости, как упоминалось выше, а также отменой потоков и некоторыми другими типами.
По вашей проблеме я бы рекомендовал проконсультироваться с поддерживаемыми Android форматами мультимедиа с совместимыми версиями Android и посмотреть, является ли тип кодировки причиной вашей проблемы, но, как упоминалось выше, ответ на неизвестную ошибку может быть вызван рядом проблем.
источник
encoder
или удалитьencoder
?Я столкнулся с той же ошибкой на Android P (Pixel 2 XL), но все, что мне нужно было сделать, это добавить
android:usesCleartextTraffic="true"
свойAndroidManifest.xml
тег приложения.источник
Для потоковой передачи на сайте Android есть примечание:
Перед перемещением
moov
атома я получил ту же ошибку . Чтобы исправить это, вы можете использовать mp4Box с помощью этой команды:MP4Box -hint output.mp4
После этого большинство моих видео можно будет транслировать. Если не работает, попробуйте это с помощью ffmpeg:
ffmpeg -i input.flv -f mp4 -vcodec libx264 -vprofile baseline -acodec libfaac -ar 16k -ab 32k output.mp4 MP4Box -hint output.mp4
Есть другие инструменты , которые вы можете найти здесь .
источник
Я также получаю ту же ошибку MEDIA_ERROR_UNKNOWN при воспроизведении видео (rtsp).
В моем случае я обнаружил проблему с моим Wi-Fi. Некоторые соображения безопасности Wi-Fi ограничен для протокола RTSP. Итак, я столкнулся с этой проблемой ошибки MEDIA_ERROR_UNKNOWN. Однажды проверьте свои сетевые разрешения.
Когда я перехожу на мобильные данные для воспроизведения видео, у меня все работает нормально. Может быть, это будет полезно тем, кто сталкивается с такой же ошибкой :).
источник
Позаботьтесь о поддерживаемом типе носителя и разрешении вашего устройства. Ошибка
error (1, -2147483648)
часто появляется, когда ваш тип видео носителя, кодеки или разрешение не поддерживаются вашим устройством.Ознакомьтесь с типом носителя, поддерживаемым Android, в документации:
https://developer.android.com/guide/appendix/media-formats.html
Например, мы можем заметить, что устройства выше 3.0 поддерживают .mp4, но не все из них поддерживают HD 720p.
источник
У меня была аналогичная проблема. В моем случае видео будет нормально воспроизводиться, если я сначала загрузил его на телефон, а затем воспроизвел. Но когда я пытался использовать Progressive HTTP, я получал ту же ошибку, что и в OP.
Я проверил, что атомы ftyp, moov и mdat находятся в правильном порядке. Оказалось, что проблема заключалась в значении поля ftyp. Было установлено значение «qt». Я использовал MP4Box для извлечения треков и создания нового файла mp4 с параметром ftyp, установленным на isom. Этот новый файл отлично работал с прогрессивным HTTP.
источник
Я решил это аналогично тому, как указано в ответе @ nam-trung, однако, поскольку мои видео уже были h264 и mp4, все, что мне нужно было сделать, это запустить следующее для каждого файла:
ffmpeg -i input.mp4 -vprofile baseline output.mp4
После этого все видео работали в VideoView при запуске на всех устройствах, которые я тестировал с использованием API v19 - v25.
источник
В моем случае ошибка возникла из-за того, что медиаплеер не имел прав доступа к файлам для локально сохраненного видео. Попробуйте сохранить видео в
/mnt/sdCARD
каталоге.источник
Я столкнулся с той же проблемой, но со своей стороны
Сначала я остановил медиаплеер, а затем отпустил его.
mMediaPlayer.stop (); mMediaPlayer.release ();
источник
В моем случае эта проблема была вызвана URL-адресом мультимедиа с пробелами! Вот исправление:
mMediaPlayer.setDataSource(source.replaceAll(" ", "%20"));
источник
если вы используете firebase, вам следует скопировать путь (или URL-адрес) из 1: Download Url, который содержит https: // firebasestorage .............
не из места хранения
2:
<uses-permission android:name="android.permission.INTERNET" />
добавьте это разрешение в тег манифеста внутри папки манифеставнутри Правила хранения
Внутри Правила хранения:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if true; } } }
источник