在iPhone OS 3中,Apple推出了HTTP Live Streaming,它允许从互联网直播视频.我目前正在运行一个网络摄像头,它将输入到我的服务器中,然后由ffmpeg转换为flv流,然后使用ffserver进行流式传输.有谁知道如何使用ffmpeg和ffserver设置iPhone可以使用的视频流?我应该能够动态地重新编码成任何格式.
我正在使用Android MediaPlayer来播放同时从互联网上下载的MP3文件DownloadManager.我知道MediaPlayer直接流的功能,但我不想使用它:
通过下载和同时从文件流式传输获得的明显优势就是这样,文件被存储并且之后可在本地获得.
MediaPlayer即使没有完全下载也会开始播放文件.(顺便说一下,我的问题不在于我无法MediaPlayer上场.)MediaPlayer它开始播放时到达下载状态的位置时,它会停止并调用onCompletion.(澄清:假设我开始玩时,我们假设该文件下载了12%.当玩家以12%的比例到达该位置时,它会停止.)OnBufferingUpdateListener.onBufferingUpdate(...)当MP3文件通过附加内容添加时,不会调用DownloadManager.所以问题是:如何同时将音频文件下载到文件系统并播放?(Android 4+就足够了,如果这有所不同.)
(以下所有内容均以Java编写)
我必须构建一个应用程序,它将输入可能非常大的XML文档作为输入.该文档是加密的 - 不是使用XMLsec,而是使用我客户的预先存在的加密算法 - 将分三个阶段进行处理:
首先,根据上述算法对流进行解密.
其次,扩展类(由我提供的API的第三方编写)将读取文件的某些部分.读取的数量是不可预测的 - 特别是它不能保证在文件的标题中,但可能出现在XML中的任何位置.
最后,另一个扩展类(相同的交易)将输入XML细分为1..n子集文档.这些可能会在某些方面与第二个操作处理的文档部分重叠,即:我相信我需要回放我用来处理这个对象的任何机制.
这是我的问题:
有没有办法在没有一次将整个数据读入内存的情况下执行此操作?显然我可以将解密实现为输入流过滤器,但我不确定是否可以按照我描述的方式解析XML; 通过遍历,需要收集第二步的信息,然后通过倒回文档并再次传递它以将其拆分为作业,理想情况下释放文档的所有不再使用的部分他们已经通过了.
我正在尝试将csv文件作为附件下载流式传输.CSV文件大小为4MB或更多,我需要一种方法让用户主动下载文件,而无需等待创建所有数据并首先提交到内存.
我首先使用自己的基于Django FileWrapper类的文件包装器.那失败了.然后我在这里看到了一个使用生成器来传输响应的方法:
如何使用Django流式传输HttpResponse
当我在生成器中引发错误时,我可以看到我正在使用该get_row_data()函数创建正确的数据,但是当我尝试返回响应时它返回空.我也禁用了Django GZipMiddleware.有谁知道我做错了什么?
编辑:我遇到的问题是ConditionalGetMiddleware.我不得不更换它,代码在下面的答案中.
这是观点:
from django.views.decorators.http import condition
@condition(etag_func=None)
def csv_view(request, app_label, model_name):
""" Based on the filters in the query, return a csv file for the given model """
#Get the model
model = models.get_model(app_label, model_name)
#if there are filters in the query
if request.method == 'GET':
#if the query is not empty
if request.META['QUERY_STRING'] != None:
keyword_arg_dict = {}
for key, value in request.GET.items():
#get the query filters …Run Code Online (Sandbox Code Playgroud) 我正在阅读一篇关于数据流管理的长篇文章,我对Sliding和Tumbling Windows之间的区别感到有些困惑.到目前为止,我已经明白翻滚窗口可以是基于时间的,并且具有固定的(开始,结束)点,当该窗口到期时,这些点会"翻滚".例如,基于时间的窗口可以是1分钟长.因此,对于每分钟,窗口都会翻滚以处理数据集的聚合.
滑动的窗户让我很困惑.滑动窗口是否像基于计数一样,当x元组的数量进入窗口时,窗口会翻滚.或者是进入窗口的x-recent元组将成为窗口的一部分,并且旧的元组将从该窗口逐出.即随着新元组的到来不断更新的窗口?
我已经创建了一个简单的WCF服务来原型文件上传.服务:
[ServiceContract]
public class Service1
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Upload")]
public void Upload(Stream stream)
{
using (FileStream targetStream = new FileStream(@"C:\Test\output.txt", FileMode.Create, FileAccess.Write))
{
stream.CopyTo(targetStream);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它使用webHttpBinding与transferMode设置为"流"和maxReceivedMessageSize,maxBufferPoolSize并maxBufferSize全部设置为2GB.httpRuntime已maxRequestLength设置为10MB.
客户端以下列方式发出HTTP请求:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(@"http://.../Service1.svc/Upload");
request.Method = "POST";
request.SendChunked = true;
request.AllowWriteStreamBuffering = false;
request.ContentType = MediaTypeNames.Application.Octet;
using (FileStream inputStream = new FileStream(@"C:\input.txt", FileMode.Open, FileAccess.Read))
{
using (Stream outputStream = request.GetRequestStream())
{
inputStream.CopyTo(outputStream);
} …Run Code Online (Sandbox Code Playgroud) 注意:当我发布这个问题时,我不在我工作的公司工作,因此,即使可能会有一些很好的答案,我实际上也不会测试它们,因为我没有理由 (除了促进社区;这可能导致我有一天这样做).
但是,如果一些解决问题的办法是由许多其他comunity成员提拔,我可能会选择选择它作为问题正确答案经历了这么多年我最初发布这个问题之后.
与此同时,我希望有些答案可能会帮助你们中的一些人遇到这个问题.堆栈溢出!
我们的应用程序必须从在线资源中传播音乐(我不能自由地披露该来源).
为什么在S3上开始流式传输需要2分钟?
由于MEDIA_ERROR_UNKOWN,我已经能够弄清楚Media Player对象进入错误状态 - 很棒.对我帮助不大.因此,在使用OnErrorListener处理onError时,我重置了Media Player对象,然后调用startPlaying来完成剩下的工作 - 设置数据源等.
成员:
private ProgressBar playSeekBar;
private ImageView ivPlay;
private ImageView ivPause;
private ImageView ivBuffer;
private MediaPlayer mPlayer;
private ImageView ivInfo;
private AudioManager audio;
Run Code Online (Sandbox Code Playgroud)
初始化媒体播放器(和Visualizer - 这不是问题的目的)
private void initialMediaPlayerAndVisualizer() {
Log.d(TAG, "Initial Media Player and Visualizer");
playSeekBar = (ProgressBar) findViewById(R.id.progressBar1);
playSeekBar.setMax(100);
playSeekBar.setVisibility(View.GONE);
mPlayer = new MediaPlayer();
Log.d(TAG, "Create onErrorListener");
MediaPlayer.OnErrorListener errorListener = new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int …Run Code Online (Sandbox Code Playgroud) 问题:我需要向服务器发送许多HTTP请求.我只能使用一个连接(不可协商的服务器限制).服务器的响应时间加上网络延迟太高了 - 我落后了.
请求通常不会更改服务器状态,也不依赖于先前请求的响应.所以我的想法是简单地将它们发送到彼此之上,将响应对象排入队列,并依赖于Content-Length:传入响应以将传入的回复提供给下一个等待的响应对象.换句话说:将请求传递给服务器.
这当然不是完全安全的(任何没有Content-Length的回复:意味着麻烦),但我不在乎 - 在这种情况下,我总是可以重试任何排队的请求.(安全的方法是在发送下一位之前等待标题.这可能对我有所帮助.没办法预先测试.)
因此,理想情况下,我希望以下客户端代码(使用客户端延迟来模拟网络延迟)在三秒钟内运行.
现在有64000美元的问题:是否有一个已经完成此操作的Python库,或者我需要自己编写?我的代码使用gevent; 如果需要,我可以使用Twisted,但Twisted的标准连接池不支持流水线请求.如果有必要,我也可以为某个C库编写一个包装器,但我更喜欢本机代码.
#!/usr/bin/python
import gevent.pool
from gevent import sleep
from time import time
from geventhttpclient import HTTPClient
url = 'http://local_server/100k_of_lorem_ipsum.txt'
http = HTTPClient.from_url(url, concurrency=1)
def get_it(http):
print time(),"Queueing request"
response = http.get(url)
print time(),"Expect header data"
# Do something with the header, just to make sure that it has arrived
# (the greenlet should block until then)
assert response.status_code == 200
assert response["content-length"] > 0
for h in response.items():
pass
print time(),"Wait …Run Code Online (Sandbox Code Playgroud) 我对同一主题进行了研究,发现android设备是a2dp源,音频只能从a2dp源流到a2dp接收器.A2dp接收器可以是蓝牙耳机或蓝牙扬声器.
但我的问题是那个名为 " 蓝牙音乐播放器 " 的Android应用程序是如何工作的?
它允许从一个移动设备流式传输到另一个 因此,在这种情况下,收听移动设备必须充当接收器.这怎么可能?他们使用的是其他配置文件而不是a2dp吗?
好的,这可能是他们正在使用的不同的配置文件.因为应用程序也需要在客户端安装.但是如何将语音从蓝牙麦克风传输到Android设备呢?
请帮忙.
我们正在努力让Gstreamer在DM368 Leopardboard*上工作,我们已成功说服它创建测试视频(videotestsrc),对其进行编码并将其转储到文件中.
工作的管道是:
gst-launch -v videotestsrc num-buffers=100 ! queue ! ffenc_mpeg4 bitrate=800000 ! ffmux_mp4 ! filesink location=video_test.mp4
Run Code Online (Sandbox Code Playgroud)
下一步是修改管道以通过网络流式传输测试卡,使用类似rtsp:// ip_addr:port/streamname的内容在具有VLC的PC上查看,但是关于如何做到这一点的文档看起来很薄(并且经常过时),这些示例似乎模糊了源代码和命令行方式.
我会很自然地承认,> 50%的问题是我们对Gstreamer及其各个部分缺乏了解,我总是发现,如果我有一个可行的例子,我可以用棍子戳它并解决其余的问题.从那里.
我到目前为止:
gst-launch -v videotestsrc ! queue ! ffenc_mpeg4 bitrate=800000 ! rtpmp4vpay ! tcpserversink host=<PC_ip> port=5000
Run Code Online (Sandbox Code Playgroud)
这似乎在VLC中发生了一些事情(使用tcp:// board_ip:port) - 它似乎认为发生了一些事情(不会抛出错误)但不会播放/显示任何内容.当我打破(^ C)gst进程时,VLC会注意到.
所以,基本上 - 任何指导/反馈都会很棒,一个有效的单线工作会很棒.
编辑添加:是的我看到了test_video.c的例子,但那是在编译一个特殊的程序来做一些事情看起来应该可以从命令行调用来证明这个概念.
* = Linux version 2.6.32-17-ridgerun /CPU: ARM926EJ-S
Run Code Online (Sandbox Code Playgroud)