[11]Multimedia_MapKit
|
|
- Petkana Melnishka
- преди 4 години
- Прегледи:
Препис
1 Работа с мултимедия. Използване на възможности за геолокация с MapKit Боян Лазов
2 За какво ще става дума? Работа с мултимедия - възпроизвеждане и записване на видео/аудио Работа с MapKit и CoreLocation
3 Архитектура на свързаните с медиа framework-и в ios
4 Кои от тях ще разглеждаме? Media Player ios3 Audio classes Както съветват Apple, "You should typically use the highest-level abstraction available that allows you to perform the tasks you want"
5 Media Player
6 Media Player Позволява playback на видео и аудио по лесен начин, както и има интерфейс с вградени контроли за playback Дава достъп до ipod library Не дава много контрол (напр. не можем да изключим аудио пътека от видео файл), но е достатъчно добър в повечето случаи Ще разгледаме главно MPMoviePlayerController
7 MPMoviePlayerController Инициализира се с URL на ресурса -initwithcontenturl:(nsurl *)url Стандартни функции като play, pause, stop Функциите за seek нямат ефект ако съдържанието се stream-ва Playback-а е във view, притежавано от movie player-a Можем да добавяме subview-та, за да показваме съдържание върху видео-то Можем да създаваме много обекти от този тип, но само един movie player може да бъде активен
8 .. contd По-интересни свойства са contenturl, duration, playbackstate Позволява генерирането на thumbnail-и Позволява playback към устройства, които поддържат AirPlay Поддържаните (видео) формати са относително малко -.mov,.mp4,.mpv,.3gp За аудио - AAC-LC и MP3
9 Player notifications Player-ът може да ни уведомява за събития относно playback-a на видеото Регистрирането става през NSNotificationCenter Всяко събитие се идентифицира с някакъв низ (константа), а player-a се подава като object в съобщението, която получавеме За пълен списък от константите и какво се подава, погледнете в документацията :)
10 .. например MPMoviePlayerController * player =... [[NSNotificationCenter defaultcenter ] addobserver:self selector:@selector(playbackstatechanged:) name:mpmovieplayerplaybackstatedidchangenotification object :player];... - (void)playbackstatechanged:( NSNotification *)note { MPMoviePlayerController * player = [note object]; //.. other stuff }
11
12 Генериране на thumbnails thumbnailimageattime :timeoption: requestthumbnailimagesattimes :timeoption: Приемат параметри време(на) и time option Time option определя дали да се стремим да вземем точно фрейма на даденото време или най-близкия key frame Втория метод е асинхронен и комуникацията става с notification (MPMoviePlayerThumbnailImageRequestDidFinishNotification )
13 MPMoviePlayerViewController Прост view controller, който wrap-ва MPMoviePlayerController за показване на видео fullscreen Вместо да показваме видеото веднага, можем да ползваме всякакви начини да представим view controller - tab bar, navigation bar, модално. Има presentmovieplayerviewcontrolleranimated:в категория на UIViewController
14
15 ios3 Audio Classes
16 AV Foundation Audio-Related Classes AVAudioPlayer - за възпроизвеждане на аудио AVAudioRecorder - за записване на аудио AVAudioSession - конфигурация на поведението на приложението
17 Възпроизвеждане на аудио AVAudioPlayer Playback на аудио в паметта или от файл. Отново стандартни функции като play, pause, stop Random seek Можем да имаме > 1 активен audio player Не съдържа UI компоненти, за разлика от MPMediaPlayerController За съжаление, не можем да stream-ваме с него
18 AVAudioPlayer misc Може да play-ва всички аудио формати, поддържани в ios (.aac,.aiff,.alac,.mp3,.wav,...) Синхронизация на няколко player-a с използването на playattime: и devicecurrenttime AVAudioPlayerDelegate - информира ни кога аудиото е свършило/възникнала е грешка settings свойството дава най-различна информация за аудиото като bitrate, брой канали и т.н.
19 Примери //Init with file NSError* error = nil ; NSURL* url =... AVAudioPlayer * player = [[ AVAudioPlayer alloc] nitwithcontentsofurl :url error:&error]; i //Init with data from memory NSData* data =... player = [[ AVAudioPlayer alloc ] initwithdata :data error:&error]; //play [player play]; //stop [player stop]; //seek player.currenttime = seektime;
20
21 Записване на аудио AVAudioRecorder Можем да Записваме, докато потребителя не спре записа Записваме с определена продължителност pause/resume на recording подаваме най-различни опции (като формат на резултатния файл, bit depth, bit rate и т.н.) (!) Трябва да настроим аудио сесията, за да можем да записваме (за това по-подробно при AVAudioSession)
22 Поддържани формати: AVAudioRecorder misc AVAudioRecorderDelegate - съобщава кога е свършило записването (дали е било успешно) /евентуално при грешка
23 Примери //Setup recorder NSNumber* format = [ NSNumber numberwithint :kaudioformatappleima4 ]; NSDictionary * settings = [NSDictionary dictionarywithob jectsandkeys :format, AVFomatIDKey, nil]; NSString* filename = [ NSTemporaryDirectory () stringbyappendingpathcomp onent:@"temp.caf"]; NSURL* location = [ NSURL fileurlwithpath :filename]; AVAudioRecorder * recorder = [[ AVAudioRecorder alloc ] initwithurl:location settings:settings error:&error]; //record [recorder record ]; //stop recording [recorder stop ]; //pause & resume [recorder pause ];... [recorder record ];
24
25 Настойки на поведението AVAudioSession Singleton, създава се при стартиране Занимава се с аудио "поведението" на приложението - напр. дали нашето аудио може да се смесва с музиката от ipod, какво да прави при аларми, и т.н. Като цяло служи като посредник между нашето приложение и ios Описва почти всичко - дали имаме право на audio input/output въобще, mixing,... Има поведение по default - playback, без записване, без миксиране
26 AVAudioSession more Но Apple казват че не е добре да минаваме въобще без конфигуриране, понеже няма как така да се възстановяваме от прекъсвания (напр. обаждане) Сесията трябва да бъде активна за да са в сила правилата, които описва (кога може да се деактивира - при прекъсвания) Audio session category - описва набор от поведения за приложението; ползва се със setcategory:error: Категориите са NSString константи
27 AVAudioSession even more Категориите описват цялостно поведение на приложението, а понякога не са напълно подходящи Например - категорията AVAudioSessionCategoryPlayAndRecordне позволява миксиране с други приложения (а бихме могли да искаме..) Има и C API - Audio Session Services set/get на property-та - AudioSessionSetProperty, AudioSessionGetProperty Позволява по-фин контрол Можем да мешаме обръщения към него с ползване на AVAudioSession
28 NSError* error = nil; Примери //Category usage AVAudioSession* session = [AVAudioSession sharedinstance]; [session setcategory:avaudiosessioncategoryplayandrecord error:&error]; //Allow mixing with other apps, use C API UInt32 mixwithothers = 1; //YES OSStatus status = AudioSessionSetProperty ( kaudiosessionproperty_overridecategorymixwithothers, sizeof(mixwithothers), &mixwithothers); [session setactive:yes error:&error];
29
30 Мултимедия чрез HTML5 HTML5 предлага поддръжка за аудио и видео с <audio> и <video> елементите Има възможност за стандартни контроли Не специфицира кои са поддържаните формати - всеки browser има възможност да си избира (но главно Ogg, H. 264)
31 MapKit + CoreLocation MapKit съдържа главно view за карта + начини за overlay-ването и, както и някои типове и функции за по-лесна работа с точки от картата Има и вграден reverse geocoder CoreLocation е framework за определяне на текущата позиция на потребителя. Доста често MapKit се използва заедно с CoreLocation
32 Map basics Една точка от повърхността на Земята се определя от 2 координати - ширина (latitude) и дължина (longitude). И двете са в градуси latitude [-90.0, 90.0] longitude [-180.0, 180.0]
33 MapKit basic data types lat/lng се представят с CLLocationDegrees, което е typedef на double CLLocationCoordinate2D e двойка (lat, lng) - описва точка MKCoordinateSpan е двойка (latdelta, londelta) - същата структура като по-горе, но различна семантика MKCoordinateRegion е двойка централна точка + coordinate span. Описва регион от картата Всички изброени са прости структури и имат методи, които ги създават
34 Map view basics MKMapView View, което показва карта; Ползва услуги на Google, съответно има някакви terms of service Може да бъде добавяна допълнителна информация върху картата Има стандартни жестове за интеракция - flick за преместване, pinch за zoom in/out Може да показва позицията на потребителя
35 MKMapView more Главните свойства за действия с позицията на картата са centercoordinate и region Има делегат - MKMapViewDelegate, който ни информира за събития (например смяна на региона, зареждане на данни, събития с анотациите и др.) Показването на позицията на user-a e с showsuserlocation За съжаление без адекватна поддръжка на (дискретни) zoom levels - трябва да си правим сметките сами (но има подходящи за това категории на MKMapView в интернет)
36 Анотации по картата MKAnnotation protocol - описва "модела" на анотацията (стандартно координата, опционално title, subtitle) Добавяме към картата с addannotation: (съответно махаме с removeannotation:) Делегата ни "пита" за view-то, съответстващо на анотация с mapview:viewforannotation: - иска се да върнем MKAnnotationView
37 MKAnnotationView Грижи се как ще изглежда анотацията на картата, т.е. свързано е с конкретна анотация Най-често се слага картинка - свойството image Обектите от този тип могат да бъдат преизполвани (като клетките в таблица) - картата просто ни пита за viewтата на анотациите, които са видими в момента Може да бъде select-вано - и да показва т.нар. callout view
38
39 CoreLocation Главно функционалност за определяне на местоположението на устройството Има опции за следене на региони От ios 5 нататък, има и geocoder (замества предишния MKReverseGeocoder)
40 Определяне на местоположение CLLocationManager Следи за промени в положението Два основни начина - стандартен и следене само на големи промени. Втория е по-неточен, но пък използва много по-малко батерия Ако ползваме стандартното следене, можем да му даваме желана точност и distance filter Пази и последно получения location Получаваме резултатите чрез делегат - CLLocationManagerDelegate
41 CLLocationManager more "Искаме" update-и със startupdatinglocation/ startmonitoringsignificantlocationchanges Спираме със съответните stop методи Резултатите ги получаваме в делегата - locationmanager: didupdatetolocation:fromlocation: Можем да проверим дали location services са позволени - locationservicesenabled (потребителя може да ги изключи глобано или за приложение)
42 Следене на региони Възможно е от ios4 нататък Региона се описва с CLRegion. Идентифицира се с identifier "Регистрираме" региона с startmonitoringforregion: desiredaccuracy: (!) Регионите, които нашето приложение следи, са в monitoredregions на (който и да е) location manager. Те се запазват между стартиранията на приложението (!) Ако потребителя влезе/излезе в даден регион, който следим, и нашето приложение не е пуснато, то се стартира
43 .. cont'd Важно е да сравняме обектите от CLRegion по идентификатор, понеже не е гарантирано че ще получим същите (като адреси) Можем да проверяваме дали можем да следим региони - regionmonitoringavailable, regionmonitoringenabled
44 CLGeocoder От ios5; замества по-стария MKReverseGeocoder Може да извършва и forward, и reverse geocoding (forward = адрес -> координати, reverse = координати - > адрес) Приема completion блокове, а не използва делегат
45
46 Q&A
47 Благодаря Ви за вниманието!
Address Book
Address Book & Messaging Боян Лазов Address Book Address Book - intro База данни, съдържаща контакти на хора и друга лична информация Идеята е тази информация да бъде споделена и достъпна между приложенията
ПодробноВидеорекордер АHD-3908 Ръководство за експлоатация Моделите от тази серия са отличен избор за цифрово наблюдение на обекти в различни сфери, където во
Видеорекордер АHD-3908 Ръководство за експлоатация Моделите от тази серия са отличен избор за цифрово наблюдение на обекти в различни сфери, където водещ фактор е сигурността. Вградената LINUX операционна
ПодробноМрежов видео рекордер Ръководство за употреба
Мрежов видео рекордер Ръководство за употреба Съдържание Работа с USB мишка... 3 Главно меню... 4 Преглед на живо... 5 Цифрово машабиране... 5 PTZ Управление... 6 Извикване на Предварителна настройка (Presets)
Подробно1
1. Общи MPdemo е аудио плеър използващ BASS библиотеките. Той може да възпроизвежда широк набор от аудио файлове, аудио CD и интернет радио. Има три режима на работа: а) Възпроизвеждане на аудио файлове
ПодробноMicrosoft Word - D3-11.doc
Основна цел Степен на трудност Междинна цел Педагогически указания D3/11 D : Осъществяване на писмено съобщение 3 1 : Съставяне на писмено съобщение Оперативна цел Оперативна цел 1: Даване на писмени указания
ПодробноВъведение в UIKit Георги Пенчев
Въведение в UIKit Георги Пенчев За какво ще си говорим Събития: обобщение Класът UIControl Основни елементи за потребителския интерфейс Специални видове изгледи и приложенията им Събития в ios Събития
ПодробноWolfram Mathematica & SQL
Wolfram Mathematica & SQL Емил Тоцев Сп. Информатика, 4 курс, група 1 б ф. номер: 0801261034 Р-л: Гл.ас. Христина Кулина ФМИ на ПУ П. Хилендарски, 23.02.2012 - Пловдив Съдържание: Въведение в DatabaseLink
ПодробноPaint.net
Paint.net Урок 1 запознаване с различни разширения и слоеве Какво е разширение на един файл? Както знаете, всеки един файл си има име и разширение. Как изгелжда това: Име Разширение Името е уникално за
ПодробноОПЕРАЦИОННАТА СИСТЕМА MS WINDOWS 10 Според някои в операционната система Windows 10 Microsoft събират найдобрите черти от версии 7 и 8. Тя е доста по-
ОПЕРАЦИОННАТА СИСТЕМА MS WINDOWS 10 Според някои в операционната система Windows 10 Microsoft събират найдобрите черти от версии 7 и 8. Тя е доста по-гъвкава от всичко, което Microsoft са правили досега.
ПодробноMicrosoft Word - OnlineMapUpdate_BGR_XXX.docx
Онлайн актуализация на карти Общи указания онлайн актуализация на картата Тъй като картовите данни остаряват, се актуализират редовно. Съществуват следните възможности за актуализация в мултимедийната
ПодробноN21mobile Политика за бисквитки За екипа на Network TwentyOne е от изключително значение да защитим от посегателства Вас и Вашите данни, които събирам
N21mobile Политика за бисквитки За екипа на Network TwentyOne е от изключително значение да защитим от посегателства Вас и Вашите данни, които събираме онлайн (анонимни или други). В тази секция ще научите
ПодробноСподеляне на анонимни данни с Lenovo Съдържание Споделяне на анонимни данни с Lenovo... 1 Harmony... 1 Lenovo Companion Lenovo Customer Engag
Споделяне на анонимни данни с Lenovo Съдържание Споделяне на анонимни данни с Lenovo... 1 Harmony... 1 Lenovo Companion 3.0... 2 Lenovo Customer Engagement Service... 3 Lenovo Experience Improvement (само
ПодробноDigital library 2.0
Дигиталната библиотека (DL - Digital Library) е библиотека, в която колекциите се съхраняват в дигитален (цифров) формат, различен от книжния вариант, микроформите или друг формат, и които са достъпни
ПодробноEventPlus.bg - бъдете видими за организатори на събития
платформата, свързваща организатори на събития със зали, оборудване и услуги Категория Ивент Център Визуална реклама Представете Вашия хотел като Ивент Център Ключови факти Местоположение Категория Капацитет
ПодробноMobi-B мобилен портфейл Инструкция за работа
Mobi-B мобилен портфейл Инструкция за работа СЪДЪРЖАНИЕ Изтегляне и регистрация... 3 Регистриране на нова карта... 3 Добавяне на последваща карта... 5 Изтриване на карта... 6 Подмяна на мобилен телефон...
ПодробноТермограф Cargo Log Master Ръководство за работа и настройки през WiFi, V1.0 Включете захранването със задържане на бутон Power. Следва начална анимац
Включете захранването със задържане на бутон Power. Следва начална анимация с 3 светодиода и възходящ звук на дисплея, при което се изписват ID номер на термографа, версията на фърмуера и сайта на производителя.
ПодробноMicrosoft Word - WI61V04_Instr_exploat_GSM_2014.doc
1 Предназначение Услугата Solid MobileKEY е предназначена да: Управлява дистанционно отключването и заключването на врати с електро-механична брава, производство на фирма ООД; Да осигурява постоянна обратна
ПодробноЕДИС СОФТУЕР ЕООД Пловдив, тел , ЕДИС-АСО ИЗТЕГЛЯНЕ И ИНСТАЛИРАНЕ НА АКТУАЛИЗАЦИЯТ
ЕДИС СОФТУЕР ЕООД Пловдив, тел. 0888-640825, 0877-660667 office@edis-bg.com, https://www.edis-bg.com ЕДИС-АСО ИЗТЕГЛЯНЕ И ИНСТАЛИРАНЕ НА АКТУАЛИЗАЦИЯТА \ Пловдив, юни 2019 г. - 1 - 1. ОПРЕДЕЛЯНЕ НА ТЕКУЩАТА
ПодробноДопълнения в периода Версия Модул Документи Към Права на достъп до екземпляри документи е добавено право Изтриване на док
Допълнения в периода 25.04.2019 28.05.2019 Версия 4.42.0 Модул Документи Към Права на достъп до екземпляри документи е добавено право Изтриване на документ. Новото право е с по-нисък приоритет от правото
ПодробноСистеми за глобално позициониране
СИСТЕМИ ЗА ГЛОБАЛНО ПОЗИЦИОНИРАНЕ GPS Системи за глобално позициониране Global Positioning System - GPS Спътникови навигационни системи: За определяне на местоположението Измерване на разстоянието Времето
ПодробноHPRECV3BK_Notice.indd
BLUETOOTH ТОНКОЛОНА Инструкции за употреба AUX DC 5V SD MIC LED Характеристики на продукта 1. Bluetooth безжична технология 2. AUX вход за слушалки 3. FM радио 4. Поддържа карта памет( MP3 аудио формати
ПодробноКратка инструкция за инсталиране (За Windows & Mac OS) Външна HD P2P IP Камера Mодел:FI9803EP Mодел:FI9803P Mодел:FI9903P Съдържание на опаковката IP Камера Адаптер CD Ethernet Кабел Монтажна стойка Wi-Fi
ПодробноЧесто задавани въпроси за Eee Pad TF201 Управление на файлове... 2 Как да получа достъп до данните, записани на microsd, SD карта и USB устройство?...
Често задавани въпроси за Eee Pad TF201 Управление на файлове... 2 Как да получа достъп до данните, записани на microsd, SD карта и USB устройство?... 2 Как да преместя избрания файл в друга папка?...
ПодробноЕВРОПЕЙСКИ СЪЮЗ Европейки фонд за регионално развитие Инвестираме във вашето бъдеще ОПЕРАТИВНА ПРОГРАМА Развитие на конкурентоспособността на българск
BG161PO003-1.1.06-0022-C0001 Ръководство за работа със системата Този документ е създаден с финансовата подкрепа на Оперативна програма на българската икономика 2007-2013, съфинансирана от Европейския
ПодробноНАУЧНИ ТРУДОВЕ НА РУСЕНСКИЯ УНИВЕРСИТЕТ , том 47, серия 4 Сравнително изследване на някои от характеристиките на измервателните системи за позиц
Сравнително изследване на някои от характеристиките на измервателните системи за позициониране и навигация на автомобили Даниел Любенов, Митко Маринов A comparative study of some characteristics of the
ПодробноM03L Wired Laser Mouse
Основни операции Натиснете и задръжте Бутон захранване за да включите устройството. То автоматично влиза в главното меню на Началния екран. Главното меню включва Книги, Музика, Снимки, Букмарки, Предпочитани,
Подробно1 КаБел ЕООД Документация за софтуерния продукт КаБел ЕООД, подпомагащ организация на складовата дейност в железария Автор: Румен Ангелов История на в
1 КаБел ЕООД Документация за софтуерния продукт КаБел ЕООД, подпомагащ организация на складовата дейност в железария Автор: Румен Ангелов История на версиите 1.10 *подредба име, размер в наличност екран
ПодробноПрограмиране на Паскал
Поради връзката на С++ с езика С в голяма част от литературата е прието записването С/С++. Това е найизползваният език за програмиране в света, поради което синтаксисът на някои от по-новите езици като
ПодробноDOT NET 3.1
.NET технологии Изграждане на уеб приложения с ASP.NET Forms Управление на състоянието (state) State Повечето приложения използват данни (променливи), които трябва да се съхранят по време на няколко заявки
ПодробноРъководство за употреба на Мобилно приложение - Портал за Дистанционно обучение СЪДЪРЖАНИЕ 1. Какво Ви дава мобилната версия на Портала за Дистанционн
Ръководство за употреба на Мобилно приложение - Портал за Дистанционно обучение СЪДЪРЖАНИЕ 1. Какво Ви дава мобилната версия на Портала за Дистанционно обучение на НИП 2. Инсталиране на мобилното приложение
ПодробноSlide 1
ФИШИНГ Какво е фишинг (на англ. phishing )? Фишинг ( phishing ) зарибяване, произлиза от fishing риболов, защото електронните съобщения, които се разпращат, са като въдици. Престъпниците създават имейл
ПодробноFull HD камера в настолен часовник с датчик за движение: инструкция за експлоатация - SPY.BG
F U LL H D КАМЕ РА В НАС Т ОЛЕН ЧАС ОВ НИК С ДАТ ЧИК ЗА Д В ИЖ ЕНИЕ ИНСТРУКЦ ИЯ З А ЕК С ПЛОАТ АЦИЯ 1. Заредете добре устройството, като го оставите на зарядното поне 4 часа. 2. Поставете microsd карта
ПодробноFuvas Administrator / ФУВАС Администратор РЪКОВОДСТВО ЗА РАБОТА с потребителски софтуер за анализиране данни от ФУВАС произведени от фирма TREMOL Fuva
РЪКОВОДСТВО ЗА РАБОТА с потребителски софтуер за анализиране данни от ФУВАС произведени от фирма TREMOL Приложението е предназначено за крайни клиенти, притежаващи автомати на самообслужване, оборудвани
ПодробноMicrosoft Word - VM22 SEC55.doc
Лекция 5 5 Диференциални уравнения от първи ред Основни определения Диференциално уравнение се нарича уравнение в което участват известен брой производни на търсената функция В общия случай ( n) диференциалното
ПодробноСУСИ-4 - Помощна информация за студента Настоящата информация е предназначена за студенти от Стопанския факултет. А. Адресът за достъп до системата е:
СУСИ-4 - Помощна информация за студента Настоящата информация е предназначена за студенти от Стопанския факултет. А. Адресът за достъп до системата е: https://susi.uni-sofia.bg За достъп до системата се
ПодробноLush Green
Класове Какво са класовете? Основен инструмент на ООП Средство за дефиниране на абстрактни типове данни Синтактична конструкция, която позволява логическо групиране на данни и операциите над тях Дефиниция
ПодробноSoftwareDoc.docx
Описание на програмата SwitchManager СЪДЪРЖАНИЕ ПРЕДНАЗНАЧЕНИЕ... 2 ИНСТАЛИРАНЕ И АКТИВИРАНЕ НА ПРОГРАМНИЯ МОДУЛ... 2 СТАРТИРАНЕ НА ПРОГРАМАТА... 3 РЕЖИМИ НА РАБОТА НА УСТРОЙСТВОТО... 6 WI-FI НАСТРОЙКИ...
ПодробноEventPlus.bg - бъдете видими за организатори на събития
платформата, свързваща организатори на събития със зали, оборудване и услуги Само в Eventplus.bg филтри за търсене поспециализирани критерии Само в Eventplus.bg организаторите могат да търсят по специализирани
ПодробноExtended monitoring with The Dude ros_command
Разширен мониторинг в The Dude с функцията ros_command София, MUM България 2019 г. Петър Димитров За мен: ПГ НЕТ ПРО ЕООД Компютърни мрежи: Персонализирани решения Обучения Консултантски услуги Петър Димитров
ПодробноДесислава Цокова ЗАБАВНИ ОБУЧИТЕЛНИ ИГРИ С LEARNING APPS НЕОБХОДИМИ РЕСУРСИ Компютър, интернет за създаването и ползването им. Регис
Десислава Цокова dtsokova@pgaz.org ЗАБАВНИ ОБУЧИТЕЛНИ ИГРИ С LEARNING APPS НЕОБХОДИМИ РЕСУРСИ Компютър, интернет за създаването и ползването им. Регистрация. ВЪВЕДЕНИЕ LearningApps.org е Web сайт, подкрепящ
ПодробноПрезентация на PowerPoint
За какво ще си говорим тук и сега? Все още млад татко 8+ опит в Дигиталния маркетинг Състезава се в тежка категория на Inbound Marketing техниките Над 600 реализирани кампании Над 90 клиента, 60 активни
Подробно