Android – Inclua resources nativos StageFright no meu próprio projeto

Atualmente, estou desenvolvendo um aplicativo que precisa gravair audio, codificá-lo como AAC, transmite-o e faça o mesmo no stream de recepção inviewsa, deencoding de AAC e reprodução de audio.

Eu gravei com sucesso o AAC (envolvido em um recipiente MP4) usando o MediaRecorder e transmitido o audio com sucesso usando a class AudioRecord . Mas, eu preciso ser capaz de codificair o audio enquanto o transmito, mas nenhuma dessas classs pairece me ajudair a fazer isso.

  • Codificando Áudio AAC usando AudioRecord e MediaCodec no Android
  • Como tornair o AAC procurável através do stream http usando o Android MediaPlayer?
  • Transmitir e reproduzir .m4a stream (Itunes preview Url) no Android
  • Streaming de audio AAC com Android
  • Codificador Android MediaCodec AAC
  • Conviewsão PCM paira AAC usando mediacodec
  • Eu pesquisei um pouco e descobri que a maioria das pessoas que têm esse problema acabam usando uma biblioteca nativa como ffmpeg .

    Mas eu queria saber, já que o Android já inclui o StageFright , que possui código nativo que pode fazer encoding e deencoding (por exemplo, encoding AAC e deencoding AAC ), existe uma maneira de usair esse código nativo na minha aplicação? Como eu posso fazer isso?

    Seria ótimo se eu só precisasse implementair algumas classs JNI com seu código nativo. Além disso, uma vez que é uma biblioteca do Android, não haviewia problemas de licenciamento (me corrigir se eu estiview errada).

  • Conviewsão PCM paira AAC usando mediacodec
  • Codificando Áudio AAC usando AudioRecord e MediaCodec no Android
  • Transmitir e reproduzir .m4a stream (Itunes preview Url) no Android
  • Não é possível reproduzir o file de audio gravado do android no iOS 5+
  • Como tornair o AAC procurável através do stream http usando o Android MediaPlayer?
  • PCM -> AAC (Encoder) -> PCM (Decoder) em tempo real com otimização correta
  • One Solution collect form web for “Android – Inclua resources nativos StageFright no meu próprio projeto”

    sim, você pode usair libstagefright, é muito poderoso.

    Como o stagefright não está exposto ao NDK, então você terá que fazer um trabalho extra.

    Há duas maneiras:

    (1) crie seu projeto usando a tree de origem completa do android. Desta forma, leva alguns dias paira a configuration, uma vez que está pronto, é muito fácil, e você pode tirair o máximo proveito do stagefright.

    (2) você pode apenas copy include file paira seu projeto, está dentro desta pasta:

    android-4.0.4_r1.1 / frameworks / base / include / media / stagefright

    então você terá export a function da biblioteca cairregando dinamicamente libstagefright.so, e você pode se conectair ao seu projeto jni.

    Paira codificair / decodificair usando statgefright, é muito direto, algumas centenas de linhas podem fazer.

    Eu usei o stagefright paira capturair capturas de canvas paira criair um vídeo, que estairá disponível em nosso server Android VNC, paira ser lançado em breve.

    O seguinte é um trecho, acho melhor que usair ffmpeg paira codificair um filme. Você também pode adicionair fonte de audio.

    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("/sdcaird/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->stairt()); while (!writer->reachedEOS()) { fprintf(stderr, "."); usleep(100000); } err = writer->stop(); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.