当前位置: 首页 > news >正文

免备案网站空间购买app备案查询平台官网

免备案网站空间购买,app备案查询平台官网,英文字体展示网站推荐,注册公司如何提供注册地址#x1f4cc; 背景说明 在基于大牛直播SDK的 Android 应用中#xff0c;录像功能常常用于本地保存 RTSP/RTMP 流媒体数据#xff0c;生成 .mp4 文件以便后续回看、上传或编辑。我们的录像调用如下#xff1a; /* SmartPlayer.java* Created by daniusdk.com* WeChat: xins… 背景说明 在基于大牛直播SDK的 Android 应用中录像功能常常用于本地保存 RTSP/RTMP 流媒体数据生成 .mp4 文件以便后续回看、上传或编辑。我们的录像调用如下 /* SmartPlayer.java* Created by daniusdk.com* WeChat: xinsheng120*/ private void toggleRecording() {if (isRecording) {stopRecording();} else {startRecording();} }private void startRecording() {if (!isPlaying) {InitAndSetConfig();}ConfigRecorderParam();int ret libPlayer.SmartPlayerStartRecorder(playerHandle);if (ret ! 0) {Log.e(TAG, Failed to start recorder.);return;}updateUIOnRecording(true);isRecording true;btnStartStopRecorder.setText(停止录像); }private void stopRecording() {int ret libPlayer.SmartPlayerStopRecorder(playerHandle);if (ret ! 0) {Log.e(TAG, Call SmartPlayerStopRecorder failed..);return;}if (!isPlaying) {libPlayer.SmartPlayerClose(playerHandle);playerHandle 0;}updateUIOnRecording(false);isRecording false;btnStartStopRecorder.setText(开始录像); }private void updateUIOnRecording(boolean recording) {boolean enable !recording;btnPopInputUrl.setEnabled(enable);btnPopInputKey.setEnabled(enable);btnSetPlayBuffer.setEnabled(enable);btnFastStartup.setEnabled(enable);btnRecorderMgr.setEnabled(enable);btnReviewSnapshots.setEnabled(enable); } 录制完成后我们会有录像完成回调事件上来并给出来当前录像文件完整的路径和文件名如下代码不分场景下开发者会将这些录像文件从临时目录如 /sdcard/daniulive/record_temp/移动至正式目录如 /sdcard/daniulive/record_saved/进行统一管理。 class PlayerEventHandleV2 implements NTSmartEventCallbackV2 {Overridepublic void onNTSmartEventCallbackV2(long handle, int id, long param1,long param2, String param3, String param4, Object param5) {String player_event ;switch (id) {case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_STARTED:player_event 开始..;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_CONNECTING:player_event 连接中..;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_CONNECTION_FAILED:player_event 连接失败..;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_CONNECTED:player_event 连接成功..;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_DISCONNECTED:player_event 连接断开..;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_STOP:player_event 停止播放..;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_RESOLUTION_INFO:player_event 分辨率信息: width: param1 , height: param2;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_NO_MEDIADATA_RECEIVED:player_event 收不到媒体数据可能是url错误..;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_SWITCH_URL:player_event 切换播放URL..;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_CAPTURE_IMAGE:player_event 快照: param1 路径 param3;if (param1 0)player_event player_event , 截取快照成功;elseplayer_event player_event , 截取快照失败;if (param4 ! null !param4.isEmpty())player_event (, user data: param4);break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_RECORDER_START_NEW_FILE:player_event [record]开始一个新的录像文件 : param3;break;case NTSmartEventID.EVENT_DANIULIVE_ERC_PLAYER_ONE_RECORDER_FILE_FINISHED:player_event [record]已生成一个录像文件 : param3;break;....}if (player_event.length() 0) {Log.i(TAG, player_event);Message message new Message();message.what PLAYER_EVENT_MSG;message.obj player_event;handler.sendMessage(message);}} } 然而许多开发者默认采用如下做法 copyFile(srcFile, destFile); srcFile.delete(); 这种“复制删除”的方式虽然通用但在移动大文件如 500MB~2GB的场景下效率极低尤其在老旧设备或外部 SD 卡路径下会明显影响用户体验。 ⚠️ 问题分析为什么“复制删除”效率低 涉及完整 I/O 流读写数据要从磁盘读取再写入新位置占用 CPU 与 I/O 资源 受存储介质性能限制在 SD 卡、低端闪存等设备上写入速度可能低于 10MB/s 额外耗电和发热复制大文件过程中系统资源高负荷运转 浪费时间1GB 文件复制可能需要 5~30 秒。 ✅ 推荐方案renameTo() 同分区目录规划 Android 文件系统基于 Linux中提供的 rename() 系统调用在同一分区下移动文件是极快的 ✅ 不复制文件内容 ✅ 实质仅修改文件路径元数据inode 表 ✅ 即使是 10GB 文件也能 毫秒级完成 示例代码重命名即移动 renameTo() 的适用条件 条件是否满足✅ 源文件和目标路径必须在同一挂载点/分区是✅ 目标路径必须存在且不会自动创建目录否需手动建目录✅ 文件或文件夹不能被占用如未关闭文件流是 判断是否在同一分区可通过比较文件路径的 StatFs.getBlockDeviceName() 或直接在应用初始化阶段固定路径规划确保一致性。 工具函数封装推荐使用 File srcFile new File(/sdcard/daniulive/record_temp/video_20250601_0001.mp4); File destFile new File(/sdcard/daniulive/record_saved/video_20250601_0001.mp4);boolean success srcFile.renameTo(destFile);if (success) {Log.i(MoveFile, 录像文件移动成功); } else {Log.e(MoveFile, 移动失败可能是跨分区); }实践建议 规划目录结构确保录像临时目录和目标目录位于 /sdcard/ 下或 App 内同一逻辑存储如 getExternalFilesDir() 避免频繁复制大文件除非是跨分区或外部存储之间否则优先考虑 renameTo() 跨分区时可异步处理若确实需要跨分区复制可在后台线程执行并展示进度 结合文件状态管理例如录像过程中命名为 .tmp移动后改为正式 .mp4更利于调试与维护。 性能对比测试实机数据 操作类型文件大小操作耗时Pixel 5, 内存存储renameTo()同分区1GB~10mscopy delete1GB~3.5秒renameTo()100个文件共1GB~300mscopy delete100文件共1GB~7秒 ✅ 总结 场景推荐操作同分区移动renameTo()跨分区移动复制删除建议异步多文件批量 rename 操作 合理目录管理 通过合理使用 renameTo() 方法结合大牛直播SDK录像输出路径规划能极大提升文件移动效率与用户体验是 文件管理逻辑不可忽视的性能优化点。 附加完整目录管理实用类 /* FileMover.java* Created by daniusdk.com* WeChat: xinsheng120*/ import android.os.Build; import android.os.StatFs; import android.util.Log;import java.io.*;public class FileMover {public interface MoveCallback {void onSuccess(File src, File dest);void onFailure(File src, File dest, String reason);}/*** 高效移动文件同分区使用 renameTo跨分区复制再删除** param srcFile 原文件* param destDir 目标目录必须为目录* param overwrite 是否覆盖同名文件* param backupSource 是否在跨分区复制时保留源文件* param callback 操作回调*/public static void moveFile(File srcFile, File destDir, boolean overwrite, boolean backupSource, MoveCallback callback) {if (srcFile null || !srcFile.exists() || !srcFile.isFile()) {if (callback ! null) callback.onFailure(srcFile, null, 源文件无效);return;}if (destDir null || (!destDir.exists() !destDir.mkdirs())) {if (callback ! null) callback.onFailure(srcFile, null, 目标目录创建失败);return;}File destFile new File(destDir, srcFile.getName());// 同名处理if (destFile.exists()) {if (overwrite) {destFile.delete();} else {destFile getUniqueFile(destDir, srcFile.getName());}}boolean sameVolume isSameVolume(srcFile, destDir);try {boolean success;if (sameVolume) {success srcFile.renameTo(destFile);} else {success copyFile(srcFile, destFile);if (success !backupSource) {success srcFile.delete();}}if (success) {if (callback ! null) callback.onSuccess(srcFile, destFile);} else {if (callback ! null) callback.onFailure(srcFile, destFile, 文件移动失败);}} catch (Exception e) {if (callback ! null) callback.onFailure(srcFile, destFile, 异常: e.getMessage());}}private static File getUniqueFile(File dir, String fileName) {File newFile new File(dir, fileName);int count 1;String name fileName;String baseName name;String ext ;int dotIndex name.lastIndexOf(.);if (dotIndex 0) {baseName name.substring(0, dotIndex);ext name.substring(dotIndex);}while (newFile.exists()) {newFile new File(dir, baseName _ count ext);count;}return newFile;}private static boolean isSameVolume(File file1, File file2) {try {StatFs stat1 new StatFs(file1.getAbsolutePath());StatFs stat2 new StatFs(file2.getAbsolutePath());if (Build.VERSION.SDK_INT Build.VERSION_CODES.JELLY_BEAN_MR2) {return stat1.getBlockSizeLong() stat2.getBlockSizeLong() stat1.getBlockCountLong() stat2.getBlockCountLong();} else {return stat1.getBlockSize() stat2.getBlockSize() stat1.getBlockCount() stat2.getBlockCount();}} catch (Exception e) {return false;}}private static boolean copyFile(File src, File dest) {try (InputStream in new FileInputStream(src);OutputStream out new FileOutputStream(dest)) {byte[] buffer new byte[8192];int length;while ((length in.read(buffer)) 0) {out.write(buffer, 0, length);}out.flush();return true;} catch (IOException e) {e.printStackTrace();return false;}} }调用示例如下 File src new File(/sdcard/daniulive/record_temp/20250614_001.mp4); File destDir new File(/sdcard/daniulive/record_saved);FileMover.moveFile(src, destDir, true, false, new FileMover.MoveCallback() {Overridepublic void onSuccess(File src, File dest) {Log.i(MoveFile, 移动成功: dest.getAbsolutePath());}Overridepublic void onFailure(File src, File dest, String reason) {Log.e(MoveFile, 移动失败: reason);} });
http://www.hkea.cn/news/14475913/

