Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将数据从一个AsyncTask发送到另一个AsyncTask?[视频系统]_Android_Audio_Video_Android Asynctask_Mediamuxer - Fatal编程技术网

Android 如何将数据从一个AsyncTask发送到另一个AsyncTask?[视频系统]

Android 如何将数据从一个AsyncTask发送到另一个AsyncTask?[视频系统],android,audio,video,android-asynctask,mediamuxer,Android,Audio,Video,Android Asynctask,Mediamuxer,我试图分别捕获音频数据和视频数据,并将它们编码/多路复用到一个.mp4文件中。对于音频录制和视频编码都是耗时的工作,我为它们打开了两个异步任务 问题是,我需要将音频录制任务的数据发送到视频编码任务。但是我没有找到关于Asyntask之间通信的东西 谁能给我一个提示吗?谢谢大家! 不知道异步任务之间定义的任何通信机制。但是其中一个异步任务可以写入它需要传递给公共对象的数据,而另一个异步任务可以定期轮询它。您可以在第一个异步任务的onPostExecute(结果)中启动第二个异步任务MediaCod

我试图分别捕获音频数据和视频数据,并将它们编码/多路复用到一个.mp4文件中。对于音频录制和视频编码都是耗时的工作,我为它们打开了两个异步任务

问题是,我需要将音频录制任务的数据发送到视频编码任务。但是我没有找到关于Asyntask之间通信的东西


谁能给我一个提示吗?谢谢大家!

不知道异步任务之间定义的任何通信机制。但是其中一个异步任务可以写入它需要传递给公共对象的数据,而另一个异步任务可以定期轮询它。

您可以在第一个异步任务的onPostExecute(结果)中启动第二个异步任务

MediaCodec API已经是异步的,您可以用一种方法提交输入数据,并用另一种方法检查数据准备情况

谢谢@user2689294我检查过,它似乎应该可以工作,因为它可以将数据返回到主线程。但是数据是按帧刷新的,你知道怎么解决这个问题吗?谢谢!但如果我想对视频和音频进行编码,我需要为MediaCodec创建两个实例。他们怎么可能是异步的?音频编码是在CPU上完成的(我不知道有任何设备使用硬件音频编码器),视频编码是在GPU上完成的,所以即使在这里他们也没有竞争。此外,所有现代芯片都有多个内核,因此它们可以并行执行多个任务。异步意味着您将任务提交给编解码器,并且所有作业都在内部线程中完成,因此您的呼叫不会阻塞,并且您可以在应用程序中执行其他一些工作,您只需要在内部作业完成时从编解码器获取结果=例如帧编码,编解码器在出列输出时返回有效结果谢谢。所以在这种情况下,我可以使用MediaCodec对音频进行编码。然后我向MediaMuxer提供音频和视频,只要我异步提供,效果就会很好。对吗?是的,请考虑使用同步对象,以避免同时向MuxER发送音频和视频。我不确定muxer是否是线程安全的,我认为muxer应该创建为capturer类(用于视频和音频)成员。可以从onPreview和audioRecorder线程调用write