3 заметки с тегом: KTeam
Здесь я пишу свои идеи, мысли, описываю события своей жизни и просто делаю личные и рабочие заметки. «А Вы что, собираетесь жить вечно?»
3 заметки с тегом

KTeam

Аудио-плеер на Delphi для Android с применением библиотеки BASS.

24 марта 2015, 9:48

В середине прошлого года появилась необходимость написания простого приложения для мобильных платформ Android и iOS. Первым рабочим проектом стал KTeam. После его успешного запуска, появилась необходимость написания аудио-плеера, способного воспроизводить потоковое вещание интернет радиостанций.

И так, сегодня я подробно опишу, как создать простой плеер потокового вещания.

Для работы нам понадобятся среда программирования Code Gear RAD Studio XE7, работать я рекомендую именно в данной версии программы, т. к. в используемых библиотеках, имеются некоторые не стыковки в работе с предыдущими версиями.

По причине того, что встроенных средств проигрывания интернет потока не имеется, мы воспользуемся замечательной библиотекой BASS, для написания приложения для Android (для iOS следует использовать другие компоненты).

Для корректной работы библиотеки BASS я рекомендую так же установить компоненты DPF Android Native Components, я в своём примере буду использовать версию 2.8.6.

Начало

Ну я думаю процесс установки Code Gear RAD Studio XE7 описывать не стоит, поэтому сразу переходим к установке дополнительных компонентов и библиотек, потому что именно эта часть вызывает наибольшие проблемы, и именно поэтому данный этап я опишу наиболее подробно.

BASS

Идём на официальный сайт un4seen.com библиотеки, нажимаем в левом меню на ссылку BASS и скачиваем там последнюю версию для Android. На момент написания данной статьи на сайте опубликована версия 2.4 от 13 марта 2015 года. Прямая ссылка на скачивание библиотеки с официального сайта. Ссылка на скачивание с моего сайта.

Сайт библиотеки BASS Ссылки на скачивание библиотек

Примечание: я рекомендую использовать именно данную версию библиотеки, потому что предыдущие версии не работают с XE7, и при инициализации библиотеки появляется ошибка.

BASSFunctions

Для корректной работы с библиотекой, нам потребуется ещё один дополнительный файл, это BASSFunctions.pas. Данный файл опубликовал на форуме пользователь с ником 3delite.Ссылка на оригинальный файл.

DPF Android Native Components

Для корректной работы библиотек BASS, часто требуется установка компонентов DPF Android Native Components, т. к. в их составе имеется компонент для работы с аудио, без которого компилятор будет просто выдавать ошибку.

Идём на официальный сайт и скачиваем последнюю версию компонентов. Или вы можете скачать версию 2.8.6 с моего сайта.

Поехали

После того, как мы скачали все необходимые дополнительные файлы, приступаем к установке компонентов.

Начнём с DPF Android Native Components. Я рекомендую (во избежании дополнительных проблем с подключением) распаковать файлы в папку DPF.Android.Native.Components.v2.8.6 в корень диска C.

В каталоге с файлами, имеется файл Install.txt. У кого хорошо с английским, могут сделать всё по инструкции описанной в файле, для тех кто в школе учил немецкий, я опишу процесс установки компонентов подробно.

Запускаем Codegear RAD Studio. Далее в верхнем меню открываем Tools->Options->Delphi Options->Library.

В выпадающем списке справа выбираем платформу «32-bit Windows» и добавляем в раздел «Library path» путь к нашим компонентам.

Теперь то же самое проделываем для платформы «Android».

Теперь нам потребуется скомпилировать и установить компоненты. Для этого нажимаем File -> Open Project. Открываем проект из папки компонентов, соответствующий вашей среде программирования.

Открываем проект DPFAndroidPackagesXE7.dproj

Далее нам надо скомпилировать проект и установить полученные компоненты.

Нажимаем правой кнопкой на проекте в инспекторе проекта и выбираем пункт «Build», начнётся построение проекта.

После завершение построение, опять нажимаем правой кнопкой на проекте в инспекторе и выбираем пункт «Install».

Компоненты готовы к работе. Приступим к созданию проекта.

Я набросал уже небольшой проект с парой кнопок для запуска и остановки проигрывателя и картинкой для привлечения внимания :)

Для работы в библиотекой BASS, нам потребуется в каталог с проектом добавить файл BASSFunctions.pas и указать его в разделе uses.

Добавляем файл BASSFunctions.pas. Добавляем в раздел uses.

Теперь собственно сама библиотека libbass.so. Нам необходимо добавить данную библиотек в наш проект, иначе ничего не заработает.

Открываем архив bass24-android.zip и видим... Множество папок, нас интересует на данный момент только одна libs. Распаковываем её в каталог нашего проекта.

В каталоге libs, есть три подкаталога, нас интересуют 2 из них:

  • armeabi-v7a
  • armeabi

В них находятся два разных файла libbass.so.

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

Deployment Добавляем библиотеки

