[VB.NET] Uitlezen van lengte van movie files

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
Hallo

Ik gebruik momenteel viscom movie player pro active x om de lengte van een avi te lezen.

Het probleem is dat dit een demo versie is, en de full version kost over de 1000 euro.

Omdat dit nu net te veel is voor een hobby programma, wou ik eens vragen jullie alternatieven weten om de lengte van een avi,mkv,mp4 file in vb.net te krijgen?

Bedankt

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

http://www.headbands.com/gspot/

Alles wat jij wilt ;)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Ik denk dat je met de verschillende Media Player componenten en classes die je kunt gebruiken wel de properties van een bestand op moet kunnen vragen. Zolang de codecs geïnstalleerd zijn kan je er dan mee overweg.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

AtleX schreef op vrijdag 12 maart 2010 @ 14:31:
Ik denk dat je met de verschillende Media Player componenten en classes die je kunt gebruiken wel de properties van een bestand op moet kunnen vragen. Zolang de codecs geïnstalleerd zijn kan je er dan mee overweg.
Wat er ook voor zorgt dat iedere client die moet geinstalleerd hebben op zijn pc. Is dat de bedoeling?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
Ik ken Gspot, ik weet alleen niet waar je hiermee naartoe wil.

Ik wil de lengte van de file in vb.net kunnen uitlezen, kan ik dit doen via gspot?

Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
AtleX schreef op vrijdag 12 maart 2010 @ 14:31:
Ik denk dat je met de verschillende Media Player componenten en classes die je kunt gebruiken wel de properties van een bestand op moet kunnen vragen. Zolang de codecs geïnstalleerd zijn kan je er dan mee overweg.
Dat is nu wat ik zoek, ik kan alleen X360 en Viscom vinden, en deze kosten alle2 hopen geld. Kan je mij een voorbeeld geven van een gratis of betaalbare?

Thx

Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
Snake schreef op vrijdag 12 maart 2010 @ 14:39:
[...]

Wat er ook voor zorgt dat iedere client die moet geinstalleerd hebben op zijn pc. Is dat de bedoeling?
Ja, dat moet met de viscom ook, dus das niet echt een probleem.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SiXke: lees topickick binnen 24 uur even door aub

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 08-09 20:34

Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
Ik heb mijn topic niet gekicked, ik heb gewoon geantwoord :?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SiXke schreef op vrijdag 12 maart 2010 @ 17:41:
[...]


Ik heb mijn topic niet gekicked, ik heb gewoon geantwoord :?
In drie verschillende, opeenvolgende, posts. Gebruik de edit knop ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif ) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig. Die waarschuwing staat er ook niet voor niets:

Je hebt zelf als laatste gereageerd in dit topic, wil je wat toevoegen wijzig dan bij voorkeur je laatste bericht.

[ Voor 41% gewijzigd door RobIII op 12-03-2010 17:58 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
Akkoord, dat had ik beter niet gedaan, maar ik heb geantwoord in dezelfde minuut bijna, dus echt naar boven kicken is het niet, ik denk niet dat er elke minuut niewe posts komen :)

Om even op bastv te antwoorden, ik heb dit natuurlijk gedaan, maar dit werkte niet, dus daarom kwam ik hier.

Als ik de standaard wmp.dll gebruik, dan kan ik pas de duration ophalen eens de file 1 secpnd bezit is, maar dan duurt dit te lang.

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 19-09 11:05
't Is lang geleden dat ik er gebruik van heb gemaakt (en ik moet eerlijk zeggen dat ik niet helemaal thuis meer ben in videoformaten), maar als je van een uitdaging houdt en volledige controle wilt hebben, zou je de bestanden zelf bytewise kunnen parsen. http://www.wotsit.org is een site die ik vaak gebruikt heb.

Acties:
  • 0 Henk 'm!

Verwijderd

mediainfolib zou je kunnen gebruiken, ook voorbeelden van hoe te integreren in een aantal talen.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

SiXke schreef op vrijdag 12 maart 2010 @ 16:32:
[...]


Ik ken Gspot, ik weet alleen niet waar je hiermee naartoe wil.

