![]() |
Versuch FFMPEG unter Android zum Laufen zu bekommen
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
wie der eine oder andere sicher schon gelsen hat, versuche ich Renate Schaaf's FFMPEG Videoerzeugungs Demo unter ANdroid zum Laufen zu bekommen. Ich bin damit zwar schon etwas weiter gekommen, hänge jetzt aber fest. Anbei mal der aktuelle Stand. Das FFMultidemoLibraries.zip Archiv muss in den Projektordner entpackt werden, da dort die für Android 32 bit nötigen "shared objects" drin sind. Ich bin inzwischen soweit, dass ich diese geladen bekomme und das Bestimmen von Codecs hab ich von Dateiendung auf MIME-Type umgestellt, da ersteres unter Android immer Probleme verursachte bzw. nichts fand für .mp4. So, das Problem ist nun der Aufruf der Funktion ret := avcodec_open2(c, codec, @CodecSetup.OptionsDictionary); in UBitmaps2VideoM's Konstruktor. Der liefert als Rückgabewert immer -13, was keine Berechtigung bedeutet. Dabei ist es egal, ob ich als Video Ausgabepfad den GetSharedDownloadsPath nutze und vorher Schreibberechtigung auf den externen Speicher anfordere, oder ob ich nur nach GetDocumentsPath schreiben will. Was für eine Berechtigung fehlt mir da? |
AW: Versuch FFMPEG unter Android zum Laufen zu bekommen
Versuch mal nil statt @CodecSetup.OptionsDictionary, was anderes fällt mir nicht ein.
Ich habe festgestellt, dass die strings die ich übergeben habe, wenn PAnsichar erforderlich war, nicht ordentlich 0-terminiert sind. Win32 fand das wohl nicht schlimm. Aber vielleicht trägt das zu den Android-Problemen bei. So habe ichs jetzt geändert:
Delphi-Quellcode:
PAnsiChar(@bytes[0])
bytes := TEncoding.UTF8.GetBytes(aString);
SetLength(bytes,Length(bytes)+1); bytes[Length(bytes)-1]:=Byte(#0); enthält dann den richtigen string. Wenn das irgendwie weniger "von hinten durch die Brust ins Auge" geht, wäre ich interessiert. Zur Erklärung: Unter Android ist PAnsiChar = MarshaledAString; |
AW: Versuch FFMPEG unter Android zum Laufen zu bekommen
Hallo,
danke für deine Ideen. Habe beide umgesetzt, ist nur leider auch noch nicht die Lösung... Grüße TurboMagic |
AW: Versuch FFMPEG unter Android zum Laufen zu bekommen
Für dein 30 FPS Problem ist das aber eine ziemlich umständliche Lösung.
Leider hattest du keine Rückmeldung mehr dazu gegeben: ![]() |
AW: Versuch FFMPEG unter Android zum Laufen zu bekommen
Zitat:
ein funktionierender Lösungsansatz. Unser Video würde auch nur wenige Sekunden Lang. |
AW: Versuch FFMPEG unter Android zum Laufen zu bekommen
Hallo,
bin noch nicht dazu gekommen es auszuprobieren, aber könnte es sein, dass das was hier beschrieben ist: ![]() mit rein spuckt? Ich weiß jetzt nicht ob wir den h264 encoder selektiert haben da die Namen in der Encoder Auswahlliste leider leer sind (muss mal die Demo so umbauen, dass nicht die Namen gelistet werden sondern was anderes aussagekräftiges) Grüße TurboMagic PS: Renate, wie weit ist deine Üublikation als Open Source gediehen? |
AW: Versuch FFMPEG unter Android zum Laufen zu bekommen
Ok, ich sah' inzwischen dass im Code ein entsprechender Aufruf der anderen Funktion vorher drin ist.
Also mal doch testhalber einen anderen Codec probieren. Für meinen Versuch mittels MIME-Type video/mp4 bekomme ich immerhin 2 gelistet. |
AW: Versuch FFMPEG unter Android zum Laufen zu bekommen
Hallo,
klappt jetzt: 1. doch über Dateiendung gehen, der ursprüngliche Code war doch ok 2. Anzeige der Encoder so umbauen, dass bei Android nicht der long_name sondern der name angezeigt wird. 3. Den Versuch den bevorzugten Encoder zu ermitteln bei Android unterlassen, da das eine Exception verursacht 4. Vor dem Erzeugen des Videos (TPath.GetPublicDownloadsPath) Berechtigung für exteral storage abfragen und im Event davon dann erst den Video erzeugen. Dann gibt's kein Berechtigungsgemecker mehr... Grüße TurboMagic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz