• No results found

Trådlös överföring av media från mobilenhet till lokal server EXAMENSARBETE

N/A
N/A
Protected

Academic year: 2021

Share "Trådlös överföring av media från mobilenhet till lokal server EXAMENSARBETE"

Copied!
25
0
0

Loading.... (view fulltext now)

Full text

(1)

EXAMENSARBETE

Trådlös överföring av media från mobil

enhet till lokal server

Jimmy Wallgren

Högskoleingenjörsexamen Datateknik

(2)

Trådlös överföring av media från

mobil enhet till lokal server

(3)

Förord

Först vill jag tacka North Kingdom för möjligheten att göra detta examensarbete hos er.

(4)

Sammanfattning

(5)

Abstract

This Bachelor’s thesis describes the design and creation of a client app for the iPhone and a server program for the Mac. The app is meant to be used by visitors at music festivals and similar events, to share what they see with other visitors. The iPhone app uses the built in camera to take pictures that are

automatically uploaded to a local server if available. The server program then saves the images and displays them on a large monitor or with a video

(6)

Innehållsförteckning

Förord...II Sammanfattning...III Abstract... IV Ordlista och förkortningar... VI

1 Introduktion... 1 1.1 Mål och syfte... 1 2 Genomförandet... 2 2.1 Plattformar/teknik... 2 2.3 Utvecklingsmiljö...3 2.4 Arbetssätt... 3 2.5 Uppbyggnad/funktion/design...3 2.5.1 Klient...3 2.5.2 Server... 4 2.6 Flöde... 4

2.6.1 Programflöde sett från klienten:...4

2.6.2 Programflöde sett från server:... 5

3 Resultat... 9

3.1 Diskussion...10

3.1.1 Framtida förändringar och vidareutveckling...10

3.2 Summering...11

4 Referenser... 12

4.1 Skriftliga källor... 12

4.2 Dokument på nätet... 12

4.2.1 Officiella hemsidor...12

4.2.2 Övriga dokument på nätet... 12

(7)

Ordlista och förkortningar

Ord/Förkortning Förklaring

CRC Cyclic redundancy check. Teknik for att beräkna kontroll summor för att verifiera data och på så vis detektera korrupt data.

iOS iPhone OS, ej att förväxla med Ciscos "IOS". iOS används idag som operativsystem i många av Apples portabla enheter exempelvis iPhone, iPad och vissa modeller av iPod.

DNS Domain Name System. System för att hantera och översätta namn(www.exempel.se) till ip adresser. mDNS multicast DNS. Teknik för att översätta lokala host

namn till ip adresser utan någon dedicerad DNS server.

C Ett vida spritt programmerings språk som ligger som grund för många andra programmerings språk.

C++ Object orienterat programmerings språk baserat på programmerings språket C.

Objective C Objekt orienterat programmerings språk baserat på C och Smalltalk.

Används huvudsakligen i Apples Mac OS X och iOS. zero-configuration

networking over IP Teknik för att automatisk skapa ett fungerande ip nätverk utan manuell konfiguration eller konfigurations servrar.

Och hanteras av ZEROCONF Working Group, part of the Internet Engineering Task Force (IETF).

Mulicast Teknik för att skicka data till flertalet hostar samtidigt.

jpeg Format för att komprimera bilder skapat av "Joint Photographic Experts Group".

Exif Exchangeable Image Format. Specifikation för hur metadata sparas i bilder till exempel kamerans orientering och geografisk plats.

Texturer Bilder som appliceras på ytan av objekt i datorgrafik.

(8)

1 Introduktion

Grunden till projektet kom till under en brainstorming session under mitt första möte med min handledare Lars Alin och David Eriksson på North Kingdom. Det vidareutvecklades sedan tillsammans med min handledare till det projekt som blev mitt exjobb.

1.1 Mål och syfte

(9)

2 Genomförandet

Projektet består av två huvud komponenter ett klientprogram till en mobil enhet samt en serverprogramvara som skall köras på en dator. Klienten skall automatiskt kunna lokalisera den server på det lokala trådlösa nätet som den ska ansluta till via wifi. Klienten ska kunna använda den

inbyggda kameran för att ta bilder som den sedan automatiskt skickar över via wifi till tidigare nämnda server. När klienten gör en automatisk sökning efter en tillgänglig server så ska server programmet svara så ingen manuell inställning ska behöva göras av användaren av klienten. Serverprogrammet ska kunna ta emot och spara bilderna samt kunna visa upp dem grafiskt på ett visuellt tilltalande sätt på till exempel en

