代码之家  ›  专栏  ›  技术社区  ›  ken

如何将视频从android发送到服务器,当转到分配给它的URL时,它可以在浏览器中播放?

  •  10
  • ken  · 技术社区  · 7 年前

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

    在Url中就是这样(例如:mydomain.cc/video/VID_2014.mp4)

    enter image description here

    所以我测试了一个随机视频,通过邮递员发送,视频的URL可以播放。

    像这样:

    enter image description here

    我在Android中获取的视频文件路径 onActivityResult 捕获视频后,看起来像这样

    /存储/模拟/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());
            }
        });
    }
    

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

    所以我的问题是,为什么安卓摄像头拍摄的视频无法在Url中播放?这有关系吗?

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

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

    编辑: 我使用ffmpeg检查了编解码器,结果如下。。

    enter image description here enter image description here

    2 回复  |  直到 7 年前
        1
  •  2
  •   mattm    7 年前

    视频使用的音频和视频编解码器很重要;并非所有播放器都支持所有编解码器。 Mozilla has a nice table of supported codecs by platform and player . 基于此表,我认为您需要:

    1. WebM中的VP8和Vorbis(需要更换容器)
    2. H、 264和MP4中的MP3
    3. H、 264和MP4中的AAC

    vlc 媒体播放器,或 ffmpeg .

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

    这个 ffmpeg documentation example for converting to webm 是:

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

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

        2
  •  1
  •   alrama    7 年前

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