virtual void ShutdownModule() override { if (!Initialized) { return; } Initialized = false; // unregister video player factory IMediaModule* MediaModule = FModuleManager::GetModulePtr<IMediaModule>("Media"); if (MediaModule != nullptr) { MediaModule->UnregisterPlayerFactory(*this); } // unregister logging callback FVlc::LogUnset(VlcInstance); // release LibVLC instance FVlc::Release((FLibvlcInstance*)VlcInstance); VlcInstance = nullptr; // shut down LibVLC FVlc::Shutdown(); // unregister settings ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings"); if (SettingsModule != nullptr) { SettingsModule->UnregisterSettings("Project", "Plugins", "VlcMedia"); } }
virtual void StartupModule() override { // load required libraries IMediaModule* MediaModule = FModuleManager::LoadModulePtr<IMediaModule>("Media"); if (MediaModule == nullptr) { UE_LOG(LogWmfMedia, Log, TEXT("Failed to load Media module")); return; } if (!LoadRequiredLibraries()) { UE_LOG(LogWmfMedia, Log, TEXT("Failed to load required Windows Media Foundation libraries")); return; } // initialize Windows Media Foundation HRESULT Result = MFStartup(MF_VERSION); if (FAILED(Result)) { UE_LOG(LogWmfMedia, Log, TEXT("Failed to initialize Windows Media Foundation, Error %i"), Result); return; } // initialize supported media formats SupportedFileTypes.Add(TEXT("3g2"), LOCTEXT("Format3g2", "3G2 Multimedia Stream")); SupportedFileTypes.Add(TEXT("3gp"), LOCTEXT("Format3gp", "3GP Video Stream")); SupportedFileTypes.Add(TEXT("3gp2"), LOCTEXT("Format3gp2", "3GPP2 Multimedia File")); SupportedFileTypes.Add(TEXT("3gpp"), LOCTEXT("Format3gpp", "3GPP Multimedia File")); SupportedFileTypes.Add(TEXT("aac"), LOCTEXT("FormatAac", "MPEG-2 Advanced Audio Coding File")); SupportedFileTypes.Add(TEXT("adts"), LOCTEXT("FormatAdts", "Audio Data Transport Stream")); SupportedFileTypes.Add(TEXT("asf"), LOCTEXT("FormatAsf", "ASF Media File")); SupportedFileTypes.Add(TEXT("avi"), LOCTEXT("FormatAvi", "Audio Video Interleave File")); SupportedFileTypes.Add(TEXT("m4v"), LOCTEXT("FormatM4v", "Apple MPEG-4 Video")); SupportedFileTypes.Add(TEXT("mov"), LOCTEXT("FormatMov", "Apple QuickTime Movie")); SupportedFileTypes.Add(TEXT("mp4"), LOCTEXT("FormatMp4", "MPEG-4 Movie")); SupportedFileTypes.Add(TEXT("sami"), LOCTEXT("FormatSami", "Synchronized Accessible Media Interchange (SAMI) File")); SupportedFileTypes.Add(TEXT("smi"), LOCTEXT("FormatSmi", "Synchronized Multimedia Integration (SMIL) File")); SupportedFileTypes.Add(TEXT("wmv"), LOCTEXT("FormatWmv", "Windows Media Video")); // initialize supported URI schemes SupportedUriSchemes.Add(TEXT("http://")); SupportedUriSchemes.Add(TEXT("httpd://")); SupportedUriSchemes.Add(TEXT("https://")); SupportedUriSchemes.Add(TEXT("mms://")); SupportedUriSchemes.Add(TEXT("rtsp://")); SupportedUriSchemes.Add(TEXT("rtspt://")); SupportedUriSchemes.Add(TEXT("rtspu://")); // register factory MediaModule->RegisterPlayerFactory(*this); Initialized = true; }
virtual void ShutdownModule() override { if (IsSupported()) { IMediaModule* MediaModule = FModuleManager::GetModulePtr<IMediaModule>("Media"); if (nullptr != MediaModule) { MediaModule->UnregisterPlayerFactory(*this); } } }
virtual void StartupModule() override { if (IsSupported()) { IMediaModule* MediaModule = FModuleManager::LoadModulePtr<IMediaModule>("Media"); if (nullptr != MediaModule) { SupportedFileTypes.Add(TEXT("3gpp"), LOCTEXT("Format3gpp", "3GPP Multimedia File")); SupportedFileTypes.Add(TEXT("aac"), LOCTEXT("FormatAac", "MPEG-2 Advanced Audio Coding File")); SupportedFileTypes.Add(TEXT("mp4"), LOCTEXT("FormatMp4", "MPEG-4 Movie")); MediaModule->RegisterPlayerFactory(*this); } } }
virtual void ShutdownModule() override { if (!Initialized) { return; } Initialized = false; // unregister video player factory IMediaModule* MediaModule = FModuleManager::GetModulePtr<IMediaModule>("Media"); if (MediaModule != nullptr) { MediaModule->UnregisterPlayerFactory(*this); } }
virtual void StartupModule( ) override { // load required libraries IMediaModule* MediaModule = FModuleManager::LoadModulePtr<IMediaModule>("Media"); if (MediaModule == nullptr) { UE_LOG(LogAvfMedia, Warning, TEXT("Failed to load Media module")); return; } // initialize supported media formats SupportedFormats.Add(TEXT("avi"), LOCTEXT("FormatAvi", "Audio Video Interleave File")); SupportedFormats.Add(TEXT("m4v"), LOCTEXT("FormatM4v", "Apple MPEG-4 Video")); SupportedFormats.Add(TEXT("mov"), LOCTEXT("FormatMov", "Apple QuickTime Movie")); SupportedFormats.Add(TEXT("mp4"), LOCTEXT("FormatMp4", "MPEG-4 Movie")); // register factory MediaModule->RegisterPlayerFactory(*this); Initialized = true; }
void UMediaPlayer::InitializePlayer() { if (URL != CurrentUrl) { // close previous player CurrentUrl = FString(); if (Player.IsValid()) { Player->Close(); Player->OnClosed().RemoveAll(this); Player->OnOpened().RemoveAll(this); Player.Reset(); } if (URL.IsEmpty()) { return; } // create new player IMediaModule* MediaModule = FModuleManager::LoadModulePtr<IMediaModule>("Media"); if (MediaModule == nullptr) { return; } Player = MediaModule->CreatePlayer(URL); if (!Player.IsValid()) { return; } Player->OnClosed().AddUObject(this, &UMediaPlayer::HandleMediaPlayerMediaClosed); Player->OnOpened().AddUObject(this, &UMediaPlayer::HandleMediaPlayerMediaOpened); // open the new media file bool OpenedSuccessfully = false; if (URL.Contains(TEXT("://"))) { OpenedSuccessfully = Player->Open(URL); } else { const FString FullUrl = FPaths::ConvertRelativePathToFull(FPaths::IsRelative(URL) ? FPaths::GameContentDir() / URL : URL); if (StreamMode == EMediaPlayerStreamModes::MASM_FromUrl) { OpenedSuccessfully = Player->Open(FullUrl); } else if (FPaths::FileExists(FullUrl)) { FArchive* FileReader = IFileManager::Get().CreateFileReader(*FullUrl); if (FileReader == nullptr) { return; } if (FileReader->TotalSize() > 0) { TArray<uint8>* FileData = new TArray<uint8>(); FileData->AddUninitialized(FileReader->TotalSize()); FileReader->Serialize(FileData->GetData(), FileReader->TotalSize()); OpenedSuccessfully = Player->Open(MakeShareable(FileData), FullUrl); } delete FileReader; } } // finish initialization if (OpenedSuccessfully) { CurrentUrl = URL; } } if (Player.IsValid()) { Player->SetLooping(Looping); } }
TSharedPtr<IMediaPlayer> UMediaPlayer::FindPlayerForUrl(const FString& Url, const IMediaOptions& Options) { FName PlayerName = Options.GetDesiredPlayerName(); if (PlayerName == NAME_None) { PlayerName = DesiredPlayerName; } // reuse existing player if desired if (Player.IsValid() && (PlayerName == Player->GetName())) { return Player; } // load media module IMediaModule* MediaModule = FModuleManager::LoadModulePtr<IMediaModule>("Media"); if (MediaModule == nullptr) { UE_LOG(LogMediaAssets, Error, TEXT("Failed to load Media module")); return nullptr; } // try to create desired player if (PlayerName != NAME_None) { IMediaPlayerFactory* Factory = MediaModule->GetPlayerFactory(PlayerName); if (Factory == nullptr) { UE_LOG(LogMediaAssets, Error, TEXT("Could not find desired player %s for %s"), *PlayerName.ToString(), *Url); return nullptr; } TSharedPtr<IMediaPlayer> NewPlayer = Factory->CreatePlayer(); if (!NewPlayer.IsValid()) { UE_LOG(LogMediaAssets, Error, TEXT("Failed to create desired player %s for %s"), *PlayerName.ToString(), *Url); return nullptr; } return NewPlayer; } // try to reuse existing player if (Player.IsValid()) { IMediaPlayerFactory* Factory = MediaModule->GetPlayerFactory(Player->GetName()); if ((Factory != nullptr) && Factory->CanPlayUrl(Url, Options)) { return Player; } } // try to auto-select new player const TArray<IMediaPlayerFactory*>& PlayerFactories = MediaModule->GetPlayerFactories(); const FString RunningPlatformName(FPlatformProperties::IniPlatformName()); for (IMediaPlayerFactory* Factory : PlayerFactories) { if (!Factory->SupportsPlatform(RunningPlatformName) || !Factory->CanPlayUrl(Url, Options)) { continue; } TSharedPtr<IMediaPlayer> NewPlayer = Factory->CreatePlayer(); if (NewPlayer.IsValid()) { return NewPlayer; } } UE_LOG(LogMediaAssets, Error, TEXT("Could not find a native player for %s"), *Url); return nullptr; }
virtual void StartupModule() override { // load required libraries IMediaModule* MediaModule = FModuleManager::LoadModulePtr<IMediaModule>("Media"); if (MediaModule == nullptr) { UE_LOG(LogVlcMedia, Warning, TEXT("Failed to load Media module")); return; } // initialize LibVLC if (!FVlc::Initialize()) { UE_LOG(LogVlcMedia, Warning, TEXT("Failed to initialize libvlc")); return; } // register settings ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings"); if (SettingsModule != nullptr) { ISettingsSectionPtr SettingsSection = SettingsModule->RegisterSettings("Project", "Plugins", "VlcMedia", LOCTEXT("VlcMediaSettingsName", "VLC Media"), LOCTEXT("VlcMediaSettingsDescription", "Configure the VLC Media plug-in."), GetMutableDefault<UVlcMediaSettings>() ); if (SettingsSection.IsValid()) { SettingsSection->OnModified().BindRaw(this, &FVlcMediaModule::HandleSettingsSaved); } } // create LibVLC instance const ANSICHAR* Args[] = { TCHAR_TO_ANSI(*(FString(TEXT("--plugin-path=")) + FVlc::GetPluginDir())), "--aout", "amem", "--intf", "dummy", "--no-disable-screensaver", // "--no-osd", "--no-snapshot-preview", "--no-stats", "--no-video-title-show", "--no-xlib", // "--text-renderer", "dummy", "--vout", "vmem", "--vmem-chroma", "RV32" }; int Argc = sizeof(Args) / sizeof(*Args); VlcInstance = FVlc::New(Argc, Args); if (VlcInstance == nullptr) { UE_LOG(LogVlcMedia, Warning, TEXT("Failed to create VLC instance (%s)"), ANSI_TO_TCHAR(FVlc::Errmsg())); FVlc::Shutdown(); return; } // register logging callback InitializeLogging(); // initialize supported media formats SupportedFileTypes.Add(TEXT("3gp"), LOCTEXT("Format3gp", "3GP Video Stream")); SupportedFileTypes.Add(TEXT("a52"), LOCTEXT("FormatA52", "Dolby Digital AC-3 Audio")); SupportedFileTypes.Add(TEXT("aac"), LOCTEXT("FormatAac", "MPEG-2 Advanced Audio Coding File")); SupportedFileTypes.Add(TEXT("asf"), LOCTEXT("FormatAsf", "ASF Media File")); SupportedFileTypes.Add(TEXT("au"), LOCTEXT("FormatAu", "Sun Microsystems Audio")); SupportedFileTypes.Add(TEXT("avi"), LOCTEXT("FormatAvi", "Audio Video Interleave File")); SupportedFileTypes.Add(TEXT("dts"), LOCTEXT("FormatDts", "Digital Theater System File")); SupportedFileTypes.Add(TEXT("dv"), LOCTEXT("FormatDv", "Digital Video File")); SupportedFileTypes.Add(TEXT("flac"), LOCTEXT("FormatFlac", "Free Lossless Audio Codec")); SupportedFileTypes.Add(TEXT("flv"), LOCTEXT("FormatFlv", "Adobe Flash Video")); SupportedFileTypes.Add(TEXT("mkv"), LOCTEXT("FormatMkv", "Matroska Video")); SupportedFileTypes.Add(TEXT("mka"), LOCTEXT("FormatMka", "Matroska Audio")); SupportedFileTypes.Add(TEXT("mov"), LOCTEXT("FormatMov", "Apple QuickTime Movie")); SupportedFileTypes.Add(TEXT("mp2"), LOCTEXT("FormatMp2", "MPEG-1 Audio")); SupportedFileTypes.Add(TEXT("mp3"), LOCTEXT("FormatMp3", "MPEG-2 Audio")); SupportedFileTypes.Add(TEXT("mp4"), LOCTEXT("FormatMp4", "MPEG-4 Movie")); SupportedFileTypes.Add(TEXT("mpg"), LOCTEXT("FormatMpg", "MPEG-2 Movie")); SupportedFileTypes.Add(TEXT("nsc"), LOCTEXT("FormatNsc", "Windows Media Station")); SupportedFileTypes.Add(TEXT("nsv"), LOCTEXT("FormatNsv", "Nullsoft Streaming Video")); SupportedFileTypes.Add(TEXT("nut"), LOCTEXT("FormatNut", "NUT Multimedia Container")); SupportedFileTypes.Add(TEXT("ogm"), LOCTEXT("FormatMp4", "Ogg Multimedia")); SupportedFileTypes.Add(TEXT("ogg"), LOCTEXT("FormatOgg", "Ogg Multimedia")); SupportedFileTypes.Add(TEXT("ra"), LOCTEXT("FormatRa", "Real Audio")); SupportedFileTypes.Add(TEXT("ram"), LOCTEXT("FormatRam", "Real Audio Metadata")); SupportedFileTypes.Add(TEXT("rm"), LOCTEXT("FormatRm", "Real Media")); SupportedFileTypes.Add(TEXT("rmvb"), LOCTEXT("FormatRmvb", "Real Media VBR")); SupportedFileTypes.Add(TEXT("rv"), LOCTEXT("FormatRv", "Real Video")); SupportedFileTypes.Add(TEXT("ts"), LOCTEXT("FormatTs", "MPEG-2 Transport Stream")); SupportedFileTypes.Add(TEXT("tac"), LOCTEXT("FormatTac", "True Audio Codec File")); SupportedFileTypes.Add(TEXT("tta"), LOCTEXT("FormatTta", "True Audio Codec File")); SupportedFileTypes.Add(TEXT("ty"), LOCTEXT("FormatTy", "Tivo Container")); SupportedFileTypes.Add(TEXT("vid"), LOCTEXT("FormatVid", "Generic Video File")); SupportedFileTypes.Add(TEXT("wav"), LOCTEXT("FormatWav", "Wave Audio File")); SupportedFileTypes.Add(TEXT("wmv"), LOCTEXT("FormatWmv", "Windows Media Video")); SupportedFileTypes.Add(TEXT("xa"), LOCTEXT("FormatXa", "PlayStation Audio File")); // initialize supported URI schemes SupportedUriSchemes.Add(TEXT("cdda://")); SupportedUriSchemes.Add(TEXT("file://")); SupportedUriSchemes.Add(TEXT("dvd://")); SupportedUriSchemes.Add(TEXT("ftp://")); SupportedUriSchemes.Add(TEXT("http://")); SupportedUriSchemes.Add(TEXT("https://")); SupportedUriSchemes.Add(TEXT("mms://")); SupportedUriSchemes.Add(TEXT("rtp://")); SupportedUriSchemes.Add(TEXT("rtsp://")); SupportedUriSchemes.Add(TEXT("sap://")); SupportedUriSchemes.Add(TEXT("screen://")); SupportedUriSchemes.Add(TEXT("vcd://")); // register factory MediaModule->RegisterPlayerFactory(*this); Initialized = true; }
virtual void StartupModule() override { // load required libraries IMediaModule* MediaModule = FModuleManager::LoadModulePtr<IMediaModule>("Media"); if (MediaModule == nullptr) { UE_LOG(LogDsMedia, Warning, TEXT("Failed to load Media module")); return; } // initialize DirectShow // initialize supported media formats /* SupportedFileTypes.Add(TEXT("3gp"), LOCTEXT("Format3gp", "3GP Video Stream")); SupportedFileTypes.Add(TEXT("a52"), LOCTEXT("FormatA52", "Dolby Digital AC-3 Audio")); SupportedFileTypes.Add(TEXT("aac"), LOCTEXT("FormatAac", "MPEG-2 Advanced Audio Coding File")); SupportedFileTypes.Add(TEXT("asf"), LOCTEXT("FormatAsf", "ASF Media File")); SupportedFileTypes.Add(TEXT("au"), LOCTEXT("FormatAu", "Sun Microsystems Audio")); SupportedFileTypes.Add(TEXT("avi"), LOCTEXT("FormatAvi", "Audio Video Interleave File")); SupportedFileTypes.Add(TEXT("dts"), LOCTEXT("FormatDts", "Digital Theater System File")); SupportedFileTypes.Add(TEXT("dv"), LOCTEXT("FormatDv", "Digital Video File")); SupportedFileTypes.Add(TEXT("flac"), LOCTEXT("FormatFlac", "Free Lossless Audio Codec")); SupportedFileTypes.Add(TEXT("flv"), LOCTEXT("FormatFlv", "Adobe Flash Video")); SupportedFileTypes.Add(TEXT("mkv"), LOCTEXT("FormatMkv", "Matroska Video")); SupportedFileTypes.Add(TEXT("mka"), LOCTEXT("FormatMka", "Matroska Audio")); SupportedFileTypes.Add(TEXT("mov"), LOCTEXT("FormatMov", "Apple QuickTime Movie")); SupportedFileTypes.Add(TEXT("mp2"), LOCTEXT("FormatMp2", "MPEG-1 Audio")); SupportedFileTypes.Add(TEXT("mp3"), LOCTEXT("FormatMp3", "MPEG-2 Audio")); SupportedFileTypes.Add(TEXT("mp4"), LOCTEXT("FormatMp4", "MPEG-4 Movie")); SupportedFileTypes.Add(TEXT("mpg"), LOCTEXT("FormatMpg", "MPEG-2 Movie")); SupportedFileTypes.Add(TEXT("nsc"), LOCTEXT("FormatNsc", "Windows Media Station")); SupportedFileTypes.Add(TEXT("nsv"), LOCTEXT("FormatNsv", "Nullsoft Streaming Video")); SupportedFileTypes.Add(TEXT("nut"), LOCTEXT("FormatNut", "NUT Multimedia Container")); SupportedFileTypes.Add(TEXT("ogm"), LOCTEXT("FormatMp4", "Ogg Multimedia")); SupportedFileTypes.Add(TEXT("ogg"), LOCTEXT("FormatOgg", "Ogg Multimedia")); SupportedFileTypes.Add(TEXT("ra"), LOCTEXT("FormatRa", "Real Audio")); SupportedFileTypes.Add(TEXT("ram"), LOCTEXT("FormatRam", "Real Audio Metadata")); SupportedFileTypes.Add(TEXT("rm"), LOCTEXT("FormatRm", "Real Media")); SupportedFileTypes.Add(TEXT("rmvb"), LOCTEXT("FormatRmvb", "Real Media VBR")); SupportedFileTypes.Add(TEXT("rv"), LOCTEXT("FormatRv", "Real Video")); SupportedFileTypes.Add(TEXT("ts"), LOCTEXT("FormatTs", "MPEG-2 Transport Stream")); SupportedFileTypes.Add(TEXT("tac"), LOCTEXT("FormatTac", "True Audio Codec File")); SupportedFileTypes.Add(TEXT("tta"), LOCTEXT("FormatTta", "True Audio Codec File")); SupportedFileTypes.Add(TEXT("ty"), LOCTEXT("FormatTy", "Tivo Container")); SupportedFileTypes.Add(TEXT("vid"), LOCTEXT("FormatVid", "Generic Video File")); SupportedFileTypes.Add(TEXT("wav"), LOCTEXT("FormatWav", "Wave Audio File")); SupportedFileTypes.Add(TEXT("wmv"), LOCTEXT("FormatWmv", "Windows Media Video")); SupportedFileTypes.Add(TEXT("xa"), LOCTEXT("FormatXa", "PlayStation Audio File")); // initialize supported URI schemes SupportedUriSchemes.Add(TEXT("cdda://")); SupportedUriSchemes.Add(TEXT("file://")); SupportedUriSchemes.Add(TEXT("dvd://")); SupportedUriSchemes.Add(TEXT("ftp://")); SupportedUriSchemes.Add(TEXT("http://")); SupportedUriSchemes.Add(TEXT("https://")); SupportedUriSchemes.Add(TEXT("mms://")); SupportedUriSchemes.Add(TEXT("rtp://")); SupportedUriSchemes.Add(TEXT("rtsp://")); SupportedUriSchemes.Add(TEXT("sap://")); SupportedUriSchemes.Add(TEXT("screen://")); SupportedUriSchemes.Add(TEXT("vcd://")); */ // register factory MediaModule->RegisterPlayerFactory(*this); Initialized = true; }