projektor.

2.1 Plattformar/teknik

Telefon som valdes är en Apple iPhone som använder operativsystemet iOS, men alla Apples iOS baserade enheter (till exempel iPod touch) som uppfyller kraven kan användas. Kraven är att enheten har en wifi

anslutning och en kamera samt kör iOS 4.2 eller nyare. I iOS finns det en funktion kallad Bonjour som används för att automatiskt hitta tillgängliga tjänster i det här fallet serverprogrammet.

Till server dator valdes en Mac då också Mac OS stöder Bonjour vilket var ett krav för att den skulle gå att använda som server dator. Utveckling av mjukvara till Mac OS sker i samma programmerings språk och

utvecklingsmiljö som till iOS. Vilket ger en del fördelar, till exempel att de flesta funktioner och bibliotek har samma namn och fungerar på samma sätt. En MacBook Pro av äldre modell användes som test dator. Samma MacBook Pro användes också att köra utvecklingsmiljön på.

Programmeringsspråket Objective-C användes, det bygger vidare på standard ANSI C. Det tillhandahåller funktioner som behövs i ett modernt objekt-orienterat programmerings språk. Det fungerar också utmärkt att inkludera filer med C++ kod.

Objectiv-C innehåller en hel del funktioner som underlättar mycket när man programmerar, när man väl har lärt sig att använda dem.

För den grafiska presentationen valdes det att använda OpenGL. OpenGL är väldokumenterat och finns på många olika plattformar. Att använda OpenGL förenklar arbetet med att programmera de animerade 3D presentationerna av bilderna som skall göras. Det stöder

hårdvaruacceleration vilket avlastar processorn en del. Dock skiljer sig Apples OpenGL implementationen lite från standarden.

Apple har lagt till en del egna funktioner för att integrera OpenGL i applikationer[2-3].

Bonjour är Apples implementation av "zero-configuration networking over IP".

(10)

till adress översättning och automatisk lokalisering av lokalt tillgängliga tjänster.

Adresseringen hanteras genom själv tilldelande av adresser, detta görs genom att använda grupp av adresser reserverade för det lokala

nätverket. Det fungerar på så sätt att den helt enkelt väljer en adress från gruppen och provar den, och är adressen ledig så används den.

Namn till adress översättningen för det lokala nätverket använder

Multicast DNS (mDNS) som DNS förfrågningar med IP multicast. På så sätt behövs ingen lokal DNS server för att hantera lokala DNS förfrågningarna, utan varje enhet eller tjänst hanterar att besvara förfrågningar som är riktade till dem.

Att lokalisera tjänster fungerar på så sätt att en förfrågan görs efter en viss typ av tjänst på en viss domän (vanligen "lokal."). Förfrågan görs med mDNS förfrågning. Alla tjänster som matchar förfrågan besvarar den med sitt namn, sedan kan man välja mellan de returnerade namnen och göra en namn till adress uppslagning som resulterar i en adress och en port som tjänsten finns på[2].

2.3 Utvecklingsmiljö

Apples utvecklingsmiljö heter Xcode. Den användes under utvecklingen av både iOS klienten och den server som kördes på Mac OS.

Med Xcode följer även en iOS simulator som användes flitigt för att testa klienten under utvecklingen. Den kan simulera olika versioner av iOS och olika typer av hårdvara.

Ett annat program som också användes flitigt och följer med Xcode är Instruments. Det innehåller ett stort utbud verktyg för att testa och hitta olika fel i program, till exempel Leaks som används för att hitta

minnesläckage.

2.4 Arbetssätt

Arbetet började med att studera dokumentationen till utvecklingsmiljön, programmerings språket och ett antal programmerings guider för iOS och Mac OS X[1-2] [6] för att avgöra vilka funktioner och möjligheter som fanns, och upptäcka eventuella skillnader i hur man programmerar i

Objective-C jämfört med C och C++. En del mindre variationer finns så en viss inlärnings-period blev det.

Projektet delades upp i mindre delar som var lätta att implementera och testa oberoende av varandra som sedan slogs samman till en server och en klient.

2.5 Uppbyggnad/funktion/design

2.5.1 Klient

Klient består av följande huvud delar: två vyer, en från vilken man startar kamera läget och en vy till ett album på nätet. En Bonjour klient som lokaliserar en lokal server, och funktioner för att ansluta till en server och föra över bilder.

