如何从Android发送视频到服务器,当转到URL分配给它时能够在浏览器中播放?

时间:2017-10-08 10:25:12

标签: android retrofit2 mediarecorder android-mediarecorder video-recording

我使用Retrofit 2将视频文件(从相机捕获)发送到我的PHP服务器,视频成功上传到服务器中的文件夹(我使用FileZilla检查,视频存在于文件夹中),我将视频分配给一个URL,我转到同一个Url(使用浏览器),它无法播放视频。

它在Url中显示如下(例如:mydomain.cc/video/VID_2014.mp4)

enter image description here

因此我使用随机视频进行测试,通过邮递员发送,该视频的网址能够播放。

同样如此:

enter image description here

Android中的视频文件路径是我在捕获视频后onActivityResult获得的视频

  

/storage/emulated/0/DCIM/ABC/VID_20171008_183129.mp4

以下是我发送视频文件的代码

 private void uploadVideoToServer(String pathToVideoFile){
    File videoFile = new File(pathToVideoFile);
    RequestBody videoBody = RequestBody.create(MediaType.parse("video/*"), videoFile);
    MultipartBody.Part vFile = MultipartBody.Part.createFormData("video", videoFile.getName(), videoBody);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(SERVER_PATH)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    VideoInterface vInterface = retrofit.create(VideoInterface.class);
    Call<ResultObject>  serverCom = vInterface.uploadVideoToServer(vFile);
    serverCom.enqueue(new Callback<ResultObject>() {
        @Override
        public void onResponse(Call<ResultObject> call, Response<ResultObject> response) {
            ResultObject result = response.body();
            if(!TextUtils.isEmpty(result.getSuccess())){
                Toast.makeText(MainActivity.this, "Result " + result.getSuccess(), Toast.LENGTH_LONG).show();
                Log.d(TAG, "Result " + result.getSuccess());
            }
        }
        @Override
        public void onFailure(Call<ResultObject> call, Throwable t) {
            Log.d(TAG, "Error message " + t.getMessage());
        }
    });
}

VideoInterface.java

public interface VideoInterface {
    @Multipart
    @POST("video.php")
    Call<ResultObject> uploadVideoToServer(@Part MultipartBody.Part video);
}

所以我的问题是,为什么Android相机的视频捕捉无法在Url中播放?这有关系吗?

因为我后来担心我需要使用Url显示回我的应用程序,如果问题如何解决?

所以有人请给我一个完整的解决方案。

编辑: 我使用ffmpeg检查了编解码器,这里是结果..

enter image description here enter image description here

2 个答案:

答案 0 :(得分:2)

视频使用的音频和视频编解码器非常重要;并非所有播放器都支持所有编解码器。 Mozilla has a nice table of supported codecs by platform and player。根据这张表,我想你想要:

  1. WebM中的VP8和Vorbis(需要更换容器)
  2. MP4中的H.264和MP3
  3. MP4中的H.264和AAC
  4. 您可以使用热门的vlc媒体播放器或ffmpeg来检查编解码器。

    捕获视频后,您可能需要转换为合适的网络编解码器。 ffmpeg是一个用于转换编解码器和容器的免费工具。

    ffmpeg documentation example for converting to webm是:

    ffmpeg -i input.mp4 -c:v libvpx -b:v 1M -c:a libvorbis output.webm
    

    您可能需要根据质量/尺寸偏好调整比特率1M。

答案 1 :(得分:1)

视频MP4存储在文件和文件中播放所需的元数据。在放弃之前,您是否等待完整的视频下载?