我有这样的资源
/entities # GET, POST
/entities/<id> # GET, PUT, DELETE
Run Code Online (Sandbox Code Playgroud)
GET/entities获取所有实体的列表.现在我想轮询更新.单个实体的情况很简单:
GET /entities/2
If-Modified-Since: <http date>
Run Code Online (Sandbox Code Playgroud)
这个清单很棘手.我希望响应是一个实体列表,自给定时间点以来更新或创建.我直观地使用了
GET /entities
Range: after <http date>
Run Code Online (Sandbox Code Playgroud)
这是HTTP规范的有效请求http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2.但该规范还要求一个206 Partial Content
响应,其中必须包含一个Content-Range
标题.甲Content-Range
头,反过来,强制要求中指定的字节范围http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16.这对我的用例来说显然非常不方便.
您如何通过HTTP请求语义范围?
编辑 Updated code with solution
我需要将amr转码为mp3,所以我在gstreamer-java中编写了一个gstreamer管道.它看起来像这样:
src ! amrparse ! amrnbdec ! lamemp3enc ! sink
Run Code Online (Sandbox Code Playgroud)
(实际上是用java API构建的),我开始使用转码
Bus.connect(EOS, fn(){Gst.quit();});
setState(PLAYING);
Gst.main();
Run Code Online (Sandbox Code Playgroud)
它工作正常,除了它花费的时间等于音频长度,这是不可接受的.相当于
gst-launch
Run Code Online (Sandbox Code Playgroud)
以机器速度转码.
那么我如何设置管道,以获得机器速度转码?
对于那些能够熟练使用clojure的人来说,这里是完整的资源
(ns audio
(:import [org.gstreamer Gst Pipeline Bin Element ElementFactory State
StateChangeReturn Bus$EOS Bus$ERROR Bus$STATE_CHANGED]
[org.gstreamer.io InputStreamSrc OutputStreamSink]
[java.io InputStream OutputStream])
(:use clojure.contrib.logging))
(Gst/init)
(defn transcode [^InputStream in ^OutputStream out]
(let [id (gensym (quote transcode))
src (InputStreamSrc. in (str "in stream " id))
dec0 (ElementFactory/make "amrparse" (str "amr parser " id))
dec1 (ElementFactory/make "amrnbdec" (str …
Run Code Online (Sandbox Code Playgroud)