(11)

programmet. Att ha en funktion för att skicka bilder som redan finns i telefonen övervägdes men kasserades då endast ny tagna bilder är intressanta.

2.5.2 Server

Server programmet består av följande huvud delar: en Bonjour server som utannonserar server adressen, funktioner för att ta emot och spara bilder på hårddisken och ett grafiskt fullskärmsläge som kan visa de nyinkomna bilderna på fyra olika sätt.

Det första sättet är en ring bestående av åtta bilder, ringen roterar runt sin egen axel. Bilderna uppdateras då de är utom synhåll. Finns ingen ny bild så behålls den gamla bilden. Finns det en ny så sparas den gamla bilden undan i kön för gamla bilder, och ersätts i ringen med den nya bilden.

I det andra läget sprids bilderna med en slumpmässig placering och rotations vinkel över skärmen. Skulle inga nya bilder komma in under en längre period läses en gammal bild in och visas istället. Detta görs för att det inte ska bli helt stilla på skärmen då inga ny bilder finns tillgängliga. Inläsningen av gamla bilder sker med längre tid mellan än inläsningen av nya bilder. När antalet bilder överstiger 20 läggs den äldsta bilden i en separat kö för att antingen åter användas senare eller kasseras.

Det tredje sättet är en horisontellt scrollande presentation där bilderna kommer in från utanför bild och sedan rullar över skärmen från vänster till höger där bilden sedan tages bort när den är utanför bild.

Den fjärde och sista består av en dubbelsidig bild som roterar runt sin egna horisontella axel och visar den bild som tidigare var vänd bort. När en bild är vänd bort så att den inte längre syns byts den ut mot en annan bild från en bild-kö.

Det går att växla mellan de fyra olika presentationerna manuellt men det finns också ett helautomatiskt läge som skiftar mellan de olika

presentationerna med två minuters mellanrum.

Inläsning av texturer görs genom att filnamnet och sökvägen som en bild är sparad på används för att läsa in bilden som skall användas som textur. Meta data (Exif) extraheras från bilden så att bildens orientering kan

fastställas så att bilden kan roteras så att den visas rätt väg[7]. Bilden konverteras sedan till ett format som kan användas som en textur av OpenGL[4-5]. All information rörande texturen lagras i ett objekt.

2.6 Flöde

2.6.1 Programflöde sett från klienten:

Programmet startas, Bonjour söker efter en server tills en har lokaliseras. Användaren trycker på knappen som visar kamera vyn. Användaren tar ett foto, en kopia av bilden sparas i telefonens fotoalbum sedan

(12)

etablerar en anslutning till en server med hjälp av information från Bonjour. Först skickas storleken på bilden, sedan skickas själva bilden, under tiden bilden skickas beräknas också en CRC checksumma. Så när all bild data har skickats så skickas checksumman. Efter det så stängs

anslutningen ned. Klienten väntar nu på att nästa bild ska tas.

2.6.2 Programflöde sett från server:

Programmet startar en Bonjour server som svarar på klienters

förfrågningar om server adressen. Samtidigt startar det grafiska systemet upp och laddar en bild av en logga som det visar tills foton kommer in. Server väntar på anslutningar. En klient ansluter, en fil att spara bild data i skapas, först tas storleken på bilden emot sedan följer själva bild data, och i slutet finns CRC checksumman som kontrolleras mot den CRC som har beräknats medan bilden togs emot. Om checksumman är korrekt läggs bilden till i en kö för nya bilder, om checksumman inte är korrekt raderas filen.

Samtidigt ligger det grafiska systemet och väntar på att det ska komma in nya bilder i kön för nya bilder. När det kommer in nya bilder i kön för nya bilder, kan fyra olika saker ske beroende på vilken av de fyra olika

presentationerna som är aktiv:

Ring:

Ringen roterar runt och så fort en bild inte längre är synlig så kontrolleras det om det finns en ny bild tillgänglig i kön med nya bilder om det gör det så läggs den gamla bilden i en kö för använda bilder, och sedan läses den nya bilden in och konverteras till en textur som sedan kan laddas och visas. När ringen roterar så att bilden blir synlig igen så ritas den ut. Allt detta upprepas för alla åtta bilder i ringen.

(13)

Slumpmässig ut-placering:

