小编Sjo*_*eel的帖子

如何使用WASAPI共享模式获得低于10ms的延迟?

根据Microsoft的说法,从Windows 10开始,使用共享模式WASAPI的应用程序可以请求小于10毫秒的缓冲区大小(请参阅https://msdn.microsoft.com/en-us/library/windows/hardware/mt298187%28v=vs. 85%29.aspx).

根据这篇文章,实现如此低的延迟需要一些驱动程序更新,我做了.使用独占模式渲染和捕获流,我测量了大约13ms的总往返延迟(使用硬件环回电缆).这告诉我,至少有一个端点成功实现了<10ms的延迟.(这个假设是正确的吗?)

文章提到应用程序可以使用新IAudioClient3界面查询Windows音频引擎使用的最小缓冲区大小IAudioClient3::GetSharedModeEnginePeriod().但是,此功能总是在我的系统上返回10ms,并且任何尝试使用任一IAudioClient::Initialize()IAudioClient3::InitializeSharedAudioStream()低于10ms的周期初始化音频流总是会导致AUDCLNT_E_INVALID_DEVICE_PERIOD.

为了确保,我还禁用了音频驱动程序中的任何效果处理.我错过了什么?甚至可以从共享模式获得低延迟?请参阅下面的示例代码.

#include <windows.h>
#include <atlbase.h>
#include <mmdeviceapi.h>
#include <audioclient.h>
#include <iostream>

#define VERIFY(hr) do {                                    \
  auto temp = (hr);                                        \
  if(FAILED(temp)) {                                       \
    std::cout << "Error: " << #hr << ": " << temp << "\n"; \
    goto error;                                            \
  }                                                        \
} while(0)


int main(int argc, char** argv) {

  HRESULT hr;
  CComPtr<IMMDevice> device;
  AudioClientProperties props;
  CComPtr<IAudioClient> client;
  CComPtr<IAudioClient2> client2;
  CComPtr<IAudioClient3> client3; …
Run Code Online (Sandbox Code Playgroud)

c++ audio audio-processing wasapi

21
推荐指数
1
解决办法
3929
查看次数

可以在WebLogic 12c上使用MyFaces + CDI吗?

我一直试图让这个设置运行几天,但仍然没有运气.这是我一直在使用的测试应用程序:

@Named
@RequestScoped
public class Test {

    private String test = "test";
    public String getTest() { return test; }
    public void setTest(String test) { this.test = test; }
}
Run Code Online (Sandbox Code Playgroud)

在jsf页面中:

<h:outputText value="#{test.test}"/>
Run Code Online (Sandbox Code Playgroud)

在没有MyFaces的情况下运行此示例工作正常(呈现"测试"应该如此),但是当我在WAR文件中部署MyFaces并在weblogic.xml中执行必要的配置时,CDI似乎停止工作(或者至少是JSF和CDI)并且输出html中没有显示任何内容.不过,MyFaces本身似乎没问题.

我的基本配置如下:

  • WebLogic Server 12c(12.1.1.0),补丁应该是最新的,因为我刚刚下载了一个开发版本,只是为了确保
  • MyFaces-2.1.10,部署在WEB-INF/libs中
  • Beans.xml已经到位
  • org.apache.myfaces.webapp.StartupServletContextListener已在web.xml中注册
  • WebLogic配置为使用weblogic.xml来使用MyFaces

Weblogic.xml内容:

<prefer-application-packages>
    <package-name>javax.faces.*</package-name>
    <package-name>com.sun.faces.*</package-name>
    <package-name>com.bea.faces.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
    <resource-name>javax.faces.*</resource-name>
    <resource-name>com.sun.faces.*</resource-name>
    <resource-name>com.bea.faces.*</resource-name>
    <resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
    <resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</resource-name>
</prefer-application-resources>
Run Code Online (Sandbox Code Playgroud)

到目前为止我学到了什么:

  • WL12c配备了Weld 1.1.3,因为它的CDI实现.
  • 我读到某处(不记得在哪里)每当你决定切换JSF实现时,你自己负责集成JSF/CDI.这是真的吗(肯定不希望)?

到目前为止我尝试过的事情:

  • 将MyFaces CODI添加到混合物中,希望它能以某种方式将Weld和MyFaces粘合在一起,但事实并非如此.
  • 将OpenWebBeans替换为Weld作为CDI实现.这似乎最初起作用,但稍后在一些内部sun.reflection包中提供了各种有趣的ClassCastExceptions.无论如何,这是一个我宁愿避免的解决方案.
  • 使用web.xml和faces-config.xml中的各种选项手动触发Weld.这似乎让Weld继续使用各种错误消息来淹没日志.在某种程度上,这些可以通过将weblogic升级到更新的Weld版本来"修复",但每次我这样做时都会遇到下一个错误.再说一遍,我宁愿避开这条路线.

在保留CDI支持的同时在WL12c上使用MyFaces真的很难吗?或者我只是错过了明显的问题?谢谢你的帮助.

jsf myfaces cdi weblogic12c

12
推荐指数
1
解决办法
2761
查看次数

标签 统计

audio ×1

audio-processing ×1

c++ ×1

cdi ×1

jsf ×1

myfaces ×1

wasapi ×1

weblogic12c ×1