2009-12-22 14 views

risposta

0

Beh, mi ci è voluto un po 'ma ho rotto questo.
Passare attraverso la pipeline del contenuto non è un'opzione, dal momento che è necessario installare GameStudio.
Ho finito con il reverse engineering del generatore di contenuti XNA per capire come creare i miei file XNB . Risulta che per i file WMV l'XNB è un semplice descrittore binario.
Ora creo un XNB per qualsiasi WMV che trovo in runtime, lo inserisco nella cartella Contenuto,
e funziona perfettamente.

+3

Hey Shachar, sto usando il metodo che usa il GameStudio ma mi piacerebbe un metodo più semplice. Puoi fornire ulteriori dettagli sulla soluzione alla quale sei arrivato? Qualche possibilità di condividere il codice per generare xnb per wmvs? – JohnU

+0

@Shachar Weis piacerebbe vedere come l'hai fatto, cura di condividere? Questo potrebbe essere molto utile! – TimothyP

1

Questo purtroppo non funzionerà ... la loro API richiede che il video venga elaborato attraverso la pipeline di contenuti.

Non l'ho aggiornato poiché le API video sono state rilasciate dal team XNA, ma è possibile controllare questo progetto open source che ho scritto, Scurvy.Media (http://scurvymedia.codeplex.com/). Era anche una pipeline di contenuti, ma forse è possibile modificarlo per funzionare tramite un metodo di tipo .FromFile.

non esitate a contattarmi via codeplex se avete domande. :-)

0

Si potrebbe anche provare il DirectShow Video Player XNA:
http://xnadsplayer.codeplex.com/

ho l'ho mai usato, quindi non so come funziona, ma è un'altra opzione per voi.

4

Si potrebbe provare a utilizzare l'API video aggiunta in XNA 3.1, insieme allo winform content loading sample sul sito dei creator. L'esempio mostra come consentire all'utente di selezionare un file di contenuto e fare in modo che il sistema lo compili in .xnb e lo carichi nuovamente in memoria in fase di runtime.

+0

Questo esempio carica i modelli con: contentBuilder.Add (fileName, "Model", null, "ModelProcessor"); Non sono riuscito a trovare un "Processore" che avrebbe caricato Video. Ho provato "VideoProcessor" Ma non funziona. –

2

Come indicato da Afid, è possibile modificare winform content loading sample.

per farlo accettare WMVs, è necessario modificare in questo modo:

Aggiungere VideoImporters alla matrice assemblee in ContentBuilder.cs:

static string[] pipelineAssemblies = 
{ 
    "Microsoft.Xna.Framework.Content.Pipeline.FBXImporter" + xnaVersion, 
    "Microsoft.Xna.Framework.Content.Pipeline.XImporter" + xnaVersion, 
    "Microsoft.Xna.Framework.Content.Pipeline.TextureImporter" + xnaVersion, 
    "Microsoft.Xna.Framework.Content.Pipeline.EffectImporter" + xnaVersion, 
    "Microsoft.Xna.Framework.Content.Pipeline.VideoImporters" + xnaVersion  
}; 

Poi nel MainForm.cs cambia

contentBuilder.Add(fileName, "Model", null , "ModelProcessor"); 

a

contentBuilder.Add(fileName, "Video", "WmvImporter" , "VideoProcessor"); 

Sarà quindi necessario riprodurre il video utilizzando il metodo descritto nello Playing a Video on a Surface example

Questo metodo funziona solo con errore utilizzando la versione 3.1 dell'esempio di caricamento del contenuto; in XNA 4 come ho descritto throws a Pinvoke error. Ho pubblicato i forum XNA nella speranza di trovare una soluzione a questo problema.

EDIT: Ho ricevuto la seguente risposta da un XNA Framework Dev in riferimento all'eccezione PInvoke:

È possibile ignorare questo avvertimento. Questo MDA è attivato per impostazione predefinita da VS2010 per indicare potenziali problemi perf per pappagalli che non dispongono della convenzione di chiamata esplicita . Prima era VS2010 che era disattivato di default quindi è per questo che non lo hai visto in 3.1.Abbiamo scoperto questo poco troppo tardi nel gioco GS4 per farlo andare via ma essenzialmente non ci sono problemi con la funzionalità . Si dovrebbe colpire questo solo quando si è sviluppo/debug dei processori personalizzati . È comprensibile che sia fastidioso e che tu possa disattivarlo con andando in Debug-> Eccezioni-> Gestito Debugging Assistenti-> PInvokeStackImbalance. Noi lo faremo andare via per la prossima versione .

1

John U. È possibile aprire il file XNB con un editor esadecimale e verrà visualizzato il formato. Il nome del file video corrispondente è lì, puoi sovrascriverlo con il nome file corrispondente di cui hai bisogno. Questo è quello che ho fatto per il mio progetto. Lavorare su un modo per scrivere il file binario me stesso ora.

Problemi correlati