Ik wil de lengte van de file in vb.net kunnen uitlezen, kan ik dit doen via gspot?
Als je de informatie rond GSpot had gelezen had je gezien dat je die command line kunt aanroepen, met customizable output. Dus dan kan je die stream weer inlezen en dan parsen :)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
Ik ben intussen verder geraakt met wmp.dll, door een thread te maken die looped tot de video echt "playing" is:
Visual Basic .NET:
1
2
3
Do While AxWindowsMediaPlayer1.status.ToString.Contains("Connecting")
Loop
Dim mDuration As String = (AxWindowsMediaPlayer1.currentMedia.duration / 60).ToString


Het probleem hiermee is, dat ik geen 2 files snel achter elkaar kan uitlezen, want dan krijg ik het resultaat niet terug naar mijn listview. Als ik dit met 1 file doe wel.

Enig idee hoe ik dit kan oplossen?

Update: Intussen ben ik verder geraakt, maar nu moet ik een listview item aanpassen vanuit een thread, maar ik krijg de cross-thread error. Na even te zoeken vond ik dit voorbeeld:

http://www.codeproject.co...essControlFromThread.aspx

Maar mijn code word dan:
Visual Basic .NET:
1
2
3
4
5
6
7
Private Sub AccessControl(ByVal value As String, ByVal location As Integer)
        If Me.InvokeRequired Then
            Me.Invoke(New MethodInvoker(AddressOf AccessControl(value, location)))
        Else
            lstSeries.Items.Item(location).SubItems(8).Text = value
        End If
    End Sub


Het is niet toegelaten een adressof te doen van een sub met operators, hoe kan ik dit dan oplossen?

Thx

[ Voor 41% gewijzigd door SiXke op 15-03-2010 22:09 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Even getest in C#, maar ik zie niet zoveel problemen. Dat wachten kan zonder 'busy waiting'.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            var fileName = @"....avi";
            var wmp = new WindowsMediaPlayer();
            var media = wmp.newMedia(fileName);
            double duration = media.duration;
            if (duration == 0)
                using (var mre = new ManualResetEvent(false))
                {
                    wmp.OpenStateChange += state =>
                    {
                        if (state == (int)WMPOpenState.wmposMediaOpen)
                            mre.Set();
                    };
                    wmp.settings.mute = true;
                    wmp.currentMedia = media;
                    mre.WaitOne();
                    wmp.controls.stop();
                    duration = media.duration;
                }

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
Ik ben niet zo bekend met C, zou dit ook moeten werken in vb.net dan?

Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 08-09 20:34
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim fileName = "....avi"
Dim wmp = New WindowsMediaPlayer()
Dim media = wmp.newMedia(fileName)
Dim duration As Double = media.duration
If duration = 0 Then
    Using mre = New ManualResetEvent(False)
        wmp.OpenStateChange += Function(state) Do
            If state = CInt(WMPOpenState.wmposMediaOpen) Then
                mre.[Set]()
            End If
        End Function
        wmp.settings.mute = True
        wmp.currentMedia = media
        mre.WaitOne()
        wmp.controls.[stop]()
        duration = media.duration
    End Using
End If

kuch.... http://www.developerfusion.com/tools/convert/csharp-to-vb/

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dat is enkel niet helemaal correct als vertaling... :p Daarnaast is VB.Net standaard STA en is dit MTA-code bedenk ik me. En niet vastlopen bij fouten zou ook wel handig zijn. Je krijgt dan iets als de volgende testcode:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <MTAThread()> Sub Main()
        Dim fileName = "....avi"
        Dim wmp = New WindowsMediaPlayer()
        Dim media = wmp.newMedia(fileName)
        Dim duration As Double = media.duration
        If duration = 0 Then
            Using mre = New ManualResetEvent(False)
                AddHandler wmp.MediaError, Function(state) mre.Set
                AddHandler wmp.OpenStateChange, Function(state) _
                    If(state = WMPOpenState.wmposMediaOpen, mre.Set, False)
                wmp.settings.mute = True
                wmp.currentMedia = media
                mre.WaitOne()
                wmp.controls.stop()
                duration = media.duration
            End Using
        End If
    End Sub

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:46

TeeDee

CQB 241

Dan zou ik persoonlijk toch voor de tip van Verwijderd in "\[VB.NET] Uitlezen van lengte van movie f..." gaan...

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dan verdient MediaInfoLib een linkje. :p Maar dat blijft beta-software, zelfs met mogelijke security-bugs (hoewel dat hier vast niet zo boeit). Misschien is een referentie naar Microsoft Shell Controls and Automation wel handiger:
Visual Basic:
1
2
3
4
5
        Dim fileName = "....avi" 
        Dim shell As New Shell()
        Dim folder = shell.NameSpace(Path.GetDirectoryName(fileName))
        Dim item = folder.ParseName(Path.GetFileName(fileName))
        Dim duration = folder.GetDetailsOf(item, 27)

Bij al deze mogelijkheden heb je enkel weer een andere set van ondersteunde bestanden, en dat is zelfs afhankelijk van wat er geïnstalleerd staat op de computer...

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
pedorus schreef op maandag 15 maart 2010 @ 23:45:
Dat is enkel niet helemaal correct als vertaling... :p Daarnaast is VB.Net standaard STA en is dit MTA-code bedenk ik me. En niet vastlopen bij fouten zou ook wel handig zijn. Je krijgt dan iets als de volgende testcode:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <MTAThread()> Sub Main()
        Dim fileName = "....avi"
        Dim wmp = New WindowsMediaPlayer()
        Dim media = wmp.newMedia(fileName)
        Dim duration As Double = media.duration
        If duration = 0 Then
            Using mre = New ManualResetEvent(False)
                AddHandler wmp.MediaError, Function(state) mre.Set
                AddHandler wmp.OpenStateChange, Function(state) _
                    If(state = WMPOpenState.wmposMediaOpen, mre.Set, False)
                wmp.settings.mute = True
                wmp.currentMedia = media
                mre.WaitOne()
                wmp.controls.stop()
                duration = media.duration
            End Using
        End If
    End Sub
Ik krijg volgende error op deze code:
Error 1 Nested function does not have the same signature as delegate 'Delegate Sub _WMPOCXEvents_MediaErrorEventHandler(sender As Object, e As AxWMPLib._WMPOCXEvents_MediaErrorEvent)'. E:\Docs\Visual Studio 2008\Projects\MediaCenterFiller\MediaCenterFiller\frmMain.vb 1171 44 MediaCenterFiller

Wat doe ik verkeerd?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je gebruikt een functie met de verkeerde signature. Dat moet je toch ook wel zelf uit de error kunnen halen. Verder staat de regel waar het verkeerd gaat er gewoon bij.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Specifiek lijkt het me dat een AxWindowsMediaPlayer niet hetzelfde is als een WindowsMediaPlayer, en dat je een MTAThread-attribuut normaal niet in een frmMain.vb kan hebben..

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
Ik kan wel lezen :) Maar ik ben niet zo ver gevorderd in VB om te snappen hoe ik het kan oplossen :)

