我正在开发和Android应用程序.我正在使用改进(使用OkClient)进行api请求和使用Robolectric进行测试.我的api看起来像这样:
@GET("/v1/book/{bookId}") Observable<Book> getBook(@Path("bookId") int bookId);
Run Code Online (Sandbox Code Playgroud)
仅仅对于Robolectric我强迫api调用是同步的.restAdapter构建器如下所示:
RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint(environment.getServerEndpoint())
.setClient(new OkClient(client))
.setExecutors(new ImmediateExecutor(), null)
.setErrorHandler(new ErrorHandler())
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
// Always ask for JSON data
request.addHeader("Accept", "application/json");
request.addHeader("Content-Type", "application/json");
}
});
public class ImmediateExecutor implements Executor {
@Override public void execute(Runnable command) {
command.run();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个简单的测试,如下所示:
API.getBook(1).subscribe();
API.getBook(2).subscribe();
Run Code Online (Sandbox Code Playgroud)
Restadapter是使用构建器创建的,以及带有它的API对象(restadapter.create(...)).我省略了它,因为它是微不足道的.
第一个工作没有问题,但第二个应该是相同的抛出异常:
java.io.InterruptedIOException
at okio.Timeout.throwIfReached(Timeout.java:146)
at okio.Okio$1.write(Okio.java:75)
at okio.AsyncTimeout$1.write(AsyncTimeout.java:155)
at okio.RealBufferedSink.flush(RealBufferedSink.java:201)
at com.squareup.okhttp.internal.http.HttpConnection.flush(HttpConnection.java:140)
at com.squareup.okhttp.internal.http.HttpTransport.finishRequest(HttpTransport.java:52)
at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:828)
at com.squareup.okhttp.internal.http.HttpEngine.access$200(HttpEngine.java:95)
at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:823)
at …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,该应用程序可以流式传输屏幕内容并将其通过 rtsp 流式传输。我正在使用 MediaCodec 和 VirtualDisplay。我遇到的问题是,当屏幕保持静态时,不会通过网络发送数据(不会生成新帧)。10 秒后,客户端断开连接。我看过一些帖子,人们说他们使用 KEY_REPEAT_PREVIOUS_FRAME_AFTER 来解决这个问题,但这个值似乎被忽略了。
这是我正在使用的代码:
MediaFormat format = MediaFormat.createVideoFormat(VIDEO_MIME_TYPE, VIDEO_WIDTH, VIDEO_HEIGHT);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
format.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
format.setInteger(MediaFormat.KEY_CAPTURE_RATE, FRAME_RATE);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1); // 1 seconds between I-frames
format.setLong(MediaFormat.KEY_REPEAT_PREVIOUS_FRAME_AFTER, 1000000L / (long) FRAME_RATE);
MediaCodec mediaCodec = MediaCodec.createEncoderByType(VIDEO_MIME_TYPE);
mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mediaCodecSurface = mediaCodec.createInputSurface();
mediaCodec.start();
Run Code Online (Sandbox Code Playgroud)
FRAME_RATE 为 30,VIDEO_MIME_TYPE 为 video/avc,BIT_RATE 为 1800000,VIDEO_WIDTH 为 1280,VIDEO_HEIGHT 为 720。
我将 mediaCodecSurface 传递给 VirtualDisplay。
有什么建议吗?
我量角器测试有问题。它正在工作,但是现在(甚至认为没有任何变化)它没有。测试只是打开应用程序(Web应用程序),然后单击按钮下载图像。下载应立即开始。问题是,下载事件后的下一条指令将引发异常:失败:无法访问chrome。我正在使用最新的chrome和chrome驱动程序版本。
量角器的Capabilites部分如下所示:
capabilities: {
browserName: 'chrome',
loggingPrefs: { browser: 'ALL' },
chromeOptions: {
args: ['--headless', '--window-size=1240,780'],
},
}
Run Code Online (Sandbox Code Playgroud)
我正在阅读有关使用DevTools以无头模式(Page.setDownloadBehavior)启用下载的信息,但到目前为止还算不上什么。
有人也有这个问题吗?任何线索如何解决它?
谢谢。