小编bre*_*he0的帖子

视频流通过Websocket转到<video>标签

我使用Node.js通过Websocket将实时webm视频流式传输到一个网页,该网页将在标签中播放.以下是服务器和客户端的代码:

服务器:

var io = require('./libs/socket.io').listen(8080, {log:false});
var fs = require('fs');
io.sockets.on('connection', function (socket) 
{
console.log('sono entrato in connection');
var readStream = fs.createReadStream("video.webm");

socket.on('VIDEO_STREAM_REQ', function (req) 
{
    console.log(req);

    readStream.addListener('data', function(data)
    {
        socket.emit('VS',data);
    });

});
});
Run Code Online (Sandbox Code Playgroud)

客户:

<html>
<body>

<video id="v" autoplay> </video>

<script src='https://localhost/socket.io/socket.io.js'></script>
<script>
window.URL = window.URL || window.webkitURL;
window.MediaSource = window.MediaSource || window.WebKitMediaSource;

if(!!! window.MediaSource)
{
    alert('MediaSource API is not available!');
    return;
}

var mediaSource = new MediaSource();    
var video = document.getElementById('v');

video.src = window.URL.createObjectURL(mediaSource);

mediaSource.addEventListener('webkitsourceopen', function(e)
{ …
Run Code Online (Sandbox Code Playgroud)

javascript dom websocket node.js html5-video

11
推荐指数
1
解决办法
2万
查看次数

在WPF中自定义鼠标光标大小

我们正在开发一个应用程序,必须由可能有一些涉及使用kinect来移动光标的视觉问题的人使用,因此我们需要使它比平常更大.但是,此应用程序不直接与kinect接口,因此我们无法使用其API.

我们使用WPF在C#(.NET 4.5)中编程.问题是在高分辨率设备中默认光标大小不能大于32x32像素或64x64像素.

我们首先尝试使实际的鼠标光标不可见,然后使用Graphics对象,使用Graphics.FromHwnd(applicationWindowHandler).它成功绘制图像,但它留下了过去光标位置的踪迹.

有没有办法使用常规的Windows鼠标光标,或至少一种方法来删除跟踪(如强制当前窗口刷新的"无效"方法)?

我们已经尝试过这些解决方案,但没有运气:

www.hsys.com/CustomCursorArticlePart1.htm

www.hsys.com/CustomCursorArticlePart2.htm

csharparticles.blogspot.it/2005/03/custom-drawing-cursors.html

.net c# wpf mouse-cursor kinect

9
推荐指数
1
解决办法
2381
查看次数

Node.js Webm直播服务器:<video>标签问题

我正在使用Node.js作为流服务器来传输由FFMPEG发送的实时Webm视频(从另一个应用程序执行,流通过HTTP完成)并由使用该标记的webapp接收.

这就是我正在做的事情:FFMPEG使用以下命令流式传输接收到的帧:

ffmpeg -r 30 -f rawvideo  -pix_fmt bgra -s 640x480 
-i \\.\pipe\STREAM_PIPE -r 60 
-f segment  -s 240x160 -codec:v libvpx  -f webm 
http://my.domain.com/video_stream.webm
Run Code Online (Sandbox Code Playgroud)

(该流来自一个应用程序,该应用程序使用Kinect作为源并通过管道与FFMPEG通信,一帧接一个地发送)

当webapp连接时,它立即从服务器接收此响应:

HTTP/1.1 200 OK
X-Powered-By: Express
content-type: video/webm
cache-control: private
connection: close
Date: Fri, 06 Dec 2013 14:36:31 GMT
Run Code Online (Sandbox Code Playgroud)

并且会立即附加Webm标头(先前存储在服务器上,具有与源流相同的分辨率和帧速率,并在VLC上进行测试).然后webapp开始接收FFMPEG流传输的数据.以下是Mkvinfo GUI的屏幕截图,显示了标题的字段:

标题截图

但是,即使Chrome控制台的"网络"标签显示存在实际的数据流(意味着流式传输的内容不完全是垃圾,否则连接将被丢弃),播放器也不会显示任何内容.我们尝试手动将我们的标头添加到webapp收到的转储视频中,而VLC播放它很好,但标签不会发生这种情况.

什么可能导致这个问题?我们是否遗漏了FFMPEG方面的编码或者我们在标题上存储了错误的值(或者它们还不够)?

PS:我不能依赖外部流服务器.

PPS:我们尝试了以下实验:

  • 将视频标头替换为存储在服务器中的视频标头使得视频可在vlc和视频标签上播放
  • 如果我们转储已经启动的视频(没有标题)并且我们预先存储在服务器或甚至其原始标题中的视频标题,则视频可以在VLC中播放但不在标签上播放(我们正在小心地预先添加标题在集群开始之前).

html5 ffmpeg node.js html5-video webm

6
推荐指数
1
解决办法
3565
查看次数

使用VP8.NET流式传输到webm文件

我正在使用VP8 .NET库从笔记本电脑摄像头转换视频流,我想将其存储在webm文件中(无需音频).为此,我使用库中文档中提供的代码作为示例,我添加了几行代码将编码流写入文件.这是代码:

class EncodingSession
{
    private readonly VP8.Encoder Encoder;
    static FileStream fs = new FileStream("provavideo.webm", FileMode.CreateNew);
    BinaryWriter w = new BinaryWriter(fs);

    public EncodingSession(int width, int height, int fps)
    {
        Encoder = new VP8.Encoder(width, height, fps);

    }

    public byte[] Encode(Image frame)
    {
        Encoder.ForceKeyframe();
        byte[] array = Encoder.Encode((Bitmap)frame);
        w.Write(array);
        return array;
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,这不会产生有效的webm文件,可能是因为缺少webm标头.我的问题是:如何添加有效的webm标头(如果这确实是需要的话)?是否需要将其他内容添加到我的文件中?

c# video video-streaming webm vp8

5
推荐指数
0
解决办法
1973
查看次数