Welke dll is die windowsmediaplayer dan? Ik gebruik wmp.dll

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Als je AxWMPLib hebt, heb je automatisch ook WMPLib, zie hier voor een vrij uitgebreide discussie.

Alternatief kun je waarschijnlijk ook gewoon een paar parameters toevoegen, en AxWindowsMediaPlayer blijven gebruiken ipv WindowsMediaPlayer.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • SiXke
  • Registratie: September 2003
  • Laatst online: 30-11-2024
Ik heb idd nu WMPLib gebruikt, en de code returned geen errors meer, maar toch hangt de applicatie.

Als ik debug, blijft hij hangen na mre.WaitOne()

Het probleem is dat ik niet goed begrijp wat da mre object juist doet, dus troubleshooten is niet echt handig.

De <MTATHREAD()> tag zet ik voor de functie waar al dit ingebeurd, of voor de frmMain load?

[ Voor 15% gewijzigd door SiXke op 16-03-2010 18:38 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Die 'tag' (attribuut) hoort te staan bij een entry-punt van je applicatie, en dit voorbeeld komt dus uit een console-project. Je hebt hier enkel een Windows Forms-project als ik het goed zie. Daar moet je niet de main-thread MTA gaan maken, omdat je meestal controls gebruikt die dat niet aankunnen. Je kan die sub main wel aanroepen in een aparte Thread die zelf wel MTA is, als in:
Visual Basic:
1
2
3
        Dim t As New Thread(AddressOf Main)
        t.Start()
        t.Join()

En dan maak je van duration bijvoorbeeld een globale variabele zodat je die kan opvragen na afloop van .Join(). Superhandig is het niet, en om het echt mooi te krijgen zul je je wat moeten verdiepen in multithreading in .net, of een andere opzet moeten kiezen..

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1