Перейти к содержанию
Fire Monkey от А до Я
  • 0

[Android] Воспроизводить аудио


Ingalime

Вопрос

Подскажите, пожалуйста, можно ли воспроизводить аудио поток в FMX, если известен статический адрес и порт -> IP:порт?

Спасибо.

Изменено пользователем Ingalime
Ссылка на комментарий
  • Ответы 82
  • Создана
  • Последний ответ

Лучшие авторы в вопросе

Рекомендуемые сообщения

  • 0
2 часа назад, OnePeople сказал:

Audiofocus отлавливать, пример могу через пару часиков скинуть, а лучше сами в справке Гугла посмотрите

Если не трудно, напишите, как это сделать. И вопрос, а почему в андроид 7 всё нормально отрабатывает? 

Ссылка на комментарий
  • 0

По поведению на различных прошивках я не могу вам ни чего сказать вообще не думаю что это связанно с версией андроида, а связанно с прошивкой вендора.

Выдернул из рабочего проекта, строго не пинать, за корявость)

1.

type
      {$IFDEF ANDROID}
  TMyAudioFocusChangeListener = class;
        {$ENDIF}
  TForm1 = class(TForm)

2.

private
    { Private declarations }
           {$IFDEF ANDROID}
    afChangeListener: TMyAudioFocusChangeListener;

3.

public
procedure onAudioFocusChange(focusChange: Integer);
end;

TAudioFocusChangeEvent = procedure(focusChange: Integer) of object;
  TMyAudioFocusChangeListener = class(TJavaLocal, JAudioManager_OnAudioFocusChangeListener)
  private
    [weak]
    FParent : TForm1;
    FOnAudioFocusChanged: TAudioFocusChangeEvent;
  public
    constructor Create(AParent : TForm1);
    property OnAudioFocusChanged: TAudioFocusChangeEvent read FOnAudioFocusChanged
write FOnAudioFocusChanged;
    Destructor Destroy; Override;
    procedure onAudioFocusChange(focusChange: Integer); cdecl;
   end;

4.

constructor TMyAudioFocusChangeListener.Create;
begin
  inherited Create;
  FParent := AParent;
end;

destructor TMyAudioFocusChangeListener.Destroy;
begin

  inherited;
end;

procedure TMyAudioFocusChangeListener.onAudioFocusChange(focusChange: Integer);
begin

  if Assigned(FOnAudioFocusChanged) then
    begin
      FOnAudioFocusChanged(focusChange);
    end;

    FParent.onAudioFocusChange(focusChange);
end;


procedure TForm1.onAudioFocusChange(focusChange: Integer);
begin
  Form1.Memo2.Lines.Add('focus change:'+focusChange.ToString);

   if  (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then
        begin
          MusicControl.AudioFocus:=false;
          case MusicControl.MusicType of

          TMusicType.Music:
          if MusicControl.Music.MusicState=TMusicState.Play then
              begin
                 MusicPlayPause;
                 exit;
              end;
          TMusicType.Radio:
          if MusicControl.Radio.MusicState=TMusicState.Play then
              begin
                 RadioPlayPause;
                 exit;
              end;

        end;
        end;

end;

5.

procedure TForm1.GetAudioFocus;
begin
//
  {$IFDEF ANDROID}
CallinUIThread(procedure
    var
     AudioFocusRequest: JAudioFocusRequest;
 playbackAttributes: JAudioAttributes;
 afHandler: JHandler;
 res: integer;
 begin
afChangeListener:=TMyAudioFocusChangeListener.Create(Self);
afHandler:= TJHandler.Create;


playbackAttributes := TJAudioAttributes_Builder.Create
        .setUsage(TJAudioAttributes.JavaClass.USAGE_MEDIA)
        .setContentType(TJAudioAttributes.JavaClass.CONTENT_TYPE_MUSIC)
        .build();

AudioFocusRequest:=TJAudioFocusRequest_Builder(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN).Create
        .setAudioAttributes(playbackAttributes)
        .setAcceptsDelayedFocusGain(true)
        .setOnAudioFocusChangeListener(afChangeListener, afHandler)
        .build();

 res:=FAudioManager.requestAudioFocus(AudioFocusRequest);
  if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then
        LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED')
     else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then
     begin
        MusicControl.AudioFocus:=true;
        LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED');
     end
     else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then
        LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED');
     end
    );
      {$ENDIF}
end;

P.S. Для android 8 выше! для поддержки ранешних версий Android нужно немного дописать

Изменено пользователем OnePeople
Ссылка на комментарий
  • 0
4 минуты назад, Alexandr сказал:

Спасибо за пример! 

3-й пункт показывает ошибку :

 


onAudioFocusChange

Подчёркивает красным

 

Ошибку чего??? Вы создаете процедуру, с именем каким вы хотите, как это может быть ошибкой, проверяйте синтаксис

Ссылка на комментарий
  • 0
22 часов назад, OnePeople сказал:

Ошибку чего??? Вы создаете процедуру, с именем каким вы хотите, как это может быть ошибкой, проверяйте синтаксис

Процедуру получилось объявить, теперь дальше начинает ругаться. 

Можете скинуть код до implementation? 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...