När det är dags att lägga in en till bild kontrolleras det om det finns någon ny bild att lägga till om det inte gör det väntas det några varv till, och under tiden kontrolleras det om det har kommit in några nya bilder, finns det fortfarande ingen ny läses en gammal bild in från kön med gamla bilder. Finns det en ny bild så läses den in och läggs till i kön för bilder som ska ritas ut. Blir det då fler än 20 bilder i den kön så plockas en ut och läggs till i kön för gamla bilder. Den nya bilden konverteras till en textur och tilldelas sedan slumpmässiga x och y koordinater i intervaller ±2.5. Den tilldelas också en positiv eller negativ vinkel som gör att bilden placeras ut med en rotation så att de inte ser ut att bara stå på rad. Sedan ritas alla bilder i kön för bilder som skall ritas ut ut.

(14)

Horisontellt scrollande:

Kontrollera om det är dags att lägga till en ny bild. Om det inte är dags att lägga till en ny bild, så börja bearbeta kön med bilder som skall ritas ut. Läs in en bild från kön med bilder som skall ritas ut uppdatera offseten som bestämmer var bilden skall ritas ut från ursprungs-läget sett och sedan rita ut den, detta upprepas för alla bilder i kön.

Kontrollera om någon bild är utanför skärmen, om någon bild är det, så ta bort den från kön. När det är dags att lägga till en bild så kontrolleras det om det finns någon bild i kön för nya bilder om det inte gör det så

används en gammal bild från kön med gamla bilder. Bilden läggs till i kön för bilder som skall ritas ut genom att kopiera in sökvägen för bilden i ett nytt bild objekt, som sedan läggs till i kön för bilder som skall ritas ut. När ett bildobjekt som inte innehåller ett textur objekt skall ritas ut så skapas ett textur objekt och bilden läses in och konverteras till en textur.

(15)

Dubbelsidig bild:

I det här läget så byts bilden ut då den är vänd bort från kameran, finns det ingen ny bild så återanvänds en gammal bild från kön med gamla bilder. Finns det en ny så läggs den nuvarande bilden till i kön med gamla bilder. Och ersätts med den nya bilden som läses in, konverteras till en textur och ritas ut. Sedan upprepas allt för den andra sidan.

(16)

3 Resultat

Arbetet har resulterat i en iPhone app och ett server program till Mac. iPhone appen har följande funktionalitet. Den kan starta kamera läget inifrån appen och ta bilder som automatiskt skickas till en lokal server och sparas i telefonens interna fotoalbum. Om ingen server finns tillgänglig så sparas bilden endast i telefonens fotoalbum.

Appen kan också visa en hemsida som är tänkt att fungera som ett album, där bilder som användare av appen har tagit ska finnas tillgängliga.

När klienten skickar ut en förfrågan på det lokala nätet efter en server så

svarar server programmet. Programmet kan ta emot de bilder iPhone appen skickar och det kan visa dem med fyra olika grafiska

presentationer.

Projektet har inte testats i stor skala ännu, men en del mindre tester har gjorts med ett fåtal klienter. Resultaten har varit bra i liten skala. En del

(17)

simulerade test av ett stort antal klienter har också gjorts genom att skicka ett stort antal bilder samtidigt med en modifierad version av klienten här har grafiken haft lite problem med att den inte flyter mjukt utan hackar.

3.1 Diskussion

Programmen fungerar och gör allt det är tänkt att göra dock så här i efterhand så inser jag att jag nog gjorde nätverks kommunikationen lite väl enkel vilket medför att det krävs en del förändringar av

kommunikationen för att implementera mer funktioner. När jag nu är mer van att programmera i Objective-C ser jag en hel del möjligheter som jag inte såg i början av projektet.

Ska server programmet användas med en större mängd klienter krävs en kraftfullare dator än den bärbara dator som användes i testerna. Med ett fåtal riktiga klienter så fungerar allt bra men vid simuleringar av stora mängder klienter så blir animationen lite hackig i tex rotationen i "ringen". Xcode är en praktisk utvecklingsmiljö att arbeta med som innehåller mycket funktioner som underlättar arbetet, ett exempel på en flitigt använd funktion är att det räcker med att höger klicka på något skrivet i koden och välja sök i dokumentation så får man upp dokumentationen för det. Interface builder verktyget som används för att designa det grafiska interfacet har gott om funktioner men är inte alltid så lätt att använda. Att placera ut objekt och designa den grafiska delen är enkelt, men när man skall binda ihop det med koden så uppstår ibland problem oftast orsakade av någon felaktig inställning eller misstolkning av hur det skall

