2016-08-04 16 views
14

Oto mój kod videoview:Nie można przesyłać wideo

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

Filmy staram się grać przechowywane są w moim serwerze. Są one wysyłane z tej samej aplikacji za pomocą niestandardowej kamery. Oto parametry przechwytywania wideo: (tylko w przypadku coś było nie tak z tymi, próbowałem wszystkich kombinacji, VP8 Format zrobił strumienia, z wyjątkiem wyjścia nie ma dźwięku i został obrócony bokiem)

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

Próbowałem do rozwiązać to przez długi czas, ale teraz jestem bez pomysłów. Chciałbym przesłać strumieniowo te filmy wideo w widoku wideo. Ale zamiast tego muszę poczekać 10-20 sekund. Następnie rozpoczyna się wideo lub pojawia się błąd, że nie można odtworzyć wideo.

Dodatkowe informacje:

Projekt minimalna SDK jest 18, ale mogę go zmienić, czy to pomoże.

Moje urządzenie testujące jest Asus Zenfone 2 (5.0)

nie testowałem z dowolnym innym urządzeniem

Filmy są zapisywane w GoDaddy przyjmującym Linux. www.mydomain.com/videos/

kodowania wideo H.264 Baseline Profile jest

Moov Atom jest na górze (po fytp (lub coś takiego)) tak jak zaleca

Próbowałem za pomocą trzeciej partii wideo biblioteki gracz jak exomedia

Niektóre filmy wykonywać pracę, na przykład:

http://www.html5videoplayer.net/videos/toystory.mp4

Sprawdziłem kodowanie wideo. Jest zakodowany w h264 MAIN PROFILE (z moich badań wynika, że ​​główny profil nie jest obsługiwany w przypadku większości urządzeń z systemem Android, zalecany jest profil bazowy) ORAZ MOOV ATOM JEST W OSTATNIM STANOWISKU. Ale ten film gra dobrze ... dafuq?

EDIT: Właściwości tego Toystory wideo, który działa:

1

2

A oto wideo zrobione z mojej aplikacji z parameteres podanych powyżej (zauważ atom Moov jest na właściwym miejscu , ale to nadal nie działa)

3

4

+0

Czy masz błąd? Zamiast wideoview.start() użyj mp.start() –

+1

Teraz próbowałem używać mediplayera używając widoku powierzchni i nie zapominając wywołać prepareasync zamiast przygotować(), nadal nie działało. E/MediaPlayer: Błąd (1, -2147483648) – user6650650

Odpowiedz

1

Jaki protokół sieciowy jest używany podczas przesyłania strumieniowego wideo z serwera do aplikacji? Być może protokół sieciowy, którego używasz, nie jest obsługiwany przez VideoView. VideoView obsługuje tylko ograniczone protokoły. Według android dokumentów dotyczących "Obsługiwane formaty media":

następujące protokoły sieciowe są obsługiwane dla odtwarzania audio i video:

--RTSP RTP (SDP)

--http/HTTPS progresywny Streaming --http/HTTPS żywo projekt protokołu:

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 

--Note: HTTPS nie jest obsługiwany przed Androida 3.1.

+0

Nie wiem, co to jest protokół sieciowy. Jak mogę sprawdzić, którego używam? – user6650650

+0

To jest pytanie google – Christopher

+0

Po ponownym zbadaniu twojego pytania, myślę, że protokół sieciowy używany jest Progressive http.To nie powinno być problemu. Są pytania podobne do twoich: http: //stackoverflow.com/questions/11540076/android-mediaplayer-error-1-2147483648 i http://stackoverflow.com/questions/4728085/cannot-play-certain-videos. Ich odpowiedzi były zgodne: "W przypadku kontenerów 3GPP i MPEG-4 atom moov musi poprzedzać dowolne atomy mdat, ale musi odnieść sukces w stosunku do atomu ftyp." W swoim pytaniu wspomniałeś, że twoja konfiguracja to "atom Moowa jest na górze (po fytp (lub coś podobnego)). Może to jest problem. –

Powiązane problemy