desc:录制视频的文件名

main
xiaowusky 2 years ago
parent ef6b84334f
commit 9bb2f55ff1

@ -5,7 +5,9 @@ import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.common.commonlib.db.DBUtils
import com.common.commonlib.db.entity.Gas
import com.common.commonlib.db.entity.Video
import com.yinuo.safetywatcher.R
import com.yinuo.safetywatcher.databinding.ActivityHistoryVideoBinding
@ -99,7 +101,14 @@ class HistoryVideoActivity : BaseActivity() {
val videos = videoDao.getAllByTime(startTime, endTime)
launch(Dispatchers.Main) {
mAdapter.setData(videos)
val sortList = mutableListOf<Video>()
sortList.apply {
addAll(videos)
sortWith { o1, o2 ->
(o2.time - o1.time).toInt()
}
}
mAdapter.setData(sortList)
}
}
}

@ -17,7 +17,7 @@ class HistoryVideoAdapter :
BaseRvAdapter.BaseViewHolder<Video, LayoutItemHistoryBinding>(binding) {
override fun bindView(data: Video) {
binding.tvTime.text = formatTime(data.time)
binding.tvSensor.text = data.path
binding.tvSensor.text = data.name
binding.root.setOnClickListener {
mItemClickListener?.onItemClick(data)

@ -8,12 +8,10 @@ import android.view.SurfaceHolder;
import android.view.SurfaceView;
import com.yinuo.library.vlc.encoder.BaseMovieEncoder;
import com.yinuo.library.vlc.encoder.CameraHelper;
import com.yinuo.library.vlc.encoder.MovieEncoder1;
import com.yinuo.library.vlc.utils.BitmapUtil;
import com.yinuo.library.vlc.utils.LogUtils;
import java.io.File;
import java.nio.ByteBuffer;
/**
@ -91,9 +89,7 @@ public class RtspSurfaceRender2 implements RtspHelper.RtspCallback {
public void startRecording() {
mSurfaceView.post(() -> {
if (!mVideoEncoder.isRecording()) {
File output = CameraHelper.getOutputMediaFile(CameraHelper.MEDIA_TYPE_VIDEO, "");
LogUtils.v(String.format("startRecording: %s", output));
mVideoEncoder.startRecording(new BaseMovieEncoder.EncoderConfig(output, EGL14.eglGetCurrentContext()));
mVideoEncoder.startRecording(new BaseMovieEncoder.EncoderConfig(EGL14.eglGetCurrentContext()));
mRecording = true;
}
});

@ -6,6 +6,7 @@ import android.media.MediaMuxer;
import com.common.commonlib.db.DBUtils;
import com.common.commonlib.db.entity.Video;
import com.yinuo.library.vlc.utils.LogUtils;
import java.io.File;
import java.io.IOException;
@ -28,8 +29,8 @@ public class AndroidMuxer {
private volatile int mNumReleases;
private long mStartRecordTime = 0L;
// private static final long DEFAULT_RECORD_DURATION = 30 * 60 * 1000;
private static final long DEFAULT_RECORD_DURATION = 10 * 1000;
private static final long DEFAULT_RECORD_DURATION = 30 * 60 * 1000;
// private static final long DEFAULT_RECORD_DURATION = 10 * 1000;
public AndroidMuxer() {
createMediaMuxer();
@ -37,19 +38,21 @@ public class AndroidMuxer {
private void createMediaMuxer() {
try {
File output = CameraHelper.getOutputMediaFile(CameraHelper.MEDIA_TYPE_VIDEO, "");
long timeMillis = System.currentTimeMillis();
File output = CameraHelper.getOutputMediaFile(CameraHelper.MEDIA_TYPE_VIDEO, timeMillis, DEFAULT_RECORD_DURATION);
String filePath = output.getAbsolutePath();
LogUtils.v(String.format("startRecording: %s", output));
mMuxer = new MediaMuxer(filePath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
mStarted = false;
insertToDB(filePath);
insertToDB(timeMillis, filePath);
} catch (IOException e) {
e.printStackTrace();
}
}
private void insertToDB(String filePath) {
private void insertToDB(long timeMillis, String filePath) {
String[] splits = filePath.split("/");
Video cacheVideo = new Video(System.currentTimeMillis(), splits[splits.length - 1], false, filePath);
Video cacheVideo = new Video(timeMillis, splits[splits.length - 1], false, filePath);
DBUtils.INSTANCE.insertCacheVideo(cacheVideo);
}

@ -98,21 +98,16 @@ public abstract class BaseMovieEncoder implements Runnable {
public static class EncoderConfig {
AndroidMuxer mMuxer;
final File mOutputFile;
final EGLContext mEglContext;
public EncoderConfig(File outputFile,
EGLContext sharedEglContext) {
mOutputFile = outputFile;
public EncoderConfig(EGLContext sharedEglContext) {
mEglContext = sharedEglContext;
mMuxer = new AndroidMuxer();
}
@Override
public String toString() {
return "EncoderConfig: " +
" to '" + mOutputFile.toString() + "' ctxt=" + mEglContext;
return "EncoderConfig: " + "' ctxt=" + mEglContext;
}
}

@ -9,7 +9,6 @@ import android.view.Surface;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
@ -181,10 +180,11 @@ public class CameraHelper {
* Creates a media file in the {@code Environment.DIRECTORY_PICTURES} directory. The directory
* is persistent and available to other applications like gallery.
*
* @param type Media type. Can be video or image.
* @param type Media type. Can be video or image.
* @param defaultRecordDuration
* @return A file object pointing to the newly created file.
*/
public static File getOutputMediaFile(int type, String name) {
public static File getOutputMediaFile(int type, long time, long duration) {
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
if (!Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {
@ -197,14 +197,16 @@ public class CameraHelper {
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA);
String timeStamp = format.format(time);
String endTimeStamp = format.format(time + duration);
File mediaFile;
if (type == MEDIA_TYPE_IMAGE) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_" + timeStamp + ".jpg");
} else if (type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_" + timeStamp + "_" + name + ".mp4");
"VID_" + timeStamp + "_" + endTimeStamp + ".mp4");
} else {
return null;
}

Loading…
Cancel
Save