2016-08-04 40 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之后(或类似的东西))”。也许这就是问题所在。 –