2016-08-04 42 views
14

這裏是我的videoview代碼:不能流視頻

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格式做流,除了輸出了無音訊,並側身旋轉)

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,但我可以改變它,如果這將有助於。

我的測試裝置是華碩Zenfone 2(5.0)

我沒有與任何其它設備

畫存儲在godaddy的Linux主機測試。 www.mydomain.com/videos/

視頻編碼H264 Baseline Profile的

的Moov原子是在頂部(fytp(或類似的東西)後),就像推薦

我嘗試使用第三方視頻像exomedia

一些視頻播放器庫做的工作,例如:

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

我檢查了視頻編碼。它在h264 MAIN PROFILE中編碼(從我的研究中,主要配置文件不支持大多數android設備,建議使用基線配置文件)而MOOV ATOM處於最後位置。但是這個視頻播放得很好...... dafuq?

編輯:該作品是toystory視頻性能:

1

2

這裏是從我的應用程序與上面給出parameteres拍攝的視頻(注意MOOV原子是在正確的地方,但這仍然不起作用)

3

4

+0

你發現任何錯誤?而不是使用videoview.start()使用mp.start() –

+1

現在我嘗試使用mediplayer使用surfaceview,而不是忘記調用prepareasync而不是prepare(),但仍然無法使用。 E/MediaPlayer:錯誤(1,-2147483648) – user6650650

回答

1

當您的視頻從服務器流到應用程序時,使用哪種網絡協議? VideoView可能不支持您使用的網絡協議。 VideoView僅支持有限的協議。 據 「支持的媒體格式的」 Android文件:

以下網絡協議都支持音頻和視頻播放:

--RTSP(RTP,SDP)

--http/HTTPS漸進流 --http/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之前,不支持。

+0

我不知道什麼是網絡協議。如何檢查我正在使用哪一個? – user6650650

+0

這是一個谷歌問題 – Christopher

+0

再次檢查您的問題後,我認爲使用的網絡協議是Progressive http.That應該不是問題。有類似於你的問題:http://stackoverflow.com/questions/11540076/android-mediaplayer-error-1-2147483648和http://stackoverflow.com/questions/4728085/cannot-play-certain-videos。他們的回答提到:「對於3GPP和MPEG-4容器,moov原子必須先於任何mdat原子,但必須成功ftyp原子。」在你的問題中,你提到你的配置文件是「Moov原子在頂部(在fytp之後(或類似的東西))」。也許這就是問題所在。 –