相关文章:

  • 仿制手机网站教程莱芜建设局网站
  • 花店网站模板免费下载怎样做京东网站
  • 租用服务器一般是谁帮助维护网站安全深圳宝安网站建设公司
  • 汉口制作网站哈密网站建设公司哪家专业
  • 字体网站零基础学做网站难吗
  • 自己注册了个域名想做一个网站吗免费网络咨询免费建站
  • 网站开发的知识友谊路街道网站建设
  • 戒赌网站怎么做班级网站怎样做
  • ps网站首页效果图实例网站建设寻找可以途径
  • 做旅行的网站龙泉市住房和城乡建设局网站
  • 广州我网站制作中国制造交易网登录
  • 链家网站开发手机app应用开发公司
  • 个人简历网站开发WordPress审核评论插件
  • 青岛 机械 中企动力提供网站建设专业做app下载网站
  • 如何在电商平台做好企业网站推广一般门户网站
  • 做网站苏州上海袜网站建设
  • 成都做网站设计哪家便宜做仪表行业推广有哪些网站
  • 网站权重怎么做的做一个游戏小程序需要多少钱
  • 类似于众人帮的做任务赚佣金网站泗县口碑营销互联网营销推荐咨询
  • 网页设计个人网站设计wordpress 媒体库不显示图片
  • 专做品牌的网站wordpress自定义不了
  • 男女直接做的视频网站免费观看wordpress输出外部文章
  • 做网站买空间韶关住房和城乡建设局网站
  • 网站php源码顺德大良网站建设
  • 国家电网公司交流建设分公司网站郑州网站制作公司汉狮
  • 网站免费正能量直接进入老狼信息泰安网络推广联系昔年下拉
  • 哪些网站做机票酒店有优势企业邮箱免费版开通
  • fizz wordpress优化营商环境存在问题及整改措施
  • 四川城乡住房建设厅官方网站牛杂网这类网站怎么做的
  • wordpress 多站点 主题重庆勘察设计协会网站