Professional Documents
Culture Documents
Demo Lab 1 - Adam Fleming - Apadmi
Demo Lab 1 - Adam Fleming - Apadmi
Demo Lab 1 - Adam Fleming - Apadmi
Adam Fleming
CTO
Apadmi
Apadmi Background
See www.apadmi.com
NPR Player Implementation
Content UI
Browsing
Stream Metadata
Control
Playback Status
Audio
Streaming
Network API Streaming
Engine
API
Network Audio
Stream Data
Content Provider
Cellular Data/WiFi
Speed
Wide range of actually achievable speeds
Differing degrade behaviour
Access
Operator networks, Private networks, Firewalls
Access Point Behaviour
Connection persistence
Authentication
Cost
System Provided API - Network
Socket RSocketServ
Server
RHttpSession RSocket
http://developer.symbian.org/wiki/index.php/Sockets_(Fundamentals_of_Symbian_C++)
http://developer.symbian.org/wiki/index.php/Symbian_OS_Communications_Programming/11._HTTP
Network – Connecting to an IAP
RSocketServ iSocketServ;
RConnection iConnection;
TUint32 iIap;
…
// Try to connect
iConnection.Start( connPref, iStatus );
Network – HTTP Connection
RHttpSession RHttpTransaction
MHTTPSessionEventCallback MHTTPTransactionCallback
Open RHttpSession
Request a transaction from the session
Set the properties, filters, headers and
body of the request
Submit the request
Receive callback through
MHTTPTransactionCallback::MHFRunL()
THTTPEvent contains state of transaction
A Streaming Media Application
Content UI
Browsing
Stream Metadata
Control
Playback Status
Audio
Streaming
Network API Streaming
Engine
API
Network Audio
Stream Data
Playback Mechanism Considerations
User-interface requirements
Media Playback
“trick modes”
Background Playback
Degradation Behaviour
class CNPRPlayList
{
…
const TPtrC8 URL(TInt aIndex) const;
…
}
A Streaming Media Application
Content UI
Browsing
Stream Metadata
Control
Playback Status
Audio
Streaming
Network API Streaming
Engine
API
Network Audio
Stream Data
Content Browsing API
Provided by NPR
HTTP Requests which return fixed-form
XML
Responses parsed and used to generate
HTML
Displayed in embedded browser control
Includes an API to allow user to specify
current location to retrieve local stories,
stations etc
Location - Classes
class Location Classes
RPositionServ er
CActiv e
Position Serv er
RPositioner CPositionGetter
TPosition
http://developer.symbian.org/wiki/index.php/Creating_Location-
Aware_Applications#Positioning_methods_supported_by_the_S60_platform
Location - Setup
#include <lbs.h>
#include <lbspositioninfo.h>
RPositionServer iLocationServer;
RPositioner iPositioner;
TPositionInfo iPositionInfo;
{
// open the server sessions
User::LeaveIfError(iLocationServer.Connect());
void CGpsPositionRetriever::RunL()
{
…
TInt error = iStatus.Int();
if (error == KErrNone)
{
TPosition pos;
iPositionInfo.GetPosition(pos);
iObserver.HandleGPSRetrievalL(pos);
}
}
A Streaming Media Application
Content UI
Browsing
Stream Metadata
Control
Playback Status
Audio
Streaming
Network API Streaming
Engine
API
Network Audio
Stream Data
Audio Streaming
MMF Application
MDF CMdaAudio*Stream
Hardware
Device Drivers Codec
Implementation
Audio Streaming - Classes
CMdaAudioOutputStream
MMdaAudioOutputStreamCallback
TMdaAudioDataSettings
Also
CMdaAudioInputStream
MMdaAudioInputStreamCallback
CMdaAudioOutputStream
class CMdaAudioOutputStream : public CBase,
public MMMFClientUtility
{
public:
IMPORT_C static CMdaAudioOutputStream* NewL(MMdaAudioOutputStreamCallback& aCallBack,
TInt aPriority,
MMF
Open()
Set Up Stream()
MaoscOpenCompl ete()
Wri te()
Wri teData()
MaoscBufferCopi ed()
Wri te()
Wri teData()
MaoscBufferCopi ed()
Stop()
Stop Pl ayback()
Done()
Content UI
Browsing
Stream Metadata
Control
Playback Status
Audio
Streaming
Network API Streaming
Engine
API
Network Audio
Stream Data
Audio Engine – Architecture
“Simple”
Lowest use of system resources
Prone to delays caused by system loading
Possible for UI to interfere with audio
playback
Architectural Description
Dual-threaded
More complex
Heavier loading on system
Less susceptible to delays due to system
loading
UI actions should not impact playback
performance
Requires mechanism for inter-thread
communication
Architectural Description
// Request Notification
iStreamMsgQueue->NotifyDataAvailable(iStatus);
SetActive();
User
Browse Stations()
Display Stations()
Select Station()
Select Station()
Startup()
Notify Startup()
Download Packet()
Browse News Stories()
Play Packet()
Download Story()
Read Story()
View Story()
Download Packet()
Advantages
Content UI
Browsing
Stream Metadata
Control
Playback Status
Audio
Streaming
Network API Streaming
Engine
API
Network Audio
Stream Data
Questions?