После того, как мы добавили библиотеки в наш проект, надо поменять параметр «Remote Path» для каждой библиотеки соответственно на «library\lib\armeabi» и на «library\lib\armeabi-v7a». Данную процедуру надо проделать для обеих конфигураций «Debug» и «Release».

Библиотеки Конфигурации

Ну что, вот всё и готово к началу написания кода, а код на самом деле достаточно простой.

Объявляем глобальную переменную.

var
  uStream:HSTREAM;

В момент создания формы инициализируем библиотеку.

procedure TmainForm.FormCreate(Sender: TObject);
begin
  // Загружаем и инициализируем библиотеку
  Loadbass;
  BASS_Init(-1,44100,0,Handle,nil);
end;

На кнопку «Играть» вещаем обработчик:

procedure TmainForm.mainToolbarBarItems1Click(Sender: TObject);
var
  otStream : TStringStream;
  Result : integer;
begin
  try

    // Включаем индикатор загрузки контента
    ind1.Enabled := True;
    ind1.Visible := True;

    // Код проигрывателя
    Result := 0;

    // Закрываем старый поток
    BASS_StreamFree(uStream);

    // Создаём новый поток
    uStream :=
      BASS_StreamCreateURL(PChar('http://motochelyabinsk.ru:8000/play'),0,BASS_STREAM_STATUS or BASS_UNICODE,nil,nil);

    // Включаем проигрывание
    BASS_ChannelPlay(uStream, True);

    // Получаем и выводим название текущего трека из скрипта на сайте
    // Создаём поток UTF8
    otStream := TStringStream.Create('', CP_UTF8);
    // Делаем запрос к скрипту сайта
    IdHTTP1.Get('motochelyabinsk.ru/current-track.php', otStream);
    IdHTTP1.Disconnect;
    // Записываем название трека в Label
    Label1.Text := otStream.DataString;
    // Очищаем переменную потока
    otStream.Free;

    // Запустить таймер отслеживания изменений названия трека
    Timer1.Enabled := True;

    // Включаем и отключаем кнопки
    btn1.Enabled := False;
    btn2.Enabled := True;

  except on E: Exception do
    begin
      ShowMessage('Ошибка доступа к сети!');
    end;
  end;

end;

Ну вот в общем самый простой и работающий пример создания проигрывателя интернет радиостанций.
P.S. Чуть позже, выложу готовый пример данного приложения.

KTeam и Motopeople

6 октября 2014, 11:41

30 сентября 2014 в Челябинске проездом оказался организатор проекта Motopeope.info Константин Ткаченко.

Константин в рамках рекламы своего проекта едет от Владивостока до Питера. В пути он уже сменил свой мотоцикл Gold Wing 1200 на аппарат попроще. Как рассказал Константин, главная цель мотопробега это встреча с представителями мотоообществ, встреча с мотоклубами, интервью, а так же изучение аналогичных локальных систем оповещения. Приятно было услышать, что Челябинск с проектом KTeam, в плане систем оповещения мотоциклистов, значительно обогнал в развитии аналогичные системы.

Небольшое интервью от сайта 74.ru.

Спасибо Константину за приятную беседу и подробную демонстрацию проекта motopeople. Дурацкое фото прилагается :)

Мотосообщество и новые проекты

22 июня 2014, 21:20

Как-то давно я не писал ничего в блог, видимо потому, что стало значительно меньше свободного времени и меньше времени для размышлений. Но тем не менее жизнь идёт своим чередом и за период времени с середины прошедшей зимы мы с группой единомышленников создали проект взамипомомощи среди мотоциклистов и назвали проект KTeam (сокращение от Кировка Тим).

Сначала мы занялись проектированием платформы и сайтом для работы всей системы. Для начала мы сделали простенький сайт, целью которого на начальном этапе было — отображение заявок. Так же параллельно сайту появилась платформа для работы с поступающими заявками от различных мобильных платформ и СМС операторов. Изначально мы расчитывали на входящие СМС сообщения, но затем решили расширить проект и написать приложения для платформ iOS и Android. И хочется заметить, у нас всё получилось.

И так 17 мая 2014 на открытии мотосезона состоялась презентация нашего небольшого, но крайне полезного проекта.

Приложение KTeam

Суть приложения и всей платформы проста — создать автоматизированную систему оповещения о происходящих происшествиях с участием мотоциклистов. Приложение примечательно тем, что может автоматически определять координаты местоположения аварии и создавать на их основании заявку. После чего все пользователи зарегистрированные в системе получают СМС уведомления с типом и адресом места происшествия.

С момента запуска проекта прошло чуть больше месяца, но система оповещение уже успела зарекомендовать себя, как очень действенный инструмент моментального оповещения участников мотодвижения в городе Челябинске.

Так же, с приходом тепла мы стали заниматься не только разработкой приложения и сайта, но и продумывать и организовывать различные социальные мероприятия. Недавно состоялась поездка в детский приют в пос. Солнечный. Хотелось бы сказать огромное СПАСИБО всем тем, кто откликнулся и помог финансово, морально и физически организовать столь замечательное мероприятие.

P.S. Ждите новых мероприятий и принимайте активное участие!