我正在寻找一种方法来播放从网络摄像头拍摄的实时视频或根植于PC的摄像头.广播应该使用标签显示在HTML5页面中(我认为支持rtp和rtsp).
查看流的用户不必安装任何插件或视频播放器,如QuickTime.
我需要视频为mp4格式,例如:rtsp://www.mywebsite/streaming/video.mp4
这将是我作为html 5视频标签的src放置的链接.
所以我想知道是否可能,我有什么选择做这些事情.
我希望能够使用我的iOS设备录制素材并将其直接流式传输到服务器.
有很多关于SO的文章谈论这个,但我不确定是否有人很好地回答了这个问题.
我应该使用HTTP实时流,或者这只是将数据发送到一个iPhone?我是否应该使用AVCaptureSession来抓取视频(一次一段?),将每个段发送到服务器?我应该使用AVCaptureVideoDataOutput和ffmpeg进行流式传输吗?
我有点迷失所有这些,所以任何示例代码或文档或链接都会非常感激.
谢谢你的帮助.
邓肯
我在Android上使用MediaPlayer传输音频.
当设备从Wi-Fi移动到蜂窝网络或反之亦然时,MediaPlayer停止播放.
通常,缓冲区中有几秒钟的音频,因此播放不会立即停止.
理想情况下,我想选择不间断播放的流,但我看不到如何做到这一点.
我正在处理服务器上托管的mp3文件和实时广播流.
我正在使用OpenGL某种批量绘图.为此,我创建了一个vertex buffer存储数据.
注意:此缓冲区通常会在每个帧上更新,但永远不会减小大小(但仍然可以增加).
我的问题是:使用glBufferData(用s treaming write-only mode)更新它(而不是例如glMapBuffer)在技术上是否正确?我想没有必要映射它,因为更新了完整的数据,所以我只需要立即发送一个完整的数据包.如果当前的缓冲区大小比我发送的少,它会自动增加,不是吗?我现在才确定它的实际工作方式(也许它会在每次调用时重新创建缓冲区,不是吗?).
我正在构建一个从Web服务器流式传输音乐的应用程序.该应用程序具有使用MediaPlayer进行播放的前台服务.
我的代码基于此示例:http://developer.android.com/guide/topics/media/mediaplayer.html
在该示例中,除了prepareAsync()调用之外没有任何线程.令我困惑的是,当我阅读有关Service类的信息时,我会发现以下信息:
"警告:服务在其托管进程的主线程中运行 - 该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定).这意味着,如果您的服务将要执行任何操作CPU密集型工作或阻塞操作(如MP3播放或网络),您应该在服务中创建一个新线程来完成这项工作.通过使用单独的线程,您将降低应用程序无响应(ANR)错误的风险应用程序的主线程可以保持专用于用户与您的活动的交互."
我问的原因是应用程序有时(通常在失去连接时)会在流式传输音频时冻结UI.我完全理解,如果服务正在使CPU紧张工作,UI会冻结,因为活动和服务在同一个线程上运行.但是,我是否应该期待MediaPlayer如此激烈?也就是说,它应该在一个单独的线程上运行吗?
我无法理解HTML5s Server-sent-events是否真的适合ReST架构.我知道并非HTML5/HTTP的所有方面都需要适合ReST架构.但我想知道专家,其中一半的HTTP是SSE(ReSTful一半或另一半!).
一种观点可能是它是ReSTful,因为从客户端到服务器有一个"初始"HTTP GET请求,剩下的只能被看作只是不同内容类型的部分内容响应("text/event-流")
发送的请求不知道响应(事件)会有多少响应?这是Restful吗?
问题的动机:我们正在开发应用程序的服务器端,我们希望同时支持ReST客户端(通常)和浏览器(特别是).虽然SSE适用于大多数HTML5浏览器客户端,但我们不确定SSE是否适合纯ReST客户端的支持.因此问题.
Edit1:正在阅读Roy Fielding的旧文章,他说:"换句话说,单个用户请求会导致潜在的大量服务器义务.因此,一个仁慈的用户可能会对发布者或代理产生不成比例的负载.在互联网上,我们没有为善意用户设计的奢侈品,因此在HTTP系统中我们称这种请求为拒绝服务攻击.... 这正是为什么没有标准机制用于HTTP中的通知 "
这是否意味着SSE不是Restful?
Edit2:正在浏览Twitter的REST API.虽然REST puritans可能会争论他们的REST API是否真的/完全REST,但Streaming和REST之间的差异部分的标题似乎表明Streaming(甚至SSE)不能被认为是ReSTful!有人认为吗?
所以我想要做的是从网址流式传输图像,使用graphicsmagick处理它并将其上传到s3.我只是不让它工作.
将处理后的图像流式传输到本地磁盘(使用fs.createWriteStream)可以正常工作.
当我缓冲我的流时,s3中的最终图像至少具有预期的大小(kb-wise),但我无法打开该图像.
这就是我目前的进步:
var request = require('request');
var gm = require("gm");
var AWS = require('aws-sdk');
var mime = require('mime');
var s3 = new AWS.S3();
gm(request('http://www.some-domain.com/some-image.jpg'), "my-image.jpg")
.resize("100^", "100^")
.stream(function(err, stdout, stderr) {
var str = '';
stdout.on('data', function(data) {
str += data;
});
stdout.on('end', function(data) {
var data = {
Bucket: "my-bucket",
Key: "my-image.jpg",
Body: new Buffer(str, 'binary'), // thats where im probably wrong
ContentType: mime.lookup("my-image.jpg")
};
s3.client.putObject(data, function(err, res) {
console.log("done");
});
});
});
Run Code Online (Sandbox Code Playgroud)
我确实尝试了一些像创建filewritestream和filereadstream的东西,但我认为应该有一些更清洁的解决方案来解决这个问题......
编辑:我尝试的第一件事是将Body设置为stdout(来自@AndyD的建议答案):
var data …Run Code Online (Sandbox Code Playgroud) 我有一个.ts格式的直播,包含AAC音频和H.264视频.我想在iOS设备上播放它.我试图使用基于FFmpeg的电影播放器来解码和播放视频,但音频却落后了.
我可以将此传输流重新包装到MPEG-4容器中以在iOS设备上播放 - 而无需在服务器端进行转换吗?
服务器返回.ts实时流的URL,我的目标是在没有.m3u8播放列表的iOS设备上播放此流,因为我无法从服务器获取它.
我有两个想要组合的数据流.问题是一个数据流的频率比另一个高得多,并且有时一个流根本没有接收事件.是否可以使用来自一个流的最后一个事件,并在即将到来的每个事件上将其与另一个流连接?
我找到的唯一解决方案是使用join函数,但您必须指定一个公共窗口,您可以在其中应用join函数.当一个流没有接收到任何事件时,这是未达到的窗口.
是否有可能对来自任何一个流或另一个流的每个事件应用join函数并维护上次使用的事件的状态并将此事件用于join函数?
提前感谢任何有用的提示!