草庐IT

android - 以编程方式暂停媒体记录器。来自三星银河的 Camera.apk 有 `this.mMediaRecorder.pause();` 在我的代码中不起作用

coder 2023-12-22 原文

现在,我使用 mp4parser 库创建了一个库来连接 2 个视频。 有了这个,我可以暂停和恢复录制视频(在录制第二个视频后,它将它附加到第一个视频)。 现在,我的老板告诉我做一个包装器,并将其用于不支持暂停视频的硬件的手机。对于具有该功能的手机(三星 Galaxy S2 和三星 Galaxy S1 可以使用其相机应用程序暂停视频录制),我需要在没有库的情况下执行此操作,因此速度会很快。 如果在媒体记录器状态图上看到,我该如何实现这个 native ,http://developer.android.com/reference/android/media/MediaRecorder.html , 没有暂停状态?

我已经从 Samsung Galaxe Ace 反编译了 Camera.apk 应用程序,代码在 CamcorderEngine.class 中有一个这样的方法:

public void doPauseVideoRecordingSync()
{
Log.v("CamcorderEngine", "doPauseVideoRecordingSync");
if (this.mMediaRecorder == null)
{
  Log.e("CamcorderEngine", "MediaRecorder is not initialized.");
  return;
}
if (!this.mMediaRecorderRecording)
{
  Log.e("CamcorderEngine", "Recording is not started yet.");
  return;
}
try
{
  this.mMediaRecorder.pause();
  enableAlertSound();
  return;
}
catch (RuntimeException localRuntimeException)
{
  Log.e("CamcorderEngine", "Could not pause media recorder. ", localRuntimeException);
  enableAlertSound();
}

如果我在我的代码中尝试 this.mMediaRecorder.pause();,它不起作用,这怎么可能,它们使用相同的导入 (android.media.MediaRecorder)。他们是否在系统级别重写了整个代码?

是否可以获取第二个视频的输入流(在录制时),并将此数据直接附加到我的第一个视频中? 对于我的连接方法,我使用了 2 个参数(2 个视频,它们都是 FileInputStream),是否可以从录制函数中获取 InputStream 并将其作为第二个参数传递?

最佳答案

If I try this.mMediaRecorder.pause();

MediaRecorder 类没有pause() 函数,因此很明显在这个特定设备上有一个自定义的MediaRecorder 类。这并不罕见,因为 OEM 唯一需要做的就是通过设备上的“安卓兼容性测试”;添加功能没有限制。

Is it possible to take the input stream of the second video (while recording it), and directly append this data to my first video?

我不确定您是否可以这样做,因为视频流是编码数据(编解码器 header 、关键帧等),我认为仅将 2 个流合并为 1 个文件不会产生有效的视频文件.

基本上你可以做什么:

  1. 从相机预览表面获取原始数据图像(参见 Camera.setPreviewCallback())
  2. 使用 android.media.MediaCodec 对视频进行编码
  3. 然后使用 OutputFilStream 写入文件。

这将为您提供所需的灵 active ,因为在这种情况下,您在应用中决定哪些帧进入编码器,哪些不进入编码器。 但是,对于您的特定项目来说,这可能有点矫枉过正,并且可能会出现一些性能问题。

附言。哦,顺便说一句,试着看看 MediaMuxer - 也许它也可以帮助你。 developer.android.com/reference/android/media/MediaMuxer.html

关于android - 以编程方式暂停媒体记录器。来自三星银河的 Camera.apk 有 `this.mMediaRecorder.pause();` 在我的代码中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15761892/

有关android - 以编程方式暂停媒体记录器。来自三星银河的 Camera.apk 有 `this.mMediaRecorder.pause();` 在我的代码中不起作用的更多相关文章

  1. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  2. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  3. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  4. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  5. ruby-on-rails - 事件记录 : Select max of limit - 2

    我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).

  6. Ruby 守护进程导致 ActiveRecord 记录器 IOError - 2

    我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame

  7. ruby-on-rails - 在 Rails 中更高效地查找或创建多条记录 - 2

    我有一个应用需要发送用户事件邀请。当用户邀请friend(用户)参加事件时,如果尚不存在将用户连接到该事件的新记录,则会创建该记录。我的模型由用户、事件和events_user组成。classEventdefinvite(user_id,*args)user_id.eachdo|u|e=EventsUser.find_or_create_by_event_id_and_user_id(self.id,u)e.save!endendend用法Event.first.invite([1,2,3])我不认为以上是完成我的任务的最有效方法。我设想了一种方法,例如Model.find_or_cr

  8. ruby-on-rails - "assigns"在 Ruby on Rails 中有什么作用? - 2

    我目前正在尝试学习RubyonRails和测试框架RSpec。assigns在此RSpec测试中做什么?describe"GETindex"doit"assignsallmymodelas@mymodel"domymodel=Factory(:mymodel)get:indexassigns(:mymodels).shouldeq([mymodel])endend 最佳答案 assigns只是检查您在Controller中设置的实例变量的值。这里检查@mymodels。 关于ruby-o

  9. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  10. ruby - 在模块/类之间共享全局记录器 - 2

    在许多ruby​​类之间共享记录器实例的最佳(正确)方法是什么?现在我只是将记录器创建为全局$logger=Logger.new变量,但我觉得有更好的方法可以在不使用全局变量的情况下执行此操作。如果我有以下内容:moduleFooclassAclassBclassC...classZend在所有类之间共享记录器实例的最佳方式是什么?我是以某种方式在Foo模块中声明/创建记录器还是只是使用全局$logger没问题? 最佳答案 在模块中添加常量:moduleFooLogger=Logger.newclassAclassBclassC..

随机推荐