हाँ, आप libstagefright का उपयोग कर सकते हैं, यह बहुत शक्तिशाली है।
चूंकि स्टेजफ़ाइट एनडीके के संपर्क में नहीं है, इसलिए आपको अतिरिक्त कार्य करना होगा।
(1) अपनी परियोजना एंड्रॉयड पूर्ण स्रोत पेड़ का उपयोग कर निर्माण:
वहाँ दो तरीके हैं। एक बार तैयार होने के लिए इस तरह सेटअप करने में कुछ दिन लगते हैं, यह बहुत आसान है, और आप मंच के पूर्ण लाभ ले सकते हैं।
(2) तुम सिर्फ कॉपी कर सकते हैं अपनी परियोजना के लिए फ़ाइल में शामिल हैं, यह इस फ़ोल्डर के अंदर है:
android-4.0.4_r1.1/चौखटे/आधार/शामिल/मीडिया/stagefright
तो आप करेंगे libstagefright.so को गतिशील रूप से लोड करके लाइब्रेरी फ़ंक्शन निर्यात करें, और आप अपनी जेनी प्रोजेक्ट से लिंक कर सकते हैं।
statgefright का उपयोग करके एन्कोड/डीकोड करने के लिए, यह बहुत सरल है, कुछ सौ लाइनें कर सकती हैं।
मैंने वीडियो बनाने के लिए स्क्रीनशॉट को कैप्चर करने के लिए मंचफ्रेम का उपयोग किया, जो जल्द ही रिलीज़ होने के लिए हमारे एंड्रॉइड वीएनसी सर्वर में उपलब्ध होगा।
निम्नलिखित स्निपेट है, मुझे लगता है कि यह फिल्म को एन्कोड करने के लिए ffmpeg का उपयोग करने से बेहतर है। आप ऑडियो स्रोत भी जोड़ सकते हैं।
class ImageSource : public MediaSource {
ImageSource(int width, int height, int colorFormat)
: mWidth(width),
mHeight(height),
mColorFormat(colorFormat)
{
}
virtual status_t read(
MediaBuffer **buffer, const MediaSource::ReadOptions *options) {
// here you can fill the buffer with your pixels
}
...
};
int width = 720;
int height = 480;
sp<MediaSource> img_source = new ImageSource(width, height, colorFormat);
sp<MetaData> enc_meta = new MetaData;
// enc_meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_H263);
// enc_meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_MPEG4);
enc_meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
enc_meta->setInt32(kKeyWidth, width);
enc_meta->setInt32(kKeyHeight, height);
enc_meta->setInt32(kKeySampleRate, kFramerate);
enc_meta->setInt32(kKeyBitRate, kVideoBitRate);
enc_meta->setInt32(kKeyStride, width);
enc_meta->setInt32(kKeySliceHeight, height);
enc_meta->setInt32(kKeyIFramesInterval, kIFramesIntervalSec);
enc_meta->setInt32(kKeyColorFormat, colorFormat);
sp<MediaSource> encoder =
OMXCodec::Create(
client.interface(), enc_meta, true, image_source);
sp<MPEG4Writer> writer = new MPEG4Writer("/sdcard/screenshot.mp4");
writer->addSource(encoder);
// you can add an audio source here if you want to encode audio as well
//
//sp<MediaSource> audioEncoder =
// OMXCodec::Create(client.interface(), encMetaAudio, true, audioSource);
//writer->addSource(audioEncoder);
writer->setMaxFileDuration(kDurationUs);
CHECK_EQ(OK, writer->start());
while (!writer->reachedEOS()) {
fprintf(stderr, ".");
usleep(100000);
}
err = writer->stop();
जब नकल, सावधान रहना JNI समारोह सी है कि और Stagefright C++ है। स्टेजफ्राइट जेएनआई के लिए एनडीके पर्यावरण के साथ असंगत दिखने वाले कुछ निर्भर शीर्षलेखों में से कुछ है। –
ध्यान दें कि सभी एंड्रॉइड डिवाइसों में मंचदर्शी नहीं है, और एपीआई संस्करण के आधार पर भिन्न होता है। बहुत सावधान रहें क्योंकि इन एपीआई के लिए कोई अनुबंध नहीं है, इसलिए वे स्थिर नहीं हो सकते हैं। – dagalpin
सीधे सीधे छवियों का उपयोग कर एक वीडियो प्रस्तुत कर सकते हैं ?? –