我正在测试如何在互联网上流式传输特定应用程序。
我已经有了在图形对象(和位图)中捕获应用程序接口的代码。
我通过谷歌搜索无法真正找到的唯一一件事是如何将其实际放入流中,我可以通过 vlc 或直接通过<video>
HTML5 中的 -tag 连接到该流。
为了澄清起见,我需要一些关于如何创建 MJPEG 流或类似内容的指示。
我现在用来捕获应用程序的代码是:
LINQPad 中的 C#
void Main()
{
var hwnd = Process.GetProcessesByName("notepad")[0].MainWindowHandle;
RECT r;
if(GetWindowRect(hwnd, out r))
{
int width = r.Right - r.Left;
int height = r.Bottom - r.Top;
Bitmap bit = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bit);
try
{
while(true) {
var hdc = g.GetHdc();
PrintWindow(hwnd, hdc, 0);
g.ReleaseHdc(hdc);
bit.Save(@"C:\temp\img.jpg", ImageFormat.Jpeg);
Thread.Sleep(25);
}
}
catch { }
bit.Dispose();
g.Dispose();
}
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[DllImport("user32.dll")]
public static extern bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags);
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
用于更新的 HTML
<!DOCTYPE html>
<html>
<head>
<title>LiveStream</title>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style type="text/css" rel="stylesheet">
body { margin: 0; padding: 0; }
</style>
</head>
<body>
<img src="img.jpg" id="liveID" /><img src="img.jpg" id="hiddenID" style="visibility: hidden; width: 1px; height: 1px;" />
<script type="text/javascript">
var img = $('#hiddenID');
function loadNewImage() {
var check = $.ajax({
type: 'HEAD',
url: 'img.jpg',
async: false,
success: function() {
if(check != null) {
if(check.getResponseHeader("Content-Length") == null) {
return;
}
} else {
return;
}
}
});
img.attr('src', 'img.jpg#t=' + new Date().getTime());
}
img.load(function() {
var nImg = document.getElementById('liveID');
nImg.src = img.attr('src');
setTimeout(function() { loadNewImage(); }, 50);
});
img.error(function() {
setTimeout(function() { loadNewImage(); }, 250);
});
setTimeout(function() { loadNewImage(); }, 50);
</script>
</body>
</html>