在关于HTTP流媒体的Railscasts中,一些评论者已经确认可以使用Apache + Passenger进行HTTP流媒体,但奇怪的是我无法通过Google找到任何指令.
Rails文档也没有提供任何说明.所有详细说明到处都是Unicorn.我绝不是唯一一个想通过Apache和Passenger进行HTTP流媒体的人.请帮忙.
我正在使用Twitter流API运行EventMachine流程.如果流的内容不频繁,我总是有问题.
这是脚本的最小版本:
require 'rubygems'
require 'eventmachine'
require 'em-http'
require 'json'
usage = "#{$0} <user> <password> <track>"
abort usage unless user = ARGV.shift
abort usage unless password = ARGV.shift
abort usage unless keywords= ARGV.shift
def startIt(user,password,keywords)
EventMachine.run do
http = EventMachine::HttpRequest.new("https://stream.twitter.com/1/statuses/filter.json",{:port=>443}).post(
:head =>{ 'Authorization' => [ user, password ] } ,
:body =>{"track"=>keywords},
:keepalive=>true,
:timeout=>-1)
buffer = ""
http.stream do |chunk|
buffer += chunk
while line = buffer.slice!(/.+\r?\n/)
if line.length>5
tweet=JSON.parse(line)
puts Time.new.to_s+"#{tweet['user']['screen_name']}: #{tweet['text']}"
end
end
end
http.errback {
puts Time.new.to_s+"Error: …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用HTTP Live Streaming技术播放视频的应用程序.
为此我使用AVPlayer init,如下所示:
[[AVPlayer alloc] initWithURL:[NSURL URLWithString:VIDEO_URL]];
然后我使用self.player.currentItem.loadedTimeRanges我的自定义视图检查缓冲区的状态并显示该范围.
问题是当在加载的区域中倒带时[self.player seekToTime:timeToSeek
toleranceBefore:kCMTimeZero
toleranceAfter:kCMTimeZero];,加载视频就像它不在缓冲区中一样.
我想使用JW播放器在以下平台上传输VOD/Live,但不确定哪种流媒体最适合每个平台
我知道RTMP不会在移动设备上播放.
那么我是否需要针对桌面和移动设备的HLS进行RTMP,或者我是否只能在所有3个平台上使用HLS流?
或者还有其他方法来有效地传输VOD/Live吗?
我正在使用akka-http一个请求发送回chunked响应的http服务.这就是代码的相关位置:
val httpRequest: HttpRequest = //build the request
val request = Http().singleRequest(httpRequest)
request.flatMap { response =>
response.entity.dataBytes.runForeach { chunk =>
println("-----")
println(chunk.utf8String)
}
}
Run Code Online (Sandbox Code Playgroud)
并且命令行中生成的输出如下所示:
-----
{"data":
-----
"some text"}
-----
{"data":
-----
"this is a longer
-----
text"}
-----
{"data": "txt"}
-----
...
Run Code Online (Sandbox Code Playgroud)
逻辑数据 - 在这种情况下json以行尾符号结束\r\n,但问题是,json并不总是适合单个http响应块,如上例中清晰可见.
我的问题是 - 如何将传入的chunked数据连接成完整的jsons,以便生成的容器类型仍然保留Source[Out,M1]或Flow[In,Out,M2]?我想遵循的思想akka-stream.
更新:值得一提的是,响应是无止境的,聚合必须是实时完成的
从Flash 10.1开始,他们添加了通过appendBytes方法将字节添加到NetStream对象的功能(在此处描述http://www.bytearray.org/?p=1689).这一新增的主要原因是Adobe最终支持视频的HTTP流媒体.这很棒,但您似乎需要使用Adobe Media Streaming Server(http://www.adobe.com/products/httpdynamicstreaming/)从现有视频中创建正确的视频块,以实现流畅的流式传输.
我曾经试图在我交换NetStream对象的过程中做一个被黑客攻击的HTTP流媒体版本(类似于http://video.leizhu.com/video.html),但是这些块之间总会暂时停顿一下.使用新的appendBytes,我尝试使用前一个站点的两段视频进行快速模拟,但即便如此,跳过仍然存在.
有没有人知道如何形成两个连续的.FLV文件,以便NetStream对象上的appendBytes方法创建一个漂亮的平滑视频,而段之间没有明显的跳过?
受到HTTP Streaming上RailsCast的启发,我决定在我的服务器上打开它.但是,listen 3000 :tcp_nopush => falseRyan建议添加到我的线路unicorn.rb并不适合Heroku(它们不允许您指定端口).Heroku是否支持流媒体,如何启用它?
苦苦寻找遇到类似问题或任何类似问题的人.
我目前正在使用具有GZip要求的http(json)流,我遇到了从发送数据到reader.ReadLine()读取数据时的延迟.有人向我建议,这可能与解码保留缓冲区中的数据有关?
这就是我目前的情况,它除了延迟之外还可以正常工作.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endPoint);
request.Method = "GET";
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(username, password);
request.AutomaticDecompression = DecompressionMethods.GZip;
request.ContentType = "application/json";
request.Accept = "application/json";
request.Timeout = 30;
request.BeginGetResponse(AsyncCallback, request);
Run Code Online (Sandbox Code Playgroud)
然后在AsyncCallback方法中我有:
HttpWebRequest request = result.AsyncState as HttpWebRequest;
using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result))
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (string.IsNullOrWhiteSpace(line)) continue;
Console.WriteLine(line);
}
}
Run Code Online (Sandbox Code Playgroud)
它只是坐下来reader.Readline()直到收到更多的数据,然后甚至阻止其中一些.还有收到的保持活动的新行,当它决定阅读某些内容时,通常会立即读出这些新行.
我已经测试了运行curl命令并行运行的流,curl命令完全接收和解压缩数据.
任何见解都会很棒.谢谢,
担
编辑 在streamreader上使用缓冲区大小没有运气. …
由于缺少一个更好的例子,假设我想用Rust编写一个简单的客户端,可以建立连接并从Twitter的HTTP Streaming API接收数据.这可能吗?我一直在关注Iron和Nickel,这似乎是一个很好的框架,但我不认为他们有这个功能呢?
我有一个(GET)端点,它以块(Transfer-Encoding: chunked)的形式发送数据。数据经过JSON编码并逐行发送。
有没有办法在JavaScript中(或使用某些JavaScript库)以异步方式使用此终结点发送的数据?
明确地说,我知道如何执行异步操作GET,但是我希望GET请求不等待整个数据传输,而是在到达时逐行读取数据。例如,在执行以下操作时:
curl http://localhost:8081/numbers
Run Code Online (Sandbox Code Playgroud)
当下面的行可用时,将逐行显示(我制作的示例服务器在发送第二行之前等待一秒钟)。
{"age":1,"name":"John"}
{"age":2,"name":"John"}
{"age":3,"name":"John"}
{"age":4,"name":"John"}
Run Code Online (Sandbox Code Playgroud)
我想curl在浏览器中重现相同的行为。我不想让用户等到所有数据变得可用以显示任何内容。
http-streaming ×10
http ×2
ios ×2
actionscript ×1
akka ×1
akka-http ×1
akka-stream ×1
android ×1
apache ×1
asynchronous ×1
avfoundation ×1
c# ×1
eventmachine ×1
flash ×1
gzip ×1
heroku ×1
javascript ×1
jwplayer ×1
netstream ×1
passenger ×1
rtmp ×1
ruby ×1
rust ×1
scala ×1
twitter ×1
unicorn ×1
video ×1