FMUSER Wirless Μετάδοση βίντεο και ήχου πιο εύκολα!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Αφρικανικά
sq.fmuser.org -> Αλβανικά
ar.fmuser.org -> Αραβικά
hy.fmuser.org -> Αρμενίων
az.fmuser.org -> Αζερμπαϊτζάν
eu.fmuser.org -> Βάσκων
be.fmuser.org -> Λευκορωσικά
bg.fmuser.org -> Βουλγαρικά
ca.fmuser.org -> Καταλανικά
zh-CN.fmuser.org -> Κινέζικα (απλοποιημένα)
zh-TW.fmuser.org -> Κινέζικα (Παραδοσιακά)
hr.fmuser.org -> Κροατικά
cs.fmuser.org -> Τσέχικα
da.fmuser.org -> Δανικά
nl.fmuser.org -> Ολλανδικά
et.fmuser.org -> Εσθονικά
tl.fmuser.org -> Φιλιππινέζικα
fi.fmuser.org -> Φινλανδικά
fr.fmuser.org -> Γαλλικά
gl.fmuser.org -> Γαλικιανά
ka.fmuser.org -> Γεωργιανά
de.fmuser.org -> Γερμανικά
el.fmuser.org -> Ελληνική
ht.fmuser.org -> Κρεόλ της Αϊτής
iw.fmuser.org -> Εβραϊκά
hi.fmuser.org -> Χίντι
hu.fmuser.org -> Ουγγρική
is.fmuser.org -> Ισλανδικά
id.fmuser.org -> Ινδονησιακά
ga.fmuser.org -> Ιρλανδικά
it.fmuser.org -> Ιταλικά
ja.fmuser.org -> Ιαπωνικά
ko.fmuser.org -> Κορεάτικα
lv.fmuser.org -> Λετονικά
lt.fmuser.org -> Λιθουανικά
mk.fmuser.org -> Μακεδόνας
ms.fmuser.org -> Μαλαισιανά
mt.fmuser.org -> Μαλτέζικα
no.fmuser.org -> Νορβηγική
fa.fmuser.org -> Περσικά
pl.fmuser.org -> Πολωνικά
pt.fmuser.org -> Πορτογαλικά
ro.fmuser.org -> Ρουμανικά
ru.fmuser.org -> Ρωσικά
sr.fmuser.org -> Σέρβικα
sk.fmuser.org -> Σλοβακικά
sl.fmuser.org -> Σλοβένικα
es.fmuser.org -> Ισπανικά
sw.fmuser.org -> Σουαχίλι
sv.fmuser.org -> Σουηδικά
th.fmuser.org -> Ταϊλάνδης
tr.fmuser.org -> Τουρκικά
uk.fmuser.org -> Ουκρανικά
ur.fmuser.org -> Ουρντού
vi.fmuser.org -> Βιετνάμ
cy.fmuser.org -> Ουαλικά
yi.fmuser.org -> Γίντις
Πρόσφατα έκανε ένα έργο Android για να χρησιμοποιήσει τη λειτουργία κωδικοποίησης και αποκωδικοποίησης. Οι γενικές απαιτήσεις είναι: λήψη βίντεο μέσω της κάμερας, στη συνέχεια εξαγωγή καρέ, δημιουργία σύντομου βίντεο και αντίστροφη βίντεο. Στην αρχή, χρησιμοποιεί απευθείας τη μορφή κωδικοποίησης H.264, χωρίς τη χρήση συσκευασίας κοντέινερ MP4. Αφού κάνω αυτές τις λειτουργίες, πιστεύω ότι η μορφή MP4 είναι πιο συμβατή με όλα τα μοντέλα και μειώνει τα σφάλματα. Πάρτε ένα προφανές παράδειγμα: όταν το Android είναι σκληρά κωδικοποιημένο, χρησιμοποιείται συχνά ο συνδυασμός mediacodec και mediaxtractor. Ωστόσο, εάν χρησιμοποιείτε το γυμνό αρχείο βίντεο H.264, η συνάρτηση setource του mediaextractor θα αναφέρει μια εξαίρεση. Δεν είναι δυνατή η ανάλυση του αρχείου βίντεο σε ορισμένα μοντέλα (όπως το Meizu Note2, το σύστημα είναι 5.1).
Αφού αποκτήσαμε τις γενικές απαιτήσεις, χρησιμοποιήσαμε αρχικά το ffmpeg για να κάνουμε κωδικοποιητή βίντεο, το λεγόμενο codec λογισμικού. Λόγω της αργής ταχύτητας επεξεργασίας και της ανάγκης για γρήγορη εμφάνιση μετά την αποκωδικοποίηση, το σχήμα δεν μπορεί να επιτύχει το επιθυμητό εφέ (αποκωδικοποίηση βίντεο ffmpeg και αποθήκευση ως παράδειγμα JPEG: https://github.com/xiaoxiaoqingyi/ffmpeg-android-video-decoder )。 Αλλά έχει επίσης ορισμένα πλεονεκτήματα, όπως καλή συμβατότητα και μετατροπή χρώματος. Σε τελική ανάλυση, δεν είναι κωδικοποιητής υλικού (τόσα πολλά μοντέλα στην Κίνα, ξέρετε). Δεύτερον, το ffmpeg μπορεί να εξάγει το καθορισμένο πλαίσιο, ενώ το mediacodec δεν μπορεί να εξάγει το καθορισμένο πλαίσιο. Πρέπει να εισαγάγετε πολλά καρέ στον αποκωδικοποιητή για να αποκωδικοποιήσετε ένα καρέ. Προς το παρόν, δεν έχω βρει ακόμα ένα σχέδιο εισαγωγής ενός πλαισίου και επίλυσης ενός πλαισίου, το οποίο ο Θεός γνωρίζει ότι μπορεί να καθοδηγήσει.
Στην περίπτωση που ο κωδικοποιητής λογισμικού δεν είναι κατάλληλος, μπορούμε να εξετάσουμε το ενδεχόμενο χρήσης κωδικοποιητή υλικού. Πριν από λίγες ημέρες, παρακολούθησα το Tencent 2017live live Developer Conference και έμαθα ότι το μεγαλύτερο μέρος της ζωντανής μετάδοσης χρησιμοποιεί πλέον υλικό για την κωδικοποίηση και την αποκωδικοποίηση. Μόλις είπαμε, ορισμένα μοντέλα δεν μπορούν να χρησιμοποιήσουν το mediaextractor για την ανάλυση αρχείων H.264. Για να είναι συμβατά με τα περισσότερα μοντέλα, πρέπει να τα αναλύσουν μόνα τους. Αναλύοντας κάθε byte του αρχείου H.264, μπορούν να διακρίνουν τη θέση κάθε πλαισίου και τι είδους πλαίσιο είναι. Για να επιτευχθεί αυτή η απαίτηση, πρώτα απ 'όλα, τα δεδομένα που λαμβάνονται από την κάμερα ορίζονται σε μορφή nv21 εάν χρησιμοποιείται κάμερα, αλλά ορισμένα άτομα χρησιμοποιούν το Camera2 και η μορφή είναι εικόνα. Ανεξάρτητα από το ποια μορφή είναι, πρέπει να μετατραπεί σε yuv420sp ή yuv420p (Σημείωση: κατά τη διακωδικοποίηση, είναι καλύτερο να χρησιμοποιήσετε JNI, να χρησιμοποιήσετε C / C + + για να μετατρέψετε τη μορφή, η απόδοση θα είναι πολλές φορές υψηλότερη), έτσι ώστε Μπορεί να κωδικοποιηθεί από το mediacodec και, στη συνέχεια, να αποθηκεύσει το αρχείο H.264. Κατά τη δημιουργία μιας παρουσίας του mediacodec, εκτός από τον καθορισμό των απαιτούμενων παραμέτρων, θα πρέπει επίσης να δώσετε προσοχή σε ορισμένες πτυχές, όπως ποιος κωδικοποιητής να επιλέξετε. Γενικά, θα επιλέξετε τα εξής:
MediaCodec.createEncoderByType ("βίντεο / avc");
Αυτό φαίνεται να μην αποτελεί πρόβλημα. Η βασική αρχή είναι να αποκτήσετε τον καλύτερο κωδικοποιητή, τον πρώτο στο μητρώο κωδικοποιητή του συστήματος Android, το οποίο είναι συνήθως αποκωδικοποίηση υλικού (το mediacodec μπορεί επίσης να καλέσει κωδικοποιητή λογισμικού). Στην πραγματικότητα, δεν είναι πολύ αξιόπιστο να δημιουργείτε έναν κωδικοποιητή με αυτόν τον τρόπο. Αν και ο επίσημος ιστότοπος το προτείνει επίσης, σε πολλά οικιακά μοντέλα Android, ορισμένα κινητά τηλέφωνα θα έχουν προβλήματα, ορισμένοι κωδικοί θα έχουν μπλε οθόνη και ορισμένοι θα αναβοσβήνουν απευθείας. Υπάρχει ένα ξένο παράδειγμα, που σημαίνει περίπου να αποκτήσετε πρώτα τον κωδικοποιητή τύπου "βίντεο / AVC" και, στη συνέχεια, να δοκιμάσετε ένα προς ένα μέσω του catch catch. Εάν δεν υπάρχει πρόβλημα, επιλέξτε αυτόν τον κωδικοποιητή. Πηγαίος κώδικας: mediacodec_ rtsp_ h264
Ένα άλλο πρόβλημα είναι ότι όταν ορίζεται το διάστημα I-frame, ορισμένα κινητά τηλέφωνα δεν λειτουργούν. Οι ρυθμίσεις έχουν ως εξής:
mediaFormat.setInteger (MediaFormat.KEY_ I_ FRAME_ INTERVAL, διάστημα);
Λόγω αυτής της κατάστασης, πρέπει να χρησιμοποιήσουμε έναν άλλο τρόπο για να ορίσουμε το πλαίσιο I, το οποίο είναι υποχρεωτική ρύθμιση:
Bundle params = νέο Bundle ();
params.putInt (MediaCodec.PARAMETER_ KEY_ REQUEST_ SYNC_ FRAME, 0).
mMediaCodec.setParameters (παράμετροι);
Κατά την κωδικοποίηση και την αποκωδικοποίηση, όταν όλα τα δεδομένα εισάγονται στον κωδικοποιητή, θυμηθείτε να εισαγάγετε τον τελικό χαρακτήρα, τότε ο κωδικοποιητής θα εξάγει όλα τα καρέ.
Υπάρχει επίσης ένα πρόβλημα εξαγωγής πλαισίου. Εάν το mediacodec χρησιμοποιείται για την εξαγωγή καρέ, θα δημιουργηθεί ένα νέο βίντεο. Μπορώ απλώς να αφαιρέσω το πλαίσιο από το αρχείο H.264; Δεν λειτουργεί έτσι. Συνήθως υπάρχει μια οθόνη εκκίνησης. Αυτό πρέπει να εισαγάγει εκ νέου το αρχείο H.264 στον αποκωδικοποιητή και, στη συνέχεια, να πάρει το πλαίσιο που θέλετε και, στη συνέχεια, να το εισαγάγετε σε έναν νέο κωδικοποιητή για να δημιουργήσετε το αρχείο H.264 που θέλετε. Υπάρχει επίσης πρόβλημα μορφής εδώ. Δεν είναι ότι τα δεδομένα που αποκωδικοποιούνται από τον αποκωδικοποιητή μπορούν να κωδικοποιηθούν απευθείας από τον κωδικοποιητή. Ορισμένα κινητά τηλέφωνα μπορούν, και μερικά θα έχουν μπλε οθόνη ή ακόμη και αναβοσβήνουν. Σε αυτήν την περίπτωση, πρέπει να ενοποιήσουμε τη μορφή του αποκωδικοποιητή. Εάν χρησιμοποιείτε αυτήν τη φόρμα για να λάβετε:
mMediaCodec.getOutputBuffer ()
Υπάρχουν όλα τα είδη μορφών εκεί έξω και είναι δύσκολο να είστε συμβατοί. Η Google κυκλοφόρησε μια νέα μορφή:
mMediaCodec.getOutputImage (outIndex)
Το αποτέλεσμα είναι ένα αντικείμενο εικόνας, το οποίο μπορεί να αποθηκευτεί ως εικόνα JPEG ή να μετατραπεί σε nv21, όπως το παραπάνω μέρος λήψης, να μετατραπεί σε μορφή YUV422 και στη συνέχεια να εισαχθεί στον κωδικοποιητή. Έτσι, ανεξάρτητα από το μοντέλο που μπορεί να είναι συμβατό (δοκιμάζω περισσότερους από 10 διαφορετικούς κατασκευαστές κινητών τηλεφώνων), αν και πολλές παρακάμψεις.
|
Εισαγάγετε email για να εκπλήξετε
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Αφρικανικά
sq.fmuser.org -> Αλβανικά
ar.fmuser.org -> Αραβικά
hy.fmuser.org -> Αρμενίων
az.fmuser.org -> Αζερμπαϊτζάν
eu.fmuser.org -> Βάσκων
be.fmuser.org -> Λευκορωσικά
bg.fmuser.org -> Βουλγαρικά
ca.fmuser.org -> Καταλανικά
zh-CN.fmuser.org -> Κινέζικα (απλοποιημένα)
zh-TW.fmuser.org -> Κινέζικα (Παραδοσιακά)
hr.fmuser.org -> Κροατικά
cs.fmuser.org -> Τσέχικα
da.fmuser.org -> Δανικά
nl.fmuser.org -> Ολλανδικά
et.fmuser.org -> Εσθονικά
tl.fmuser.org -> Φιλιππινέζικα
fi.fmuser.org -> Φινλανδικά
fr.fmuser.org -> Γαλλικά
gl.fmuser.org -> Γαλικιανά
ka.fmuser.org -> Γεωργιανά
de.fmuser.org -> Γερμανικά
el.fmuser.org -> Ελληνική
ht.fmuser.org -> Κρεόλ της Αϊτής
iw.fmuser.org -> Εβραϊκά
hi.fmuser.org -> Χίντι
hu.fmuser.org -> Ουγγρική
is.fmuser.org -> Ισλανδικά
id.fmuser.org -> Ινδονησιακά
ga.fmuser.org -> Ιρλανδικά
it.fmuser.org -> Ιταλικά
ja.fmuser.org -> Ιαπωνικά
ko.fmuser.org -> Κορεάτικα
lv.fmuser.org -> Λετονικά
lt.fmuser.org -> Λιθουανικά
mk.fmuser.org -> Μακεδόνας
ms.fmuser.org -> Μαλαισιανά
mt.fmuser.org -> Μαλτέζικα
no.fmuser.org -> Νορβηγική
fa.fmuser.org -> Περσικά
pl.fmuser.org -> Πολωνικά
pt.fmuser.org -> Πορτογαλικά
ro.fmuser.org -> Ρουμανικά
ru.fmuser.org -> Ρωσικά
sr.fmuser.org -> Σέρβικα
sk.fmuser.org -> Σλοβακικά
sl.fmuser.org -> Σλοβένικα
es.fmuser.org -> Ισπανικά
sw.fmuser.org -> Σουαχίλι
sv.fmuser.org -> Σουηδικά
th.fmuser.org -> Ταϊλάνδης
tr.fmuser.org -> Τουρκικά
uk.fmuser.org -> Ουκρανικά
ur.fmuser.org -> Ουρντού
vi.fmuser.org -> Βιετνάμ
cy.fmuser.org -> Ουαλικά
yi.fmuser.org -> Γίντις
FMUSER Wirless Μετάδοση βίντεο και ήχου πιο εύκολα!
Επικοινωνία
Διεύθυνση:
No.305 Room HuiLan Building No.273 Huanpu Road Guangzhou Κίνα 510620
Κατηγορίες
Newsletter