protected void ConfigureTimeShiftingRegistry()
{
//http://msdn.microsoft.com/en-us/library/windows/desktop/dd694948%28v=vs.85%29.aspx
UIntPtr HKEY_CURRENT_USER = (UIntPtr)0x80000001;
//unchecked
//{
// HKEY_CURRENT_USER = (UIntPtr)0x80000001;
//}
// Create the StreamBufferConfig object.
StreamBufferConfig streamBufferConfig = new StreamBufferConfig();
IStreamBufferConfigure streamBufferConfigure = streamBufferConfig as IStreamBufferConfigure;
// Create a new registry key to hold our settings.
streamBufferConfigHKey = IntPtr.Zero;
IntPtr p = Marshal.AllocCoTaskMem(4);
Marshal.WriteIntPtr(p, IntPtr.Zero);
try
{
int lRes = RegCreateKey(HKEY_CURRENT_USER, MainForm.RegistryBaseKey + "\\SBE", p);
streamBufferConfigHKey = Marshal.ReadIntPtr(p);
}
finally
{
Marshal.FreeCoTaskMem(p);
}
// Set the registry key.
IStreamBufferInitialize streamBufferInitialize = streamBufferConfigure as IStreamBufferInitialize;
int hr = streamBufferInitialize.SetHKEY(streamBufferConfigHKey);
DsError.ThrowExceptionForHR(hr);
//http://msdn.microsoft.com/en-us/library/windows/desktop/dd694977%28v=vs.85%29.aspx
//For Windows Vista or later the IStreamBufferSink::LockProfile method requires administrator privileges,
// unless you first call IStreamBufferConfigure3::SetNamespace with the value NULL.
IStreamBufferConfigure3 streamBufferConfigure3 = streamBufferConfig as IStreamBufferConfigure3;
if (streamBufferConfigure3 != null)
{
hr = streamBufferConfigure3.SetNamespace(null);
DsError.ThrowExceptionForHR(hr);
}
// Set the TimeShifting configuration
//hr = streamBufferConfigure.SetDirectory("C:\\MyDirectory");
string directory = Settings.VideosFolder;
string directoryPath = FileUtils.GetAbsolutePath(directory as string);
hr = streamBufferConfigure.SetDirectory(directoryPath);
DsError.ThrowExceptionForHR(hr);
hr = streamBufferConfigure.SetBackingFileDuration(600); // Min 15 seconds
//TODO not working anymore!!
hr = streamBufferConfigure.SetBackingFileCount(
Math.Min(100, Math.Max(4, Settings.TimeShiftingBufferLengthMin / 10)), // 4-100
Math.Min(102, Math.Max(6, Settings.TimeShiftingBufferLengthMax / 10))); // 6-102
}