2

我在我的项目中使用 0.4.2 版本的 jar 来录制视频并上传它。从 SimpleCameraHost.getVideoFileName() 返回的文件名在我的 Nexus 4 上是错误的。

看起来文件名带有时间戳,并且我在设备上有一个文件 Video_20131113_223704.mp4 但该方法将 Video_20131113_223708.mp4 返回了 4 秒?

我应该做些什么来获得正确的文件名吗?

PS 如果我有足够的代表,我会添加一个 cwac-camera 标签...

4

2 回答 2

2

在您的 CameraFrament 类中启动和停止记录在我的设备上创建了一个以 _223704.mp4 结尾的文件

这是因为getVideoPath()被设计为由CameraView, 调用来生成用于视频的文件名。getVideoFileName(),反过来,被 使用getVideoPath()。这必须在视频开始录制之前完成。

然后在我的子类中调用 SimpleCameraHost 方法 getVideoFileName() 返回一个以 _223708.mp4 结尾的 videoFileName,因此当我尝试上传从您的方法返回的文件时,它失败了,因为该文件不存在。

你不打电话 getVideoFileName(),你实现它。期望是,如果您使用的是 stock 实现,您自己的代码中不需要文件名。如果您需要文件名,覆盖getVideoFileName()(和/或相关方法,如getVideoPath()),返回您想要的(很可能是超类返回的任何内容),并保留结果以供以后使用。

于 2013-11-14T13:34:07.330 回答
0

我对照片也有同样的问题,但基本上我也认为 getPhotoPath 会返回我刚刚拍摄的照片的路径。

所以我仔细阅读了 CommonsWare 的答案,尤其是他解释 getVideoPath() 工作原理的部分。

这是因为 getVideoPath() 被设计为由 CameraView 调用,以生成用于视频的 >filename。getVideoFileName() 反过来由 getVideoPath() 使用。>这必须在视频开始录制之前完成。

我的理解是 getVideoPath() 是由系统而不是开发人员使用的。getVideoPath() 调用 getVideoFilename() 和 getVideoDirectory() 来构建视频路径,稍后系统将使用该路径来保存视频。

话虽如此,我们需要做的(就像 CommonsWare 已经说过的那样)是告诉系统我们希望将文件保存在哪个路径。我们通过覆盖 getVideoFilename()、getVideoDirectory() 或 getVideoPath() 来做到这一点。

一旦我们控制了它,我们就可以在保存视频后随时调用 getVideoPath() ,以确保我们有正确的路径。

因此,由于我对默认目录感到满意,因此我只是像这样覆盖 getPhotoFilename() :

public class MyCameraHost extends SimpleCameraHost {
private String photoName;
private String extension = ".png";

public MyCameraHost(Context _ctxt) {
    super(_ctxt);
    // TODO Auto-generated constructor stub
}

@Override
protected String getPhotoFilename() {
    // TODO Auto-generated method stub
    return this.photoName + this.extension;
}

public void setPhotoName (String name){
    this.photoName = name;
}
}

在我的相机活动中,我的 takePhoto() 方法如下所示:

private void takePicture() {
    CameraFragment f = (CameraFragment) getFragmentManager().findFragmentByTag(TAG_CAMERA_FRAGMENT);
    if (f != null && f.isVisible()) {
        cameraHost.setPhotoName("test");
        f.takePicture();
        pictureFile = cameraHost.getPhotoPath();
    }
}

希望这可以帮助。感谢 CommonWares 提供了这个很棒的库以及您对我们问题的回答。

于 2014-12-22T03:22:46.783 回答