Video aufnehmen

  • Sers,


    ich recherchier gerade für mein nächstes Projekt, bei dem es möglich sein soll aus der eigenen App heraus Videos sowohl mit der Front (wenn vorhanden) als auch Back Kamera aufzunehmen.


    Mein bisheriger Ansatz ist es, beim Klick auf den Button eine SurfaceView zu erzeugen, einzuhängen und einen SurfaceHolder zu initialisieren. Dem Holder füge ich als Callback die Activity hinzu, die die SurfaceHolder.Callback implementiert.


    Das ganze funktioniert zwar beim ersten mal, wenn ich auf einen Button klicke, jedoch wenn ich die Kamera wechseln will friert das Bild einfach ein. Zum Anderen ist das Bild irgendwie verzerrt und um 90° nach links geneigt ... irgendwie stimmt da was noch nicht so ganz.


    Ist mein Ansatz generell ok so, oder macht man das gaaaaaanz anders? Hat jemand Tipps? Find irgendwie kein so richtig brauchbares Tutorial :(



    Gruß,
    matze


    EDIT:


    Ok, hab wohl beim Klick auf den Button was nich sauber released/removed/gecleared. Ich stoppe nun das Preview, release die Kamera, zerstöre Surface View und Holder und baue das ganze neu zusammen. Funktioniert. Dazu noch ein

    Java
    camera.setDisplayOrientation(90);


    und das Bild ist richtig rum. Zwischenfrage: Sind diese 90° allgemeingültig oder ist meine Kamera nur irgendwie "schief" eingebaut? Man weiß ja nie ... hab hier ein Tablet bei dem das ganze Display verkehrt herum drin sitzt ^^ (Arnova 9G2 ... was will man erwarten)


    Nun geht es daran das ganze aufzunehmen und ab zu speichern ... Da ist wohl nun der MediaRecorder gefragt ... mal schaun

  • Also irgendwie komm ich grad nicht weiter ...


    Mein bisheriger Code schaut wie Folgt aus:



    meine Permissions


    und das Ganze führt zu folgendem LogCat output:




    Ich würd mich aber eigentlich an die API halten und der Code entspricht auch den Beispielen, die ich so gefunden habe ...

    Zitat

    Sets the format of the output file produced during recording. Call this after setAudioSource()/setVideoSource() but before prepare().


    Mach ich ja eigentlich ...


    Hat jemand eine Idee?


    Gruß,
    matze


    EDIT:
    Ich steh echt auf dem Schlauch -.- hab sogar ne Schritt für Schritt Anleitung gefunden, die eigentlich alles klärt, aber ich seh meinen Fehler nicht ... hier der Link: Camera - Capturing videos

  • Hoi,


    hab einiges geändert, aber grundlegend ist das Problem hier

    Java
    CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
    	    recorder.setProfile(profile);
    	    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);


    weil mein Nexus die QUALITY_HIGH offenbar nicht hat ... lese das nun so aus:



    und bekomme das 720P. Nun kann ich Videos aufnehmen und abspeichern. Jedoch drückt es mir die Preview von der Höhe her zusammen und das aufgenommene Video ist nicht in der richtigen Orientation ...


    ein

    Java
    recorder.setOrientationHint(90);


    bewirkt nur, dass das ganze komplett auf dem Kopf steht ... nehmen tut die Methode 0, 90, 180 und 270. Keine der Werte liefert mir das Bild richtig herum ^^


    Also meine letzten Probleme belaufen sich jetzt auf die verzerrte Preview und die falsche Orientation ...



    Gruß,
    matze

  • Hoi,


    ich sprech offenbar nur mit mir selbst xD


    Das Setzen des Profils funktioniert irgendwie auch nicht immer einwandfrei ... finde ich eine Kombination, die auf dem Handy funktioniert, tut sie auf meinem Tablet nicht und umgekehrt. Manche Devices scheinen generell nichts zu liefern auf die hasProfile und haben auch nicht direkt nachvollziehbar nur wenige Profile überhaupt.


    Wenn ich alternativ das ganze von Hand setzen will, schaff ich es bis zum recorder.start(), wo er dann kläglich mit "status failed: -19" den Dienst quittiert...



    Dann kam mir der Gedanke vll. stimmen meine fest gesetzten Werte einfach nicht und habe mal die Parameters (camera.getParameters()) befragt. Doch bei an sich sinnigen Methoden wie

    Java
    params.getSupportedVideoSizes()

    liefert mein Handy einfach null, also darauf ist auch kein Verlass.


    Langsam werd ich etwas stinkig -.-



    Gruß,
    matze

  • Ich habe mit den Cams in den Geräten noch gar nichts gemacht, da ich dank der Fragmentierung ja bereits an den Displays scheitere.
    Die Tatsache, dass es bei den eingebauten Kameras kein Stück besser aussieht motiviert mich auch nicht, dort in irgend eine Art und Weise zu investieren...

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Naja, je nach Hardwarehersteller haben die ihre eigenen Treiber für ihre eigene Hardware geschrieben und die namentlich so tollen Methoden, die auf diese Treiber zugreifen müssen, können nur Mist zurückgeben, weil sie nur Mist bekommen haben.


    Ich würde immer das aktuelle Nexus zum Betriebssystem für derartige Tests nutzen und wenn es darauf läuft schauen, was andere Geräte so tun.
    Da liegt die Versäumnis tatsächlich leider nicht bei Google. ^^

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hoi,


    weiß nich so genau was ich jetzt letztendlich noch mal geändert hab, wenn ich ganz ehrlich bin ... aber es funktioniert grad auf meinem Galaxy Nexus, Nexus 7 und sogar dem scheiß Arnova 9G2 funktioniert es ....


    Ich vermute ich hab irgendwo ein camera.lock bzw. unlock etwas falsch gesetzt ... hab grad ziemlich gewütet. Wenn Interesse besteht kann ich das ganze ja noch mal so im Ganzen schicken ...



    Gruß,
    matze

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!