Articles of video

在JavaScript中检测video的编解码器

我正在研究基于Electron的桌面应用程序(即Node.js和Chrome浏览器shell挤在一起),其中一个function将包括从本地文件系统加载任意video文件。 我面临的挑战是我不会知道任意video文件使用的编解码器。 我可以过滤文件扩展名(即.mp4 , .webm等)…但MP4文件可以使用众多的编解码器,这是不明显的文件扩展名。 我真的不知道video文件是不支持的,直到HTML5video播放器空白(我甚至不知道如何以编程方式检测此时发生)。 我已经使用loadedmetadata事件处理程序来检测video的尺寸,但似乎并没有公开有关底层编解码器的信息。 有没有办法解决? 我正在寻找可以在本机“主”进程中识别编解码器的Node.js包,而不是让Chrome“渲染器”进程尝试在浏览器级别检测它。 不过,我所看到的所有Node.jsvideo包都依赖于ffmpeg可执行文件,我无法轻松地将其与我的Electron应用捆绑在一起。 有一百多个代码样本用于检测您的浏览器支持哪些编解码器 。 但是,这是来自假设,你正在处理一个已知的video文件和一个未知的浏览器。 那么相反呢…当你有一个有保证的浏览器,但一个未知的video文件?

AngularJS:检索存储在$ templateCache中的video模板结果404错误

我目前在我的本地主机上开发了一个AngularJS 1.5.9 单页面应用程序 ,并在其中使用了运行后端的NodeJS video框架。 http://www.videogular.com/ 除了在我的页面上插入video对象,一切都很好。 我严格按照给定的例子: http : //www.videogular.com/examples/simplest-videogular-player/ <videogular vg-theme="controller.config.theme.url"> <vg-media vg-src="controller.config.sources" vg-tracks="controller.config.tracks" vg-native-controls="true"> </vg-media> </videogular> 但是它会导致AngularJS错误: (请求中的sessionId是没有链接到当前问题的身份validation令牌) 我在videogular.jsfind了以下videogular.js : $templateCache.put("vg-templates/vg-media-video", "<video></video>"); $templateCache.put("vg-templates/vg-media-audio", "<audio></audio>"); 我试图在本地存储文件,并且错误消失了 实际上有很多的video插件,他们都使用$templateCache存储caching中的一些文件,所以手动将它们本地保存在我的应用程序文件夹将是非常混乱。 这样的文件如何使用$templateCache存储在caching中,这样可以正确提取它们? 我赞赏你的帮助。 UPDATE 我已经尝试插入$templateCache.get指令,其中部分加载错误404,它的工作原理。 但仍不能如预期那样工作。

NodeJS – 如何pipe相同的videostream到多个客户端?

我们有一种情况试图为videostream服务。 由于HTML5video标签不支持udp组播,因此我们试图重新使用已经转换的ffmpegstream并将其发送给多个响应。 但是这不起作用。 第一个响应得到了正确的stream,但第二个响应没有。 似乎这个stream不能通过另一个响应pipe道,也不能被克隆。 有没有人做过? 有任何想法吗? 提前致谢! 代码如下: var request = require('request'); var http = require('http'); var child_process = require("child_process"); var n = 1; var stdouts = {}; http.createServer(function (req, resp) { console.log("***** url ["+req.url+"], call "+n); if (req.url != "/favicon.ico" && req.url != "/") { var params = req.url.substring(1).split("/"); switch (params[0]) { case […]

使用nodejs stdoutpipe道输出ffmpeg

我无法通过标准输出pipe道输出ffmpeg。 以下是我编码到目前为止的代码块。 var http = require('http') , fs = require('fs') var child_process = require("child_process") http.createServer(function (req, res) { console.log("Request:", dump_req(req) , "\n") // path of the var path = 'test-mp4.mp4' //test-mp4-long.mp4 , stat = fs.statSync(path) , total = stat.size var range = req.headers.range , parts = range.replace(/bytes=/, "").split("-") , partialstart = parts[0] , partialend = […]

nodeJSvideostream,当用户断开或移动到不同的页面时,连接不会closures

我正在使用express来build立nodeJS中的videostream服务器,并使用“request-progress”模块来获取进度状态。 这是(videostream)正常工作。 但问题是,即使我closures浏览器或移动到下一页后,服务器仍然stream数据。 我可以在控制台中看到。 这里是相同的代码: app.route('/media/*').get(function (req, res) { var originalUrl = "http://myactualserver.com"; var resourceUrl = originalUrl.split('media'); var requestURL = BASE_URL + resourceUrl[1]; req.on('close', function () { console.log('Client closed the connection'); }); var options = {}; progress(request(requestURL), { throttle: 1000, delay: 0, lengthHeader: 'content-length', }) .on('progress', function (state) { console.log('progress', state); }) .on('error', function (err) […]

来自JavaScript blob的video源

我想要显示一个videostream; 我有一个nodeJS服务器发送一个oggvideostream到一个websocket端口,当一个客户端连接到该端口,它开始接收videostream数据,但下面的方法似乎没有正确理解video数据… 在下面的上下文中,“camera”是一个html5video标签id: function connectWS() { var client = new BinaryClient('ws://192.168.161.193:8088'); client.on('stream', function(stream, meta) { stream.on('data', function(data) { var arrayBuffer = []; arrayBuffer.push(data); var video = new Blob([new Uint8Array(arrayBuffer)], { type: "video/ogg" }); document.getElementById('camera').src = (window.URL || window.webkitURL).createObjectURL(video); }); }); } 有人似乎已经有videoblob工作,但我无法find如何… 从Blob Javascript显示video 谢谢!

使用NodeJS中的mp4容器stream式转换电影,电影播放速度非常快

我已经使用stream-transcoder模块来转换文件使其成为一个stream。 所以文件不存储,它是在飞行中。 app.get("/video", function(req,res){ res.writeHead(200, {'Content-Type': 'video/mp4'}); var src = "movie.avi"; var Transcoder = require('stream-transcoder'); var stream = fs.createReadStream(src); new Transcoder(stream) .maxSize(1280, 720) .videoCodec('h264') .videoBitrate(800 * 1000) .fps(25) .sampleRate(44100) .channels(2) .audioBitrate(128 * 1000) .format('mp4') .on('finish', function() { console.log("finished"); }) .stream().pipe(res); }); 它工作的很好,速度很快,但速度太快,audio播放速度相同,但video不考虑帧速率,不pipe从ffmpeg收到什么,都很快地显示出来。 此外,它不显示总时间,我相信这是问题。 我需要以某种方式指定长度,帧率,但我找不到足够的信息。 我以为从ffmpeg收到的stream应该包含这个。 而我无法findHTTP中的相应标题。 以下是这个stream代码转换器模块用于MP4的标志: [ '-i', '-', '-vf', 'scale=min(trunc(1280/hsub)*hsub\\,trunc(a*720/hsub)*hsub):min(trunc(720/vsub)*vsub\\,trunc(1280/a/vsub)*vsub)', '-vcodec', 'h264', '-b:v', […]

在nodejs中获取video分辨率

我一直试图得到一个答案,而没有真正find任何。 对不起,如果这听起来很愚蠢或明显。 我有一个nodejs应用程序,基本上我只想简单地得到一个video的分辨率。 想象一下,我有电影存储在磁盘上,我想能够知道是否在720p或1080p或其他任何东西。 我知道我可能需要使用ffmpeg才能这样做,但是我也明白ffmpeg主要用于“logging,转换和stream式处理audio和video文件”。 这并不意味着检索video分辨率。 感谢您的帮助 编辑1:node.js应用程序是一个桌面应用程序,需要可移植到Linux,Windows和OS X.如果可能的话,一个便携式的答案将更加赞赏,但当然任何答案是值得欢迎的。

Express / torrent-stream:从stream中写入文件,使用url将套接字发送给客户端,但客户端无法find文件

我正在开发一个个人项目,基本上需要一个磁铁链接,开始下载文件,然后在浏览器中呈现video的洪stream。 我使用一个名为torrent-stream的npm模块来完成大部分的工作。 一旦我创build了可读stream并开始写文件,我想用videoURL向客户端发送套接字消息,以便客户端可以呈现html5video元素并开始stream式传输video。 我遇到的问题是,一旦客户端呈现video元素,并试图find源mp4我得到一个404video文件中找不到错误。 任何意见,这将是高度赞赏队友。 🙂 控制器function: uploadVideo: function (req, res) { var torrentStream = require('torrent-stream'); var mkdirp = require('mkdirp'); var rootPath = process.cwd(); var magnetLink = req.param('magnet_link'); var fs = require('fs'); var engine = torrentStream(magnetLink); engine.on('ready', function() { engine.files.forEach(function(file) { var fileName = file.name; var filePath = file.path; console.log(fileName + ' – ' + […]

使用webrtc + node.js进行video会议

首先抱歉我的英语不好。 我正在尝试使用WebRTC进行video通话,但不起作用。 我正在使用node.js + socket.io + express服务器。 我感谢您可以给我的任何帮助或build议。 非常感谢你。 这是我的代码。 服务器 var express = require('express') , io = require('socket.io') , app = express() , server = require('http').createServer(app) , io = io.listen(server); server.listen(8080); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); var usuarios = []; io.sockets.on('connection', function (socket) { usuarios.push(socket); console.log('Nuevo usuario conectado – ' […]