Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Actionscript 3 同步两个AS3网络流_Actionscript 3_Audio Recording_Rtmp_Netstream_Wowza - Fatal编程技术网

Actionscript 3 同步两个AS3网络流

Actionscript 3 同步两个AS3网络流,actionscript-3,audio-recording,rtmp,netstream,wowza,Actionscript 3,Audio Recording,Rtmp,Netstream,Wowza,我正在编写一个应用程序,需要在播放背景曲目时录制音频流。我有这个工作,但有一个不一致的差距之间的播放和记录开始 我不知道我是否能做些什么来让每次同步都完美,所以我一直在尝试跟踪每个流开始的时间,以便计算延迟并在服务器端进行调整。这也是一个挑战,因为在连接启动时似乎没有发送任何事件(据我所知)。我尝试过使用各种属性,如流的缓冲区大小等 我现在在想,由于我录制的音频只有单声道,我可能可以在第二个立体声音轨上放置某种“控制信号”,我可以用它来确定声音何时开始录制(或者将整个背景音轨粘贴在该频道中,这样

我正在编写一个应用程序,需要在播放背景曲目时录制音频流。我有这个工作,但有一个不一致的差距之间的播放和记录开始

我不知道我是否能做些什么来让每次同步都完美,所以我一直在尝试跟踪每个流开始的时间,以便计算延迟并在服务器端进行调整。这也是一个挑战,因为在连接启动时似乎没有发送任何事件(据我所知)。我尝试过使用各种属性,如流的缓冲区大小等

我现在在想,由于我录制的音频只有单声道,我可能可以在第二个立体声音轨上放置某种“控制信号”,我可以用它来确定声音何时开始录制(或者将整个背景音轨粘贴在该频道中,这样我就可以同步它们)。这就给我留下了一个新问题,就是如何将这种声音正确地注入到NetStream中


如果有人知道这些想法中的任何一个是否有效,如何执行它们,或者有其他选择,那将是非常有帮助的!在这个问题上已经研究了一段时间

唯一想到的是尝试使用元数据,flash媒体流支持元数据和onMetaData回调。我假设您正在使用FlashMediaServer来录制输入和输出的音频。如果在将音频流传回服务器时使用此方法,则可以将收听音频曲目的播放头时间戳放在其中,因此当您将2个流传回服务器时,可以将它们正确地多路复用在一起。您还可以尝试使用元数据对流式传输到客户端的音频进行编码,并尝试使用onMetaData对其进行同步。我不知道如何做到这一点,但第二种方法是在音频返回时尝试将两个流组合在一起,这样以后就不需要对它们进行多路复用,或者将其附加到带有两个音频曲目的空白视频流中…

唯一想到的是尝试使用元数据,flash媒体流支持元数据和onMetaData回调。我假设您正在使用FlashMediaServer来录制输入和输出的音频。如果在将音频流传回服务器时使用此方法,则可以将收听音频曲目的播放头时间戳放在其中,因此当您将2个流传回服务器时,可以将它们正确地多路复用在一起。您还可以尝试使用元数据对流式传输到客户端的音频进行编码,并尝试使用onMetaData对其进行同步。我不知道如何做到这一点,但第二种方法是在音频返回时尝试将两个流合并在一起,这样以后就不需要对它们进行多路复用,或者将其附加到带有两个音频曲目的空白视频流中…

如果要将某些内容注入到NetStream。。。像声音一样复杂。。。我想在这里最好使用套接字。您将直接读取字节。有可能是NetStream上有压缩,因此发送的数据不是原始声音数据-需要一些用于解压缩编解码器的类。最终获得原始声音数据时,使用Socket.readUnsignedByte()或Socket.readFloat()将输入添加到其中,然后使用Socket.writeByte()或Socket.writeFloat()写回修改后的数据

这是另一种将背部注入音频的方法


对于同步,它实际上非常简单。即使数据可能不会立即发送,但有一样东西仍然保持不变——时间。所以,当用户的音频结束时,只需将其混音,不需要任何其他内容,即可返回到后声道-时间应保持不变

如果用户的互联网下载速度较慢,因此他的回溯会出现不必要的中断-请检查SWF中的数据缓冲是否足以添加下一个声音缓冲区(如果我记得正确,通常是4096字节)。如果是,继续播放用户的音频


如果没有,请不要流式传输,并在数据恢复时立即启动。

如果要将某些内容注入NetStream。。。像声音一样复杂。。。我想在这里最好使用套接字。您将直接读取字节。有可能是NetStream上有压缩,因此发送的数据不是原始声音数据-需要一些用于解压缩编解码器的类。最终获得原始声音数据时,使用Socket.readUnsignedByte()或Socket.readFloat()将输入添加到其中,然后使用Socket.writeByte()或Socket.writeFloat()写回修改后的数据

这是另一种将背部注入音频的方法


对于同步,它实际上非常简单。即使数据可能不会立即发送,但有一样东西仍然保持不变——时间。所以,当用户的音频结束时,只需将其混音,不需要任何其他内容,即可返回到后声道-时间应保持不变

如果用户的互联网下载速度较慢,因此他的回溯会出现不必要的中断-请检查SWF中的数据缓冲是否足以添加下一个声音缓冲区(如果我记得正确,通常是4096字节)。如果是,继续播放用户的音频


如果没有,就不要流,并在数据恢复后立即启动。

根据我的经验,NetStream是Flash最不准确、最肮脏的功能之一(NetStream:play2?!!),顺便说一句,看到Flash的主要用途可能是视频播放,这是非常讽刺的。 试图以可靠的方式将其与任何其他内容同步是非常困难的。。。事件和状态不是很直截了当,而且有多个问题可能会破坏您的同步

不过幸运的是,netStream.time将非常准确地告诉您当前播放头的位置,因此您最终可以使用它来确定开始时间、延迟、丢失的帧等。。。请注意,确定实际开始时间有点棘手。当您开始加载NetStream时