fungera/göras. För Objective-C gäller samma sak som för Xcode, det innehåller många smarta funktioner och finesser som underlättar arbetet och minskar mängden onödigt arbete med till exempel skapande av

funktioner i klasser som man automatiskt kan generera med endast några få enkla kod rader med instruktioner för hur de skall skapas.

3.1.1 Framtida förändringar och vidare utveckling

Som det är nu är protokollet enkelt och primitivt kan endast hantera sändning av bilder. På grund av att det inte finns något sätt att ange en filtyp. Det finns en hel del möjligheter för förbättringar. En möjlig

förbättring av överföringen är att implementera autentisering av både server och klient så att man är säker på att det är rätt server man ansluter till och att det är en korrekt klient som ansluter.

En annan intressant möjlighet vore att förbättra protokollet så att det också kan hantera överföring av film filer inspelade med den telefonens inbyggda kamera. För protokollets del innebär det endast att lägga till ett sätt att ange filtyp. Samt förbättringar i den grafiska delen av server programmet så att det också kan visa film filerna. Möjligheten att

inkludera namn på personen som tagit bilden skulle också vara intressant möjlighet.

(18)

möjligheten att välja server i klienten så att man till exempel kan välja vilken skärm bilderna skall visas på. Men server namnen måste bestå av ett enda sammanhängande namn alltså inga skiljetecken eller mellanslag endast "A-Z ", "0-9" och "_".

3.2 Summering

(19)

4 Referenser

4.1 Skriftliga källor

[1] Vandad, Nahavandipoor, iOS 4 Programming Cookbook. O´Reilly ISBN 978-1-446-38822-5

4.2 Dokument på nätet

4.2.1 Officiella hemsidor

[2] Apples site för utvecklare

http://developer.apple.com/resources/

[3] OpenGL dokumentation

http://www.opengl.org/sdk/docs/

4.2.2 Övriga dokument på nätet

[4] OpenGL tutorials:

http://nehe.gamedev.net/

[5] OpenGL programmerings Guide:

http://fly.cc.fer.hr/~unreal/theredbook/

[6] iOS programmering

http://www.techotopia.com/index.php/IOS_4_Architecture_and_SDK_Frame works_(iOS_4_Xcode_4)

[7] Hur man tolkar EXIF orienterings taggar i bilder

(20)

5 Bilagor

Bilaga 1

Program Start

Bonjour server

Init Start

Init och start

OpenGL

Vänta på

anlsutning

Ta emot

bild

Kontrollera

bild

Radera bild

Spara bild och

(21)

Bilaga 2

Ring start

Rotera ring

Konntrolera

om bild är

utom

synhåll

Konntrolera

om det finns

en ny bild

all läsa in

Läs in bild ny bild

och ersätt

Nej

Ja

Ja

Fler segment

kvar att rita ut?

(22)
(23)

Bilaga 4

Dags

att lägga

till ny

Scroll start

Lägg till bild

Rita ut bild från kö

Nästa bild i kö

Fler

bilder i kö

att rita

ut

Uppdatera postioner

för utritning av bild

Ta bort bild som

inte längre syns

Scroll Klar

Nej

Nej

Ja

(24)
(25)

References

Related documents

att man räknar tal inom parentes först, och sedan gånger och delat, och sist plus och minus.... Hur räknar man

Där en genom tvärvetenskapliga metoder skapar lust och engagemang genom att koppla samman olika ämnen så att till exempel elever som inte känner stor tjusning för bildämnet

Enligt Socialstyrelsens rapport (2012) beskrivs riskfaktorer för sammanbrott för barn som är tio år eller yngre, ofta beror på barnets biologiska nätverk samt ett för tätt

Under 2007 ökade Electrolux försäljning av vitvaror i Öst- europa med över 17 procent, vilket är cirka nio procent- enheter högre än för marknaden som helhet. Många

Kvinnorna förblir företagare för att de vill utveckla sina tjänster och produkter och skapa tillväxt medan 17 procent av kvinnorna ansåg att de är nöjda och inte har ambitionen

Jag kommer sedan att kontrastera det senaste albumet Det kommer aldrig va över för mig från 2013 mot det första för att se om jag kan utröna en

Energi frigörs energi när stora molekyler bryts ner till mindre delar. Energin frigörs som ATP

Idén till denna studie kom till mig för ett antal år sedan då jag fick se ett digital skapat verk och därmed bestämde jag mig för att digitalt bildskapande skulle bli ämnet