2017-02-18 8 views
1

Я добавил эту библиотеку в свой проект UWP и попытался запустить простой медиафайл и получил ошибку ffmpeginterop.ffmpeginteropmss, не зарегистрированную, следующий мой код.ffmpeginterop.uwp библиотека, дающая ошибку не зарегистрированной

  try 
      { 
       // Instantiate FFmpegInteropMSS using the opened local file stream 
       FFmpegMSS = FFmpegInteropMSS.CreateFFmpegInteropMSSFromStream(readStream, false, false); 
       MediaStreamSource mss = FFmpegMSS.GetMediaStreamSource(); 

       if (mss != null) 
       { 
        // Pass MediaStreamSource to Media Element 
        mediaElement.SetMediaStreamSource(mss); 

        // Close control panel after file open 
        Splitter.IsPaneOpen = false; 
       } 
       else 
       { 
        DisplayErrorMessage("Cannot open media"); 
       } 
      } 
      catch (Exception ex) 
      { 
       DisplayErrorMessage(ex.Message); 
      } 

P.S: У меня уже есть, используя заявление для ffmpeginterop на вершине так не происходит ошибка времени компиляции.

EDIT проблема возникла только на моей машине, временно разрешила ее, запустив приложение в режиме x64 и режиме выпуска. Почему проблема возникла в режиме отладки, пока неизвестно.

ответ

1

Одна из возможностей - вы забыли добавить декодер .dlls в свой проект. Если dll добавлены, то .csproj имеют следующие строки.

<ItemGroup> 
     <Content Include="$(SolutionDir)ffmpeg\Build\Windows10\$(PlatformTarget)\bin\avcodec-57.dll" /> 
     <Content Include="$(SolutionDir)ffmpeg\Build\Windows10\$(PlatformTarget)\bin\avdevice-57.dll" /> 
     <Content Include="$(SolutionDir)ffmpeg\Build\Windows10\$(PlatformTarget)\bin\avfilter-6.dll" /> 
     <Content Include="$(SolutionDir)ffmpeg\Build\Windows10\$(PlatformTarget)\bin\avformat-57.dll" /> 
     <Content Include="$(SolutionDir)ffmpeg\Build\Windows10\$(PlatformTarget)\bin\avutil-55.dll" /> 
     <Content Include="$(SolutionDir)ffmpeg\Build\Windows10\$(PlatformTarget)\bin\swresample-2.dll" /> 
     <Content Include="$(SolutionDir)ffmpeg\Build\Windows10\$(PlatformTarget)\bin\swscale-4.dll" /> 

Примечание - Фактический путь зависит от вашей среды Dev.

Вы можете проверить образец проекта, который включен в проект FFmpegInterop. Образец .csproject имеет один и тот же раздел.

https://github.com/Microsoft/FFmpegInterop/tree/master/Samples/SamplesWin10/MediaPlayerCS

+0

Как я могу проверить файл csproj? Я имею в виду, это не файл проекта? как я могу открыть его в текстовой форме, как показано в вашем сообщении, чтобы подтвердить, есть ли у нее эти рефлюксы dll? Если вы спрашиваете, есть ли у меня файлы dll в папке проекта, то нет, у меня их нет bcz. Я загрузил библиотеку из самородок, и у нее не было зависимостей. – touseef

+0

Это было мое непонятое. Я думал, что вы используете здание FFmpegInterop из источника. Если вы используете пакет NuGet, да, вы не должны модифицировать .csproj для добавления dll-декодера. После этого я попытался воссоздать вашу проблему. Я создал простой проект UWP и добавил FFmpegInterop.UWP.1.0.3. Но он работает без ошибок. Извините, но я понятия не имею об этом. – pnp0a03

1

Я проверил ваш код на моей стороне. Я создал пустое приложение uwp и установил пакет nuget FFmpegInterop.UWP 1.0.3. Затем используйте фрагмент кода для воспроизведения локального медиафайла mp4. Это может хорошо работать, и я не могу воспроизвести вашу проблему. Поскольку ваш фрагмент кода не является целым, вот полная демоверсия, которая может успешно работать, и вы можете проверить ее и попытаться найти, что не так.

XAML код

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <MediaElement x:Name="mediaElement" Height="400" Width="400">    
    </MediaElement> 
    <Button x:Name="btnplay" Click="btnplay_Click" Content="play"></Button> 
</StackPanel> 

код за

private async void btnplay_Click(object sender, RoutedEventArgs e) 
{ 
    FileOpenPicker openPicker = new FileOpenPicker(); 
    openPicker.ViewMode = PickerViewMode.Thumbnail; 
    openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
    openPicker.FileTypeFilter.Add(".mp3"); 
    openPicker.FileTypeFilter.Add(".mp4"); 
    openPicker.FileTypeFilter.Add(".mkv"); 
    StorageFile file = await openPicker.PickSingleFileAsync(); 
    using (IRandomAccessStream readStream = await file.OpenAsync(FileAccessMode.Read)) 
    { 
     try 
     { 
      // Instantiate FFmpegInteropMSS using the opened local file stream 
      var FFmpegMSS = FFmpegInteropMSS.CreateFFmpegInteropMSSFromStream(readStream, false, false); 
      MediaStreamSource mss = FFmpegMSS.GetMediaStreamSource(); 
      if (mss != null) 
      { 
       // Pass MediaStreamSource to Media Element 
       mediaElement.SetMediaStreamSource(mss); 
       // Close control panel after file open 
       //Splitter.IsPaneOpen = false; 
      } 
      else 
      { 
       System.Diagnostics.Debug.WriteLine("Cannot open media"); 
      } 
     } 
     catch (Exception ex) 
     { 
      System.Diagnostics.Debug.WriteLine((ex.Message)); 
     } 
    } 
} 

Я тестировал на локальном окне машины 10 сборки 14393. Подробнее пожалуйста, ссылку this article. И here - это аналогичная проблема с вами, с которой вы можете попытаться обратиться.

+0

У меня также есть сборка 14393, и я копирую вставку ur XAML и C# и по-прежнему получаю точно такую ​​же ошибку, как и раньше :(просто не имеет никакого смысла, какой режим отлаживал? X84 или x64 в visual studio для этого проекта? – touseef

+0

преобразовал сборку в x63 в визуальную студию, и теперь он запускает файл mp4, но он отображает видео в течение 2, 3 секунд, а затем медиа-поиск идет прямо в конец видео, и если я снова нажму кнопку воспроизведения, это приведет к неудачному декодированию ошибка, записанная поверх медиаплеера. – touseef

+0

@touseef Я не могу воспроизвести единственную игру за 2-3 секунды, проверьте, что-то не так с вашим файлом mp4. Дублируемое воспроизведение может привести к ошибке, так как файл уже открыт для чтения. –

Смежные вопросы