在我的应用程序中,用户可以通过 AVPlayerItem 的 preferredPeakBitRate 属性在 HLS 流的多个带宽上限之间进行选择,但我想添加一个质量级别,其中仅通过网络加载流的音轨以节省带宽。
是否可以为视频流不相关或用户不需要的流实现纯音频流,而无需查看实际m3u8文件并自己查找音轨?
我正在寻找一个库,该库提供从 android 设备(5.1+)流式传输视频并同时录制的功能。
我尝试了 MediaRecorder - 这是在 android 上录制视频的常用方法 - 但使用它我无法通过 webrtc 或 rtsp 流式传输它,因为相机很忙。
目前我正在使用libstreaming。只需稍作修改,应用程序就可以同时记录和流式传输 rtsp。但是这个库在 MTK 和 SPRG 芯片组中缺乏对硬件编解码器的支持。
我想知道您是否可以推荐一个解决方案或另一个库。目前,lib 仅适用于带有 qcom 芯片组的 nexus 4。
我正在使用PHP Flysystem包从我的AWS S3存储桶流式传输内容。特别是,我正在使用$filesystem->readStream.
我的问题
当我流式传输文件时,它以myzip.zip 结尾并且大小是正确的,但是当解压缩它时,它变成了myzip.zip.cpgz。这是我的原型:
header('Pragma: no-cache');
header('Content-Description: File Download');
header('Content-disposition: attachment; filename="myZip.zip"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
$s3 = Storage::disk('s3'); // Laravel Syntax
echo $s3->readStream('directory/file.jpg');
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
副题
当我流式传输这样的文件时,是否:
基本上,如果我有数十 GB 的数据被流式传输,我的服务器是否会负担沉重?
我们正处于构建物联网云平台项目的初期。有一些众所周知的部分可以实现完整的物联网平台解决方案。其中之一是实时规则处理/引擎系统,它需要了解流事件与最终用户以可读格式(SQL 或 Drools if/when/then 等)动态定义的任何规则相匹配。
我很困惑,因为互联网上有很多产品、项目(Storm、Spark、Flink、Drools、Espertech 等),所以考虑到我们有 3 人的开发团队(初级、中高级、高级),什么是最好的选择?
streaming rule-engine complex-event-processing iot flink-cep
我们有需要发回 JSON 输出的 JAX RS 实现。但是响应大小是巨大的。并且客户端同步期望相同。因此我尝试使用 StreamingOutput ......但客户端并没有真正以块的形式获取数据。以下是示例片段:
streamingOutput = new StreamingOutput() {
@Override
public void write(OutputStream out) throws IOException, WebApplicationException {
JsonGenerator jsonGenerator = mapper.getFactory().createGenerator(out);
jsonGenerator.writeStartArray();
for(int i=0; i < 10; i++) {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("Response_State", "Response State - " + i);
jsonGenerator.writeStringField("Response_Report", "Response Report - " + i);
jsonGenerator.writeStringField("Error_details", "Error Details - " + i);
jsonGenerator.writeEndObject();;
jsonGenerator.flush();
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
jsonGenerator.writeEndArray();
jsonGenerator.close();
}
};
return Response.status(200).entity(streamingOutput).build();
Run Code Online (Sandbox Code Playgroud)
HttpClient client = …Run Code Online (Sandbox Code Playgroud) 我的 iOS 应用程序使用 AVPlayer 从我的服务器播放流音频并将其存储在设备上。我实现了 AVAssetResourceLoaderDelegate,所以我可以拦截流。我改变了我的方案(从http一个假方案,这样 AVAssetResourceLoaderDelegate 方法被调用:
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool
我跟着这个教程:
http://blog.jaredsinclair.com/post/149892449150/implementing-avassetresourceloaderdelegate-a
在那里,我将原始方案放回原处,并创建一个会话以从服务器提取音频。当我的服务器为Content-Length流式音频文件提供(以字节为单位的音频文件大小)标头时,一切正常。
但有时我会在无法提前提供长度的情况下流式传输音频文件(比如直播播客流)。在这种情况下,AVURLAsset 将长度设置为-1并失败:
"Error Domain=AVFoundationErrorDomain Code=-11849 \"Operation Stopped\" UserInfo={NSUnderlyingError=0x61800004abc0 {Error Domain=NSOSStatusErrorDomain Code=-12873 \"(null)\"}, NSLocalizedFailureReason=This media may be damaged., NSLocalizedDescription=Operation Stopped}"
我无法绕过这个错误。我试图采取一种骇人听闻的方式,提供 fake
Content-Length: 999999999,但在这种情况下,一旦下载了整个音频流,我的会话就会失败:
Loaded so far: 10349852 out of 99999999
The request timed out.
//Audio file got downloaded, its size is 10349852
//AVPlayer tries to get the next chunk and then fails with …
有人使用 koa.js 和流吗?
考虑这个例子
const fs = require('fs');
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx) => {
ctx.body = fs.createReadStream('really-large-file');
});
app.listen(4000);
Run Code Online (Sandbox Code Playgroud)
如果用户中止请求我得到
Error: read ECONNRESET
at _errnoException (util.js:1024:11)
at TCP.onread (net.js:618:25)
Run Code Online (Sandbox Code Playgroud)
或者
Error: write EPIPE
at _errnoException (util.js:1024:11)
at WriteWrap.afterWrite [as oncomplete] (net.js:870:14)
Run Code Online (Sandbox Code Playgroud)
处理此类错误的正确方法是什么?
PS请求中止后我没有错误
const fs = require('fs');
const express = require('express');
const app = express();
app.get('/', (req, res) => {
fs.createReadStream('really-large-file').pipe(res);
});
app.listen(4000);
Run Code Online (Sandbox Code Playgroud)
我试过的PPS
app.use(async (ctx) => {
fs.createReadStream('really-large-file').pipe(ctx.res);
ctx.respond = …Run Code Online (Sandbox Code Playgroud) 我们面临着一个关键的决定,我们需要为实时遥测处理和监控系统选择正确的工具。
该系统有两个主要目的:
我们有两个顾虑:
在我们的用例中,与我们目前所发现的相比,大多数数据消费者将是 Web 客户端 -> RabbitMQ和Kafka都主要用于基于云的平台,其中大多数数据消费者是服务而不是客户端。
通常来自 Kafka 或 RabbitMQ 的数据消费者是负载均衡的,并且不会为每个客户端复制消息。
.
谢谢 :)
Apache Spark吹嘘其运营商(节点)是“无状态的”。这允许 Spark 的架构使用更简单的协议来处理诸如恢复、负载平衡和处理落后者之类的事情。
另一方面,Apache Flink将其运算符描述为“有状态的”,并声称有状态对于机器学习等应用程序是必要的。然而,Spark 程序能够在不维护“状态”的情况下传递信息并在 RDD 中维护应用程序数据。
这里发生了什么?Spark 不是真正的无状态系统吗?或者 Flink 断言状态性对于机器学习和类似应用程序至关重要?还是这里有一些额外的细微差别?
我觉得我并没有真正理解“有状态”和“无状态”系统之间的区别,如果能解释一下,我将不胜感激。
我正在构建一个用于上传大文件(数 GB)的反向代理,因此想要使用不缓冲整个文件的流模型。大缓冲区会引入延迟,更重要的是,它们可能会导致内存不足错误。
我的客户端类包含
@Autowired private RestTemplate restTemplate;
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
int REST_TEMPLATE_MODE = 1; // 1=streams, 2=streams, 3=buffers
return
REST_TEMPLATE_MODE == 1 ? new RestTemplate() :
REST_TEMPLATE_MODE == 2 ? (new RestTemplateBuilder()).build() :
REST_TEMPLATE_MODE == 3 ? restTemplateBuilder.build() : null;
}
Run Code Online (Sandbox Code Playgroud)
和
public void upload_via_streaming(InputStream inputStream, String originalname) {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setBufferRequestBody(false);
restTemplate.setRequestFactory(requestFactory);
InputStreamResource inputStreamResource = new InputStreamResource(inputStream) {
@Override public String getFilename() { return originalname; }
@Override public long contentLength() { return -1; …Run Code Online (Sandbox Code Playgroud) streaming ×10
avplayer ×2
ios ×2
amazon-s3 ×1
android ×1
apache-flink ×1
apache-kafka ×1
apache-spark ×1
audio ×1
avurlasset ×1
flink-cep ×1
iot ×1
java ×1
javascript ×1
jax-rs ×1
json ×1
koa ×1
koa2 ×1
output ×1
php ×1
rabbitmq ×1
resttemplate ×1
rule-engine ×1
spring ×1
spring-boot ×1
state ×1
swift ×1
video ×1
zip ×1