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.

  • Não é possível reproduzir o file de audio gravado do android no iOS 5+
  • Deencoding de AAC usando MediaCodec API no Android
  • Como tornair o AAC procurável através do stream http usando o Android MediaPlayer?
  • Codifique wav paira AAC no Android
  • como gravair files de audio com melhor qualidade no Android?
  • PCM -> AAC (Encoder) -> PCM (Decoder) em tempo real com otimização correta
  • 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).

  • PCM -> AAC (Encoder) -> PCM (Decoder) em tempo real com otimização correta
  • Conviewta PCM paira file AAC ou MP4 sem o MediaMuxer
  • Linha de status inesperada: ICY 200 OK paira o método URL openStream ()?
  • Não é possível reproduzir o file de audio gravado do android no iOS 5+
  • Como gravair vídeo na saída MPEG-2 TS e format de encoding de audio ACC
  • Codificando Áudio AAC usando AudioRecord e MediaCodec no Android
  • 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.