При поиске я получил следующий запрос, который делает задание с одним предположением (время выполнения запросов> 6 секунд)
<час>ИЗБРАННОЕ имя пользователя, sql_text, sofar, totalwork, единицы
ОТ v$sql, v$session_longops
ГДЕ sql_address = адрес И sql_hash_value = адрес ORDER BY hash_value
, hash_value, child_number;
<час>я думаю выше запроса, перечислит детали для текущего пользователя.
Комментарии приветствуются!!
Взгляните на этот вопрос SO - Надежная оболочка FFmpeg для C # /. NET , которая связана с несколькими реализациями ffmpeg .Net. ffmpeg работает с большинством видеоформатов / кодеков. Таким образом, вам не нужно беспокоиться об установке кодека на машине.
Или посмотрите http://mediainfo.sourceforge.net/en .
Многие из этих деталей предоставляются оболочкой, поэтому вы можете сделать это, добавив ссылку на COM-библиотеку «Microsoft Shell Controls and Automation» (Shell32), а затем используя папку. GetDetailsOf для запроса расширенных сведений.
Недавно я искал это и наткнулся на этот самый вопрос на форумах MSDN C # General. Я закончил писать это как метод расширения для FileInfo:
public static Dictionary<string, string> GetDetails(this FileInfo fi)
{
Dictionary<string, string> ret = new Dictionary<string, string>();
Shell shl = new ShellClass();
Folder folder = shl.NameSpace(fi.DirectoryName);
FolderItem item = folder.ParseName(fi.Name);
for (int i = 0; i < 150; i++)
{
string dtlDesc = folder.GetDetailsOf(null, i);
string dtlVal = folder.GetDetailsOf(item, i);
if (dtlVal == null || dtlVal == "")
continue;
ret.Add(dtlDesc, dtlVal);
}
return ret;
}
Если вы ищете конкретные записи, вы можете сделать что-то подобное, хотя будет намного быстрее узнать, по какому индексу находятся эти записи (длина - index 27 Я верю) и просто запросите их. Обратите внимание: я не проводил большого исследования того, может ли индекс изменяться (я сомневаюсь в этом), поэтому я использовал словарный подход.
Я бы только что прокомментировал сообщение Микаэля, но у меня пока недостаточно репутации для этого. Я согласен с ним на использование ffmpeg, чтобы вам не требовалось устанавливать кодеки. Вы можете просто проанализировать вывод «ffmpeg -i your_filename», который просто выдаст некоторую информацию о видео, включая продолжительность.
Я не знаю, с какими кодеками вы работаете, но некоторые контейнеры фактически не хранят продолжительность в метаданных (это обычное явление для потоковых контейнеров, поскольку продолжительность неизвестна). Я не знаю, как ffmpeg справляется с этим, но, похоже, он каким-то образом находит это (возможно, путем анализа всего файла на наличие временных кодов).
MediaInfo - отличная библиотека с открытым исходным кодом для этой цели (DLL имеет лицензию LGPL). Пакет загрузки содержит пример приложения на C # (в разделе Developers \ Project \ MSCS \ Example
)
У меня была такая же проблема с небольшим приложением для предварительного просмотра видео.
Проблема в управляемых помощниках отладки. Это проблема при использовании библиотек Managed DirectX 1.1 в VS2005 или 2008. Microsoft сконцентрировалась на MDX2, а затем на XNA, а не на Managed DirectX 1, поэтому не стоит слишком надеяться на исправление.
Простое решение - чтобы отключить обработку исключений LoaderLock во время отладки этого решения. В любом случае это не должно иметь никакого реального влияния на программу, поскольку эта ошибка появляется только в среде отладки.
Чтобы отключить, перейдите в Отладка -> Исключения -> Управляемые помощники отладки и снимите флажок LoaderLock.
Подробнее здесь: http://vivekthangaswamy.blogspot.com/2006/11/loaderlock-was-detected-error-when.html
используя DirectShowLib (http://directshownet.sourceforge.net/)
/// <summary>
/// Gets the length of the video.
/// </summary>
/// <param name="fileName">Name of the file.</param>
/// <param name="length">The length.</param>
/// <returns></returns>
static public bool GetVideoLength(string fileName, out double length)
{
DirectShowLib.FilterGraph graphFilter = new DirectShowLib.FilterGraph();
DirectShowLib.IGraphBuilder graphBuilder;
DirectShowLib.IMediaPosition mediaPos;
length = 0.0;
try
{
graphBuilder = (DirectShowLib.IGraphBuilder)graphFilter;
graphBuilder.RenderFile(fileName, null);
mediaPos = (DirectShowLib.IMediaPosition)graphBuilder;
mediaPos.get_Duration(out length);
return true;
}
catch
{
return false;
}
finally
{
mediaPos = null;
graphBuilder = null;
graphFilter = null;
}
}