インターネット上で特定のアプリケーションをストリーミングする方法をテストしています。
アプリケーション インターフェイスをグラフィックス オブジェクト (およびビットマップ) にキャプチャするコードは既にあります。
<video>
グーグルで実際に見つけることができない唯一のことは、これを実際にストリームに入れる方法です.vlcを介して、またはHTML5のタグを介して直接接続できます.
明確にするために、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>