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.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.common.commonlib.db.DBUtils import com.common.commonlib.db.DBUtils
import com.common.commonlib.db.entity.Gas
import com.common.commonlib.db.entity.Video import com.common.commonlib.db.entity.Video
import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.R
import com.yinuo.safetywatcher.databinding.ActivityHistoryVideoBinding import com.yinuo.safetywatcher.databinding.ActivityHistoryVideoBinding
@ -99,7 +101,14 @@ class HistoryVideoActivity : BaseActivity() {
val videos = videoDao.getAllByTime(startTime, endTime) val videos = videoDao.getAllByTime(startTime, endTime)
launch(Dispatchers.Main) { 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) { BaseRvAdapter.BaseViewHolder<Video, LayoutItemHistoryBinding>(binding) {
override fun bindView(data: Video) { override fun bindView(data: Video) {
binding.tvTime.text = formatTime(data.time) binding.tvTime.text = formatTime(data.time)
binding.tvSensor.text = data.path binding.tvSensor.text = data.name
binding.root.setOnClickListener { binding.root.setOnClickListener {
mItemClickListener?.onItemClick(data) mItemClickListener?.onItemClick(data)

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

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

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

@ -9,7 +9,6 @@ import android.view.Surface;
import java.io.File; import java.io.File;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
@ -181,10 +180,11 @@ public class CameraHelper {
* Creates a media file in the {@code Environment.DIRECTORY_PICTURES} directory. The directory * Creates a media file in the {@code Environment.DIRECTORY_PICTURES} directory. The directory
* is persistent and available to other applications like gallery. * 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. * @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 // To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this. // using Environment.getExternalStorageState() before doing this.
if (!Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) { if (!Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {
@ -197,14 +197,16 @@ public class CameraHelper {
} }
// Create a media file name // 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; File mediaFile;
if (type == MEDIA_TYPE_IMAGE) { if (type == MEDIA_TYPE_IMAGE) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator + mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_" + timeStamp + ".jpg"); "IMG_" + timeStamp + ".jpg");
} else if (type == MEDIA_TYPE_VIDEO) { } else if (type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator + mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_" + timeStamp + "_" + name + ".mp4"); "VID_" + timeStamp + "_" + endTimeStamp + ".mp4");
} else { } else {
return null; return null;
} }

Loading…
Cancel
Save