public InputStream(string streamUrl, Dictionary<string, string> addonProperties, StreamPreferences preferences)
{
SubtitlePaths = new List<string>();
string addonName;
if (!addonProperties.TryGetValue(KEY_INPUTSTREAM_ADDON, out addonName))
throw new ArgumentException("Missing inputstreamaddon key", "addonProperties");
_preferences = preferences;
_wrapper = new DllAddonWrapper<InputStreamAddonFunctions>();
var pluginRoot = Path.GetDirectoryName(GetType().Assembly.Location);
// Add to windows DLL search path to find widevine dll
var res = NativeMethods.SetDllDirectory(pluginRoot);
var addonDllPath = Path.Combine(pluginRoot, string.Format("{0}\\{0}.dll", addonName));
_wrapper.Init(addonDllPath);
var cb = new AddonCB { LibPath = pluginRoot + "\\" };
var status = _wrapper.Create(ref cb, IntPtr.Zero);
if (status != AddonStatus.Ok)
throw new Exception("Failed to create addon.");
_addonFunctions = _wrapper.Addon;
// The path contains 2 dummy folders, because the InputStream.mpd plugin creates the cdm folder 2 levels higher.
string profileFolder = ServiceRegistration.Get<IPathManager>().GetPath(string.Format("<DATA>\\OnlineVideos\\InputStream\\addons\\{0}\\", addonName));
if (!Directory.Exists(profileFolder))
Directory.CreateDirectory(profileFolder);
var inputStreamConfig = new InputStreamConfig
{
Url = streamUrl,
LibFolder = Path.Combine(profileFolder, "cdm"),
ProfileFolder = profileFolder,
Properties = new ListItemProperty[InputStreamConfig.MAX_INFO_COUNT]
};
int idx = 0;
foreach (var addonProperty in addonProperties)
{
if (addonProperty.Key == KEY_INPUTSTREAM_ADDON)
continue;
inputStreamConfig.Properties[idx++] = new ListItemProperty(addonProperty.Key, addonProperty.Value);
}
inputStreamConfig.CountInfoValues = (uint)idx;
if (preferences.Width.HasValue && preferences.Height.HasValue)
Functions.SetVideoResolution(preferences.Width.Value, preferences.Height.Value);
Functions.Open(ref inputStreamConfig);
_caps = Functions.GetCapabilities();
UpdateStreams();
GetPreferredStreams(_inputstreamInfos, _preferences);
// Tell the inputstream to enable selected stream IDs
EnableStreams();
}