RI Training March-2012

Download Report

Transcript RI Training March-2012

OCAP RI Training
CableLabs Winter Conference
Philadelphia
March 15-16, 2012
Schedule
•
Thu Mar 15 – 8:30am to 4:30 pm
»
»
»
»
»
Project Overview and History - DaveH
Build system - Chris
Logging and debugging - ScottD
Software architecture overview - MarcinK
Profiling applications with the RI’s JVM – SteveA/ScottD
[lunch]
»
»
»
»
•
System Information – Prasanna/Craig
Service Selection and DVR subsystem - Craig
PC Platform – Marcin/SteveM/Neha
HN subsystem – Doug/Craig/Marcin/Lori
Fri Mar 16- 8:30am to 2:30
» Graphics - SteveA
» Testing – ScottA/Nicolas
» Issue reporting and handling - ScottA
[lunch]
» Stabilization/Robustness project – Marcin/Chris
» Miscellaneous topics - TBD
Project Overview and
History
March 15-16, 2012
Project started June 2008
• Core OCAP I16+ compliant
» Several ECNs short of 1.0.0 compliance
• DVR I03 extension
» Missing ECNs 897, 994, 1017
• Front Panel I02 extension
• Approx 200 bugs carried over from legacy code
base
• Vision Workbench/Clientsim SDK
• Closed code base
Current Status
• Feb 2012 (1.2.2 Bundle Release)
» Core OCAP 1.2.2
» DVR Extension I08
» Front Panel Extension I05
» Device Settings Extension I05
» Home Networking Extension I08
» Home Networking Protocol I07
• JVM
» Based on Sun open source PhoneME advanced MR2
• PC Platform
» Windows XP initially; now Windows & Linux (several versions)
• SDK
» Rel-6 released Nov 2011 – no further versions planned
• This is an open-source project
» http://java.net/projects/ocap-ri/
2012 Schedule
• 1.2.1 Bundle released on 01/12/12
• 1.2.2 Bundle (1.2.2 Rel-A RI) released on 02/24/12
» Included VPOP as primary feature
» Also MIBObject.getValue
» Completed implementation of ServiceResolutionHandler
» Completed implementation of DTCP/IP on PC platform
» Maintenance against 1.2.1 RI
• 1.2.2 Rel-B planned for 04/05/12
– No feature development
– Maintenance against 1.2.2 RI
– Fixes will be taken off the current trunk
– 1.2.2 will not be maintained as a separate branch
• 1.2.3 Bundle planned for 05/17/12
» HN features to align with CVP-2 compliance
» Maintenance against 1.2.2 RI
» Backlog items
• Add IPv6 and https support to the PC platform
• Stack housekeeping tasks
Other
• DTCP platform port for Windows and Linux
» MPEOS API changes were included with 1.2.1 RI
release
» RI Implementation now available for internal testing at
CableLabs
• Phasing out support from Windows XP to Windows7
» Some performance issues with GStreamer plugin on
Win7/newer Linux platforms are being investigated
• SDK Rel-6 released on 11/17/11
» No current plans for a future release
• Upgrade of our DirectFB library we use (low priority)
• Port RI to the MAC (very low priority)
Project site walk through
•
•
•
•
•
•
•
•
Main Project Page
Bug Databases
Forums
Wikis
Contribution Process
Bug fix cutoffs
Release notes
Coding standards
Why an RI?
OCAP Specifications
Stubs & DTDs
Release
Bundle
OCAP
Reference
Implementation
Test
OCAP
Tests (CTP)
OCAP Release Bundle
• Components of a bundle are
» Specs
» Stubs
» DTDs
» RI implementation, including integration tests
» CTP conformance tests
OCAP RI Requirements
•
•
•
•
•
•
•
•
RI runs on a PC
» Windows initially – now Linux
RI and PC IDE must be available on open-source terms
RI and PC IDE must only include components with licenses compatible with
the ODL dual-license plans
» Components available only under GPL are not OK
» Licenses for all third-party RI components must be reviewed by both
CableLabs and the ODL legal teams
RI works with existing CableLabs ATE/CTP tests
RI adheres to current and future OCAP core specs
RI adheres to current and future OCAP extensions specs
To ensure backwards compatibility of the spec,MSO guides must run on the RI
To ensure backwards compatibility of stack ports of the RI, any changes to the
MPEOS porting layer must be approved by the RI steering committee
Licensing Models
• GPL License on java.net
» CableLabs OpenCable Project
– OCAP Stack, PC Platform, Head-end Emulator
» Sun PhoneME Project - JVM
• Commercial License
» CableLabs Commercial License
–
–
–
–
Also free
Stack, platform and emulator
RAND IPR commitment
Bug fixes in stack contributed back
» Sun or other JVM vendor
– Commercial CDC/PBP 1.1 JVMPhoneME JVM
OCAP RI Branching Strategy
•
Three principal branches
» Mainline/Development Branch
– Code implemented by internal RI Dev Team
– Code from open source contributors that are vetted by RI Tech Leads
– Other working branches get merged back to Mainline periodically
» Branded Branch (eg, “1.1.4”)
– Fixes and enhancements that are tied to the spec and which have been
verified by the CTP
– Branded branch is maintained separately from mainline
– Changes from branded branch eventually migrate back to mainline
development
– One branded branch per spec release
» Experimental Branch
– Open source contributors have write access to this directory
– No other restrictions
– Merging to Mainline on a case-by-case basis
Bug Tracking
• Two Bug Tracking Databases
» Internal (private) JIRA db (OCORI) at CableLabs,
tied to CableLabs CTP bug db
» External (public) JIRA db on java.net (IT); hides
details of CTP-related issues
RI Build System
March 15-16, 2012
Building the RI – The Easy Way
See https://community.cablelabs.com/wiki/display/OCORI/Quick+Start for
detailed instructions.
• Setup development environment
» Cygwin + JDK + Ant for Windows
» A little more required for Linux (see Wiki)
• Get checkout_dev_env.sh (from svn)
• Use checkout_dev_env.sh to get source, create setEnv
file
• Execute ant in appropriate directory.
» Builds Platform and Stack.
• See Wiki for detailed instructions.
Build System – Environment Variables
• Easy to work in several different RI code bases at the
same time.
• OCAPROOT
» The absolute path to the OCAP-1.0 directory.
» Required for compilation/execution
» Example: E:/Cablelabs/svn/OCAPRI/trunk/ri/RI_Stack
• OCAPHOST
» Defines the host build environment
» Build system reads host environment configuration files
from ($OCAPROOT/hostconfig/$OCAPHOST)
» Required for compilation only
» Example: Win32-Cygwin
Build System – Environment Variables
• OCAPTC
» The Target Configuration for the build. Basically the port
you are working on.
» Defines a subdirectory hierarchy where:
– build configuration files are found
($OCAPROOT/target/$OCAPTC)
– binary intermediate products are built
$(OCAPROOT/gen/$OCAPTC)
– final binary products are installed and runtime configuration
files are kept ($OCAPROOT/bin/$OCAPTC)
» Suggested format is:
– <org>/<platform>/<os>/[debug|release]
– Example: CableLabs/simulator/Win32/debug
» Required for compilation/execution
Build tools
• Make
» Compiles JNI, MPE, MPEOS, and thirdparty
native libraries
• Ant
» Coordinates the entire build system
» Wiki contains a list of top-level build targets
• JDK (1.4 or higher)
» Used to compile stack and test application
sources
Win32 Port
• Host environment is Cygwin
» See Wiki for a full list of Cygwin libraries required to build
the RI Stack and Platform
• Cross-compile to MinGW (no Cygwin DLL)
• Lots of work (including JVM patches) to deal with POSIX
vs. Win32-style paths
» POSIX for gcc
» Win32 for javac, javah, etc..
• VERY SLOW (compared to Linux)
» JVM binaries pre-built and checked-in to save compilation
time since most won’t be modifying the JVM
• WindowsXP, Vista
Linux Port
• Known working distros/versions:
» Fedora 10/12/13/15
» Ubuntu 10.04/10.10/11.04
» Ubuntu 11.04
• Much faster than Win32 on the same hardware.
• See Wiki for detailed instructions.
Logging and Debugging
March 15-16, 2012
Stack logging
• log4j APIs included in the spec for use by
applications
• Additional Logger methods avoid String
concatenation overhead in most cases
• Monitor applications configure logging through
DOMConfigurator or PropertyConfigurator
• Groups
• Multiple loggers can share a common
group name, which can be used during
configuration
Stack logging continued
• New appenders
• MIB Appender
• AsyncAppender uses an additional thread and
a queue to offload writing to the target
appender off of the caller thread
• New configuration capabilities
• Configure at the ‘group’ level or the logger
level
• Filter support, including ExpressionFilter
(ability to use regular expressions for finegrained control over logging verbosity)
Stack logging continued
• Additional information available from the Wiki
• https://community.cablelabs.com/wiki/display/
OCORI/Configuring+Java+stack+logging
Platform logging
• Platform code uses log4c to manage logging
• Configuration found in
$PLATFORMROOT/log4crc
• Additional information available from the Wiki
• https://community.cablelabs.com/wiki/display/
OCORI/RI+PC+Platform+Logging
Logging and IssueTracker
When attaching a log to IssueTracker
• Ensure the log contains timestamps
• Helpful if Java debug logging is enabled
Chainsaw screenshot
Java Stack debugging
• Possible to step through breakpoints in Java
stack code, generate stack traces and thread
dumps
• Stack trace, thread dumps available via jdb
(included with the Sun JDK)
• To enable Java debugging, un-comment
VMOPT19 & 20 in mpeenv.ini and start
debugger or jdb
• Re-comment VMOPT 19 & 20 when done..
Platform debugging
• gdb can be used to generate a trace if the
Platform terminates unexpectedly
• ./runRI.sh -gdb
RI Software Architecture
March 15-16, 2012
Host Operating System
Windows and Linux APIs
Platform Support Libraries
RI Platform Support Libraries
SNMP
GLib
PThreads
GStreamer
XML2
Int’l
Gst-Plugins-Base
Log4c
ZLib
Gst-Plugins-Good
FFMPEG
Windows and Linux APIs
wxWidgets
Platform Implementation
RI Platform Implementation
Tuner Control
GStreamer Plugins
User Interface
RI Platform Support Libraries
SNMP
GLib
PThreads
GStreamer
XML2
Int’l
Gst-Plugins-Base
Log4c
ZLib
Gst-Plugins-Good
FFMPEG
Windows and Linux APIs
wxWidgets
Platform API
RI Platform API
RI Platform Implementation
Tuner Control
User Interface
GStreamer Plugins
RI Platform Support Libraries
SNMP
GLib
PThreads
GStreamer
XML2
Int’l
Gst-Plugins-Base
Log4c
ZLib
Gst-Plugins-Good
FFMPEG
Windows and Linux APIs
wxWidgets
Platform Summary
• Full software emulation of STB media decoding
and presentation hardware.
• Majority of the code is 3rd party support libraries.
• Leverages existing frameworks:
» GLib – utility library.
» Gstreamer / HDHomerun / VLC– tuner control.
» GStreamer – media decoding and presentation.
» wxWidgets – user interface.
» Net-SNMP – Master Agent.
• No OS abstraction APIs.
OCAP Porting API
MPEOS API
OS APIs
Presentation APIs
Decoding APIs
DLL, Debug, Event, File, Memory, Socket,
Storage, Sync, Thread, Time, Util
Display, FP, Graphics, UI Events
Closed Captioning, DVR, Filter,
Media, POD, Sound, VBI
MPEOS Implementation
RI Platform API
FT2
Direct
FB
OCAP Native Library
MPE Library
File System Management
DSM-CC
SI Database &
Parsing
MPEOS API
OS APIs
Presentation APIs
Decoding APIs
DLL, Debug, Event, File, Memory, Socket,
Storage, Sync, Thread, Time, Util
Display, FP, Graphics, UI Events
Closed Captioning, DVR, Filter,
Media, POD, Sound, VBI
MPEOS Implementation
RI Platform API
FT2
Direct
FB
OCAP JVM
phoneME
JVM
PBP 1.1
VM
MPE Library
File System Management
DSM-CC
SI Database &
Parsing
MPEOS API
OS APIs
Presentation APIs
Decoding APIs
DLL, Debug, Event, File, Memory, Socket,
Storage, Sync, Thread, Time, Util
Display, FP, Graphics, UI Events
Closed Captioning, DVR, Filter,
Media, POD, Sound, VBI
MPEOS Implementation
RI Platform API
FT2
Direct
FB
VM
Core Implementation
NanoXML
Log4J
SNMP
Record
...
TSB
OCAP Java Managers
Host
Service
EAS
PBP 1.1
Auth
phoneME
JVM
App
OCAP Java Implementation
JUnit
MPE Library
File System Management
DSM-CC
SI Database &
Parsing
MPEOS API
OS APIs
Presentation APIs
Decoding APIs
DLL, Debug, Event, File, Memory, Socket,
Storage, Sync, Thread, Time, Util
Display, FP, Graphics, UI Events
Closed Captioning, DVR, Filter,
Media, POD, Sound, VBI
MPEOS Implementation
RI Platform API
FT2
Direct
FB
OCAP API
VM
Core Implementation
NanoXML
Log4J
SNMP
Record
...
TSB
OCAP Java Managers
Host
Service
EAS
PBP 1.1
Auth
phoneME
JVM
App
OCAP API
JUnit
MPE Library
File System Management
DSM-CC
SI Database &
Parsing
MPEOS API
OS APIs
Presentation APIs
Decoding APIs
DLL, Debug, Event, File, Memory, Socket,
Storage, Sync, Thread, Time, Util
Display, FP, Graphics, UI Events
Closed Captioning, DVR, Filter,
Media, POD, Sound, VBI
MPEOS Implementation
RI Platform API
FT2
Direct
FB
OCAP Summary
• Ported to Platform APIs for STB/video-related
functionality.
• OS functionality MPEOS port maintained
together with the stack code.
• MPE contains platform-independent / portable C
code.
• Integrates Advanced phoneME JVM.
• OCAP Functionality implemented via pluggable
Java Manager implementations.
Profiling applications with
the RI’s JVM
March 15-16, 2012
phoneME JVM
• RI uses the open source (GPL2) phoneME Advanced JVM from
Sun/Oracle
» Closely based on J2SE 1.4
» Adding JSSE (secure sockets) support in an upcoming release
• OCAP requires a JVM compliant with the latest maintenance
releases of:
» Personal Basis Profile 1.1
» Foundation Profile 1.1
» Connected Device Configuration 1.1
• Last update: October 24, 2009
• Patch common source to fix bugs and build problems
» Win32/Cygwin/Make filesystem issues
» JDWP (VM debugging) thread sync issues
» PNG bug
» GIF bug?
JVM Build
• All JVM-related files located in
$OCAPROOT/jvm
• Build disabled by default for RI Win32 – pre-built
binaries checked in to SVN
» Enable/Disable building the VM with “build.jvm.exclude”
entry in
$OCAPROOT/target/$OCAPTC/buildrules.properties
ocap_vmlib
• Interfaces and classes to assist in integrating a
VM with the RI Stack
• Includes a full AWT implementation ported to
MPE graphics APIs (DirectFB)
• Documentation
» $OCAPROOT/docs/JVMPortingGuide.doc
Profiling and analysis tools
•
•
•
•
•
There are a number of tools available for
investigating issues in the Java stack code
NetBeans Profiler
CVM Inspector
HPROF
jdb
Profiling with NetBeans 6.8
•
•
•
•
•
JVMTI-based
Supports profiling of CPU, Memory and high level
JVM stats (GC, thread activity)
Used to identify CPU and memory hot spots
Does not support creation or comparison of heap
dumps
https://community.cablelabs.com/wiki/display/OCO
RI/Profiling+the+RI%27s+JVM+using+NetBeans+6.
8
CVM Inspector
•
•
•
•
•
Set of utility functions and a shell script which can
assist in inspecting the state of the JVM
Available by setting a flag in the JVM build
Used to generate and compare heap dumps
Runs in either client-server mode (standard JVM
client connects via a socket to the RI) or standalone
mode (GDB)
https://community.cablelabs.com/wiki/display/OCO
RI/Generating+heap+dumps+on+the+RI%27s+JVM
+using+CVM+Inspector
HPROF
•
•
•
A command-line profiling tool
Used to generate detailed monitor statistics
https://community.cablelabs.com/wiki/display/OCO
RI/Generating+thread+monitor+stats+on+the+RI%2
7s+JVM+using+hprof
JDB
•
•
•
The Java debugger command line interface
Used to generate lock and thread stack information
https://community.cablelabs.com/wiki/display/OCO
RI/Generating+Java+thread+dumps+and+monitor+i
nformation
Service Information (SI)
March 15-16, 2012
OCAP SI
• OCAP SI access API
» Provides information about available services in an
interactive broadcast environment
• OCAP uses SCTE-65 SI model (standard for SI
delivered out-of-band for Cable networks)
• SI tables are acquired from out-of-band channel
(ex: legacy OOB/DAVIC or DSG broadcast tunnel)
• Incorporates JavaTV SI API
• When CableCARD is present, all applications
(service bound/unbound), have access to SI
delivered on the OOB channel.
SI profiles
• SCTE-65 defines 6 profiles for OOB SI
• RI stack supports Profiles 1-3
• Includes tables: NIT-CDS, NIT-MMS, SVCT-DCM,
SVCT-VCM, NTT-SNS and STT (optional)
SI Profile
Tables
1 - Baseline
SVCT, NIT, NTT
2 – Revision Detection
Versioning enabled for NIT, NTT, SVCT
3 – Parental Advisory
Profile 2 plus RRT
4 – Standard EPG Data
Profile 3 plus AEIT, AETT
5 - Combination
LVCT, MGT. Backward compatible (1-4)
6 – PSIP only
LVCT, AEIT, Optional AETT
Stack Components
OCAP SI
• Incorporates following Java TV SI packages
» javax.tv.locator
» javax.tv.service.transport.Transport
» javax.tv.service.transport.Network
» javax.tv.service.transport.TransportStream
» javax.tv.service.transport.ServiceDetails
OCAP PSI
• Incorporates following packages
» javax.tv.service.navigation.ServiceComponent
» org.ocap.si.ProgramAssociationTable
» org.ocap.si.ProgramMapTable
• Supports Object Carousel
» Carousel ID resolution
» Deferred association tag resolution
» NSAP resolution
Java SIDatabase/SICache
• Access to native SIDB via Java SIDatabase
• SI data/events processed and dispatched to
registered listeners
• Most recent SI is cached in the SICache to avoid
trips across JNI layer to MPE SI Database
• SICache is flushed periodically (flush interval
configurable)
• Discrete SI request types to access various SI
objects
• SI requests asynchronously satisfied or timeout
(timeout value configurable) after time elapses
MPE SI
• When does it start?
» Gated by POD_READY indication
» Event-driven acquisition and parsing of OOB
table sections via MPEOS section filtering API
» Dedicated thread for OOB SI
» At start-up sets filters for all five table types NITCDS, NIT-MMS, SVCT-DCM, SVCT-VCM, NTTSNS
» Individual table timeout values configured via
mpeenv.ini
» SIDB populated in MPE layer
SITP SI State diagram
start
NIT/SVCT/NTT
Received
OOB SI
Acquiring
timeout
SI Not Available
Yet
NIT/SVCT/NTT
Received
SI DISABLED
All OOB tables
received
All OOB tables
received
SI Fully
Acquired
SI Updates
SI NOT
AVAILABLE
MPE SI (contd.)
• Profile-1 SI and CRC processing
» Section count unknown. MPE SI engine employs
a heuristic based on unique section CRC values
and CRC match count for deterministic...
» Section CRC match counts are configurable for
individual tables via mpeenv.ini
» Table acquisition timeout values also aid in faster
acquisition
» SVCT DCM scoreboard used to accelerate VCM
acquisition
» On slower networks with infrequent section repeat
cycle SI acquisition can be problematic
MPE SI (contd.)
• Profile-2 and above rely on the Revision
Detection Descriptor (RDD) for table section
count
MPE SI Cache
• Enable/Disable by mpeenv.ini configuration
(Disabled in RI by default)
• Speeds up stack start-up on slower networks by
using cached SI
• SI data is written to persistent memory
• SI data read from file at start-up if cache is
enabled
• Normal OOB SI acquisition also continues
• Updates to SI are reflected in the cache
• For testing only (Not intended for deployment)
MPE PSI Subsystem
• PSI: PAT & PMT acquisition using the MPE Section
Filter subsystem
• Manages PAT/PMT acquisition and parsing from OOB
(DAVIC/DSG Broadcast), DSG application tunnels,
tuners, and HN streams
MPE PSI Subsystem
• SITP uses 6 different filter classes on each transport stream:
• Initial PAT
• Initial selected PMT
• Initial secondary PMT(s)
• Revision PAT
• Revision selected PMT
• Revision secondary PMT(s)
• Fixed resources (local tuners & legacy out-of-band) are assigned
filter groups at startup according to mode
• Dynamic resources (DSG app tunnels, HN streams, remote tuners)
are assigned filter groups when the session is started
• SITP acquisition logic then works in terms of classes and filter
priorities without concern for class-to-group associations
MPE PSI
• State machine:
P
A
Tm
a
tc
h
e
d
A
2
+
A
3
P
A
Tm
a
tc
h
e
d
A
3
T
U
N
E
_
S
Y
N
C
A
1
ID
L
E
P
A
Tm
a
tc
h
e
d
A
2
+
A
3
W
a
itIn
itia
l
P
A
T
T
U
N
E
_
U
N
S
Y
N
C
A
2
tim
e
o
u
t
A
8
W
a
itIn
itia
l
W
a
itIn
itia
l prim
a
ryP
M
T
S
e
c
o
n
d
a
ry
a
tc
h
e
d
p
rim
a
ryP
M
T m
A
4
+
A
5
P
M
T
T
U
N
E
_
U
N
S
Y
N
C
A
2
tim
e
o
u
t
A
9
T
U
N
E
_
U
N
S
Y
N
C
A
2
a
lls
e
c
o
n
d
a
ry
P
M
T
sm
a
tc
h
e
d
A
4
+
A
6
P
A
Tm
a
tc
h
e
d
A
2
+
A
3
W
a
itR
e
v
is
io
n
tim
e
o
u
t
A
9
P
M
Tm
a
tc
h
e
d
A
4
+
A
7
T
U
N
E
_
U
N
S
Y
N
C
A
2
A
c
tio
nT
a
b
le
A
1
:S
e
tP
A
Tp
o
s
itiv
efilte
r(w
ithtim
e
o
u
t)
A
2
:C
a
n
c
e
la
llfilte
rs
A
3
:P
a
rs
eP
A
T
S
e
tP
A
Tn
e
g
a
tiv
efilte
r
S
e
tp
rim
a
ryP
M
Tfilte
r(w
ithtim
e
o
u
t)
S
e
ts
e
c
o
n
d
a
ryP
M
Tp
o
s
itiv
efilte
rs
A
4
:P
a
rs
eP
M
T
A
5
:S
e
tp
rim
a
ryP
M
Tre
v
is
io
nfilte
r
A
6
:S
e
ts
e
c
o
n
d
a
ryP
M
Tp
o
s
itiv
efilte
r
A
7
:S
e
ts
e
c
o
n
d
a
ryP
M
Tn
e
g
a
tiv
efilte
r
A
8
:S
e
tP
A
Tp
o
s
itiv
efilte
r(n
otim
e
o
u
t)
A
9
:S
e
tP
M
Tp
o
s
itiv
efilte
r(n
otim
e
o
u
t)
MPE PSI Subsystem
• Has 6 defined acquisition modes for tuner-based
section acquisition, to tailor section filter resource usage
to the platform’s filtering capabilities.
• Mode 1: Legacy single-filter sharing
• Mode 2: Dedicated filter per tuner
• Mode 3: Dedicated 2 filters per tuner without secondary
acquisition
• Mode 4: Dedicated per-filter tuner for PAT and selected PMT
with “wandering” PSI pre-fetch filter
• Mode 5: Mode 3 +1 filter that picks up all secondary PMTs
across all tuners
• Mode 6: No filter sharing (every section request uses its own
filter)
SIDB
• MPE SIDB contains following (SI/PSI) objects
» Transports
» Networks
» Transport Streams
» Services
» Programs
» Elementary Streams
• Provides API to access the various SI objects
SIDB API
• Lock/unlock SI DB for read/write access
• Access provided using opaque SI handles
• Service resolution methods
»
»
»
»
mpe_siGetServiceHandleBySourceId()
mpe_siGetServiceHandleByFPQ()
mpe_siGetServiceHandleByServiceName()
Etc.
• SI enumeration methods
»
»
»
»
mpe_siGetAllNetworks()
mpe_siGetAllServicesForTransportStream()
mpe_siGetServiceComponentsForServiceHandle()
Etc.
SIDB API (contd.)
• Object Carousel support methods
» Look-up PID given CarouselID/Component Tag
» Find Program Number given Deferred Association
Tag
• CA support methods
» Enumerate CA descriptors
» Lookup ECM PID
System Time
• RI parses out-of-band System Time Table (STT)
to extract system time in UTC
• STT section filtering and parsing done on a
dedicated thread in MPE SITP layer
• Can be disabled for platforms which directly
process STT or use alternate mechanism
• Maintains a difference between system time and
network time
• Employs a smoothing algorithm to avoid jumps
Service Selection
& DVR Subsystem
March 15-16, 2012
ServiceContext
• JavaTV ServiceContext is the primary entity for
Service presentation/selection
• AV Services can be:
» “Broadcast” Service. Service object retrieved from
SIManager or OCAPLocator representing a
frequency/program/modulation.
» RecordedService. A recording accessed via a
RecordingRequest.
» RemoteService. A Service representing an HNstreamable ContentItem retrieved from the
ContentServerNetModule
ServiceContext
• The RI’s ServiceContext implementation utilizes delegates
for each type of Service that can be presented:
» BroadcastServiceContextDelegate: Used for presenting
Broadcast Services when the DVR extension is not present
» RecordedServiceContextDelegate: Used for presenting
RecordedService (DVR-only)
» RemoteServiceContextDelegate: Used for presenting
RemoteServices (HN-only)
» DVRBroadcastServiceContextDelegate: Used for presenting
Broadcast Services when the DVR extension is present. Supports
the TimeShiftProperties interface which allows the app to
enable/disable timeshift and specify timeshift duration.
» AbstractServiceContextDelegate: Used for selecting
AbstractServices – Services which represent unbound xlets
ServiceContext
• Class relationship:
ServiceContext
• OCAP requires that the ServiceContext provide a JMF Player to the
application for media control
• On the RI, the Player and the Player-associated Controls provide
rendering control, but actual rendering is done by the platform.
• The ServiceContextDelegate acquires tuner/TSB resources and the
RI’s Player infrastructure manages everything else, including:
» MediaAccessAuthorization (parental control, etc)
» Conditional Access
» PSI/ServiceComponent retrieval
» NetworkInterface/component validation
» CCI enforcement
» TSB/Segmented Time-shift attachment (for
DVRBroadcastServiceContextDelegate)
» SegmentedRecordedService navigation (for
RecordedServiceContextDelegate)
ServiceContext
• Resources required for presentation:
Resource
AppsDatabase
Video device
NetworkInterface
MediaAccessHandler
RecordingManager
MediaStorageVolume
UPNP/DLNA framework
Abstract service
Yes
No
No
No
No
No
No
Broadcast service
Yes
Yes
Yes*
Yes
No
No
No
Recorded service
No
Yes
Yes**
Yes**
Yes
Yes
No
Remote service
No
Yes
No
No
No
No
Yes
* Non-DVR ServiceContextDelegate manages a NetworkInterface directly, DVR broadcast
ServiceContextDelegate uses a NetworkInterface indirectly (via TimeShiftWindowClient)
** If presenting an ongoing recording and switching to the 'live point'
ServiceContext Basics
• Delegate/Player relationship:
ServiceContext
• Basic Broadcast Service “live” playback example:
T
ransport streamsectionfilteringsession
(s)
m
pe_m
ediaT
une(freq1,m
od1)
m
pe_filterS
etF
ilter()
S
ectionfilteringfor
P
A
T
/P
M
Tinitiatedby
M
P
ES
IM
anager
M
P
E
_S
F
_E
V
E
N
T
_S
E
C
T
IO
N
_F
O
U
N
D
P
A
T
/P
M
Tfound
D
V
B
S
erviceC
ontext.select()
calledforS
ervices1
m
p
e
_
dvn
rT
sbC
onvertS
tart()
D
ecodes
e
s
s
io
T
unecom
pletes
m
pe_m
ediaD
ecode()
M
P
E
_T
U
N
E
_S
Y
N
C
t1 t2 t3 t4 t5
m
pe_m
ediaS
top()
JM
FB
roadcast P
layerstarted
.
D
ecodeinitiatedw
ithLocator-specified
com
ponents/P
ID
sfromP
M
T
JM
Fplayerstopped
t6
ServiceContext
• Basic Broadcast Service time-shift playback example:
T
r
a
n
s
p
o
r
ts
tr
e
a
m
s
e
c
tio
n
filte
r
in
g
s
e
s
s
io
n
(
s
)
m
p
e
_
m
e
d
ia
T
u
n
e
(
fr
e
q
1
,m
o
d
1
)
T
S
B
fillin
g
s
tillb
e
lo
w
c
a
p
a
c
ity
m
p
e
_
filte
r
S
e
tF
ilte
r
(
)
M
P
E
_
S
F
_
E
V
E
N
T
_
S
E
C
T
IO
N
_
F
O
U
N
D
tim
e
s
h
ifte
d
s
1
c
o
n
te
n
t
m
p
e
_
d
v
r
T
s
b
B
u
ffe
r
in
g
S
ta
r
t(
)
D
V
B
S
e
r
v
ic
e
C
o
n
te
x
t
.s
e
le
c
t(
)
c
a
lle
d
fo
rS
e
r
v
ic
e
s
1
D
e
c
o
d
e
S
e
s
s
io
n
1
m
p
e
_
m
e
d
ia
D
e
c
o
d
e
(
)
T
im
e
s
h
iftP
la
y
b
a
c
k
S
e
s
s
io
n
1
m
p
e
_
m
e
d
ia
S
to
p
(
) m
p
e
_
d
v
r
T
s
b
P
la
y
S
ta
r
t(
)
J
M
F
T
S
B
P
la
y
e
rs
ta
r
te
d
.
In
itia
liz
e
s
in
liv
e
m
o
d
e
.
T
u
n
e
c
o
m
p
le
te
s
M
P
E
_
T
U
N
E
_
S
Y
N
C
t1t2 t3 t4 t5t6
D
e
c
o
d
e
S
e
s
s
io
n
2
m
p
e
_
d
v
r
P
la
y
B
a
c
k
S
to
p
(
)m
p
e
_
m
e
d
ia
D
e
c
o
d
e
(
)
J
M
F
T
S
B
P
la
y
e
rs
w
itc
h
e
s
to
tim
e
s
h
iftp
la
y
b
a
c
k
U
s
e
r
in
itia
te
d
r
e
w
in
d
v
ia
P
la
y
e
r
.s
e
tR
a
te
(
2
)
.
J
M
F
T
S
B
P
la
y
e
rs
w
itc
h
e
s
to
liv
e
p
la
y
b
a
c
k
U
s
e
r
in
itia
te
d
ju
m
p
to
liv
e
v
ia
P
la
y
e
r
.s
e
tM
e
d
ia
T
im
e
(
P
O
S
IT
IV
E
_
IN
F
IN
IT
Y
)
t7
T
S
B
w
r
a
p
p
in
g
s
ta
r
ts
(
o
n
th
is
p
la
tfo
r
m
)
t8
ServiceContext
SC State
machine:
DVR TimeShiftManager
TimeShiftManager Basics
• Internal Manager only (not exposed to OCAP Applications)
• Provides both tuning and TSB management for multiple parts of the
DVR-enabled RI stack
• ServiceContext implementation uses TSM to:
•
•
•
•
Tune
Enable Service buffering (via TimeShiftProperties)
Discover already-tuned/buffering Services (and NetworkInterfaces)
Acquire/enumerate TimeShiftBuffers (TSBs) for playback.
• RecordingManager uses TSM to:
• Tune
• Enable Service Buffering (via BufferingRequests)
• Discover already-tuned/buffering/buffered Services (and
NetworkInterfaces)
• Convert previously-buffered and currently-buffering TSBs into
RecordedServices
TimeShiftManager Basics
• HN TSBChannelStream uses TSM to:
•
•
•
•
Tune (ChannelContentItem Tuning Locator)
Discover already-tuned/buffering Services
Initiate buffering
Acquire/enumerate TSBs for streaming
TimeShiftManager
g,
istin
from
r ex esent
r
ove
disc ering, p
buff
ate
initi
T
im
e-shift R
esources
/ tim
e-shiftedcontent forserviceS
H
Nstream
inginitiatedfor
C
hannelC
ontentItem
associatedw
ithserviceS
initi disco
at e
v
buff er exis
erin
t
g, s ing,
trea
m fr
om
B
ufferingR
equest
forserviceS
initiate buffe
ring
R
ecording
of serviceS
fering,
f
u
b
e
t
ia
it
n
i
isting,
discover ex
ording
c
e
r
to
t
r
e
v
con
S
erviceC
ontext
presentingserviceSw
ith
D
V
Rextensionenabled
TimeShiftManager Responsibilities
• Base Service acquisition mechanism for DVR-enabled RI stack.
• Manages the pool of MPE time-shift buffers (the number of TSBs
and their size)
• Embodies the knowledge of how Network Interfaces are shared and
creates SharedResourceUsages
• Represents the use of the NI in ResourceContention and manages
the coordinated shutdown of NI-based operations when/if the NI is
lost or necessary components are lost, including:
• Transport stream synchronization
• Service component availability
• Conditional Access (CA)
• Switch digital video transitions
• Manages the TimeBases for all TSBs to allow for:
• Proper navigation of TSBs by JMF
• Discovery of TSB/TSBs for retroactive recording (conversion of
already-buffered content into RecordedService(s))
TimeShiftManager Internals
<<interface>>
TimeShiftManager
implements
<<interface>>
TimeShiftWindowClient
TimeShiftManagerImpl
1
1
1
1
ManagerManager
1
implements
n
TimeShiftWindowClientImpl
n
TimeShiftWindow
1
n
TimeShiftBuffer
NetworkInterfaceController
TimeShiftManager Internals
Static/Sequence
Diagrams
DVR RecordingManager
RecordingManager Basics
•
•
•
•
Defined as part of OCAP DVR I08 and DVB GEM
DVR
org.ocap.shared.dvr.RecordingManager is defined
by DVB GEM – meaning its interface is used by
specifications other than OCAP
org.ocap.dvr.OCAPRecordingManager extends the
GEM RecordingManager – adding OCAP-defined
functionality
Has to work with/enable HomeNetworking
extension when present
RecordingManager Responsibilities
• RecordingManager-provided functionality:
• Is responsible for starting and stopping
RecordingRequests at particular times and managing
conditions which can interrupt/resume recordings (so
RecordingManager is always running)
• Manages and attempts to honor BufferingRequests
• Manages RecordedServices (“Recordings”)
• Persistently saves RecordingRequests and associated
application-supplied metadata (so RRs survive reboots)
• Manages the space allocation/prioritization for
RecordingRequests
• Provides warnings when NetworkInterfaces are about to
be utilized for RecordingRequests (RecordingAlertListers)
RecordingManager API
RecordingManager API
Diagrams
RecordingManager Implementation
• RecordingManager Class Diagram
RecordingRequest
RecordedService
OcapRecordingRequest
ParentRecordingRequest
<<implements>>
Segmented
RecordedService
RecordingRequestImpl
<<implements>>
<<implements>>
<<implements>>
0..n
RecordedServiceImpl
RecordingImpl
ParentNodeImpl
0..1
1..n
1
<<implements>>
Segmented
RecordedServiceImpl
0..1
RecordingInfo2
0..n
1
RecordedSegmentInfo
1
RecordingInfoTree
0..n
RecordingInfo Metadata
PersistentData
1..n
RecordingInfoNode
RecordingInfoTree
RecordingInfo
RecordingInfo2 (old)
RecordingInfo2
0..n
Tree
Each of these forms represents
a discreet persistent file type
Leaf
0..n
SegmentedLeaf (old)
RecordedSegmentInfo
1..n
RecordedService
ComponentInfo
SegmentedLeaf
RecordedSegmentInfo
1
TimeTable
1..n
TimeBased
DetailsInfo
1..n
RecordedService
ComponentInfo
RecordingRequest States
The “blue sky” path for a (Leaf) RecordingRequest
takes it through these states:
PENDING_NO_CONFLICT: Recording is ready to
record and there is no contention for tuners with
any other RecordingRequest
IN_PROGRESS: Recording is on-going (tuner is
tuned and data is being written to disk)
COMPLETE: Recording has completed and
content is present in its entirety
DELETED: Recording has been deleted
(RecordedService.delete() has been called)
RecordingImpl states
• Many things may not go as planned during the recording
process which put the RR into
IN_PROGRESS_WITH_ERROR:
• The RecordingRequest may not acquire an NI (tuner)
at the time it’s supposed to start
• The NI may be lost after the RR has started
• Sync may be lost on the NI
• PSI (PAT/PMT) may not be acquired or lost
• Conditional Access may be denied
• RemovableStorageVolume is disconnected
• MediaStorageVolume (disk) becomes full
• Service may be re-mapped via SPI (SDV)
Any of these conditions may remedy themselves
RecordingRequest States
Completely
Resolved
Cancelled
Partially
Resolved
Unresolved
Failed
Record ()
In Progress
Complete
Pending
Without
Conflict
In Progress
Insufficient
Space
Incomplete
Cancelled
Legend
Pending With
Conflict
Parent
States
Failed
Leaf States
In Progress
With Error
Test
RecordingImpl States
• Each RecordingImpl has an external state and
an internal state (IState)
R
e
c
o
r
d
i
n
g
I
m
p
l
.
I
S
t
a
t
e
I
S
t
a
t
e
I
n
i
t
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
T
u
n
e
F
a
i
l
e
d
I
S
t
a
t
e
P
e
n
d
i
n
g
I
S
t
a
t
e
W
a
i
t
T
u
n
e
S
u
c
c
e
s
s
I
S
t
a
t
e
S
t
a
r
t
e
d
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
T
u
n
e
r
U
n
a
v
a
i
l
a
b
l
e
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
B
u
f
f
e
r
i
n
g
D
i
s
a
b
l
e
d
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
M
S
V
U
n
a
v
a
i
l
a
b
l
e
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
C
a
D
e
n
i
e
d
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
T
u
n
e
r
N
o
t
R
e
a
d
y
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
S
e
r
v
i
c
e
U
n
a
v
a
i
l
a
b
l
e
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
S
e
r
v
i
c
e
R
e
m
a
p
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
T
S
W
B
u
f
S
h
u
t
d
o
w
n
I
S
t
a
t
e
E
n
d
e
d
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
C
o
p
y
P
r
o
t
e
c
t
e
d
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
I
n
s
u
f
f
i
c
i
e
n
t
S
p
a
c
e
I
S
t
a
t
e
S
u
s
p
e
n
d
e
d
M
S
V
U
n
a
v
a
i
l
a
b
l
e
Recording Process 1
OCAP ODL Stack Scheduled Recording Scenario 1
time-shifted
s1 content
free space
OcapRecordingManager.
record(OcapRecordingRequest orr1)
for s1, startTime 7:00, dur 60m
RecordingManager initiates
TimeShiftWindow attach - causing
a tune and timeshift TSB1 start
mpe_dvrTsbBufferingStop()
TSB content
earmarked/copied
from TSB1 for RS1
mpe_dvrTsbBufferingStart()
RecordedService
1
RecordingManager initiates
time-shift-to-recording conversion
mpe_dvrTsbConvertStart()
Soon after 8:00, TimeShiftManager
stops buffering into TSB1 and
releases the associated tuner
mpe_dvrTsbConvertStop()
07:00
08:00
t2
t3
+
t1
t4
More RM Detailed Diagrams
More detailed recording
scenarios
RI PC Platform
March 15-16, 2012
Platform Components
• Support Libraries
» 3rd party libraries supplying foundation for providing
TV/Media functionality in the Platform.
» Meet the RI dual licensing requirements.
• Implementation
» Leverages features provided by the support libraries.
» Adds extensions and customizations.
» Glues everything together into a coherent implementation.
• API
» Hides the underlying technology-specific terminology.
» Uses STB concepts to simplify command and control of
the Platform features.
Support Libraries Overview
gst-plugins-good0.10.10
ffmpeg-0.5
gst-plugins-base-0.10.22
liblog4c-1.2.1
Net-SNMP-5.6.1
gstreamer-0.10.22
pthreads-2-8-0
libxml2-2.6.32
Win32: compile from src
Linux: part of libc
Win32: compile from src
Linux: pre-installed
wxWidgets-2.6.4
liboil-0.3.15
gtk+-2.10.14
Win32: compile from src
Linux: pre-installed
Win32: unused
Linux: compile from src
glib-2.18.4
zlib-1.2.3
gettext-0.17
Win32: compile from src
Linux: pre-installed
Win32: compile from src
Linux: pre-installed
libiconv-1.12
Win32: compile from src
Linux: part of libc
External library code
Support Libraries Overview
• iconv & gettext provide internationalization support and are required
by glib
• xml2 library requires zlib and is used by both gstreamer and clinkc
• pthreads implementation wraps Win32 thread support in POSIX
APIs and is required by clinkc
• gstreamer requires glib
• gst-plugins-base need gstreamer and oil – optimized low-level
routine library (i.e. fast memcpy using MMX or SSE extensions)
• gst-plugins-good requires gst-plugins-base
• ffmpeg supplies A/V decoding support; at present, only MPEG-1/2
video decoding capability is used
• wxWidgets library provides multi-platform GUI framework and
requires gtk+ library on Linux
• log4c is a native implementation of the Apache logger
Implementation Overview
RI PLATFORM INTERFACE
CABLELABS GSTREAMER PLUGINS
LAUNCHER
RI PLATFORM IMPLEMENTATION
gst-plugins-good0.10.10
LOGGING
SNMP Master Agent
liblog4c-1.2.1
Net-SNMP-5.6.1
Tuner Control
gst-plugins-base-0.10.22
gstreamer-0.10.22
pthreads-2-8-0
libxml2-2.6.32
Win32: compile from src
Linux: part of libc
Win32: compile from src
Linux: pre-installed
ffmpeg-0.5
UI
CONFIG
wxWidgets-2.6.4
liboil-0.3.15
gtk+-2.10.14
Win32: compile from src
Linux: pre-installed
Win32: unused
Linux: compile from src
glib-2.18.4
zlib-1.2.3
gettext-0.17
Win32: compile from src
Linux: pre-installed
Win32: compile from src
Linux: pre-installed
libiconv-1.12
Win32: compile from src
Linux: part of libc
CableLabs developed code
External library code
Recent updates
•Trying to stay up-to-date on 3rd party library revisions as
much as possible.
•Glib
» Updated from 2.22.4 to 2.28.7
» Should be available in the 1.2.2 Rel-B and future releases.
•Gstreamer
»
»
»
»
Currently in-progress.
gstreamer : 0.10.22 to 0.10.35
gst-plugins-base : 0.10.23 to 0.10.35
gst-plugins-good : 0.10.10 to 0.10.30
Supporting Infrastructure
• Logging – uses log4c, available to all platform modules.
• Config – human-readable name-value keystore:
» # This is a comment
» RI.Launch.App.0 = ocap_stack
» RI.Launch.App.0.cwd = $(OCAPROOT)/bin/$(OCAPTC)/env
• Launcher - .EXE that:
» Starts the platform followed by all platform client DLLs.
» Enters that main loop and waits for reset/shutdown signal.
GStreamer Overview
In-Band Pipelines:
Section
Filtering
Tee
Section
Assembler
Section
Filter
Section
Sink
UP
LL
CA
FFMPEG
Library
PID
Filter
TSB
Tee
Decode
Tee
PID
Filter
ES
Assembler
File
Source
File
Sink
MPEG
Decoder
Display
OpenGL
Rendering
Colorspace
Converter
DIS
RE K
AD
UDP
Source
K
DIS ITE
R
W
NET
HDD
Out-Of-Band Pipeline:
VPOP Pipeline:
FDC
App
Source
Queue
App
Source
Section
Filter
Section
Sink
UP
LL
CA
UP L
L
CA
UI
GStreamer Summary
• Framework and building blocks for the MPEG-2
transport stream processing.
• Supplies in-band and OOB section filtering.
• Supplies MPEG-1 & 2 video decoding capability.
• Provides Time-Shift Buffer recording/playback.
• Supplies video and graphics plane display
capability (in conjunction with UI module).
• Supplies VPOP output stream packet source
User Interface Overview
Multi-plane Image Source
GStreamer Display
Scaling / Compositing
Common OpenGL
Infrastructure
Rendering / Windowing / Eventing
Native
Win32
wxWidgets
wxWidgets
Win32 build
Native
Linux/X11
wxWidgets
Linux build
GTK+
User Interface Summary
• Emulates the final TV display output – provides a
physical view of the rendered frame buffer.
• Relies on OpenGL technology for graphicsintensive operations (scaling, compositing,
rendering).
• Abstracts out window-specific operations into an
API to permit the usage of any UI/Widget
Toolkit/Framework.
• Currently supports wxWidgets framework as well
as native OS targets (Win32/Linux).
Platform API
• Object-based.
• Attempts to be functionally equivalent with an STB driver
API.
• Supports multiple instantiation of each object/API.
• Possible to supply multiple implementations of each API
(like Java interfaces).
• Removes dependencies on any technology-specific
terminology (abstraction layer).
• Some objects support multiple clients (e.g. display
module for iDCR).
Home Networking
Subsystem
March 15-16, 2012
HN Topics
•
•
•
•
•
Overview
Public Class Hierarchy
Streaming
Mapping to Platform
Gstreamer pipeline for serving, playing back
» Porting
• DTCP-IP
• Current Status
» Limitations
HN Overview
The Home Networking Extension provides support
for an ever increasing set of use cases
surrounding the discovery and delivery of
content over the customer’s home network.
• Use cases have evolved from an adjunct option for
content delivery to a primary one.
» Multi-room DVR (1.1.3 – 1.1.5)
» 3rd Party DLNA Device compatibility (1.2 – 1.2.2)
» CVP-2 and Cloud based scenarios (1.2.3 – later)
HN Overview
• OCAP 1.1.3 : Multi-room DVR
» Initial Release of HN Extension
» Focus on CTP test conformance
» Limited streaming capability
• OCAP 1.1.4 – 1.1.5 : Multi-room DVR cont.
» Redesigned Content Directory Service
» Continued CTP test conformance
» Improved streaming capability
HN Overview
• OCAP 1.2 - 1.2.2 : 3rd Party Device Compatibility
» Lower level UPnP Diagnostics API
» Improved UPnP/DLNA compatibility
» Live channels, Hidden items, Video Primary Output
Port, Alternate URI
• OCAP 1.2.3 : CVP-2 Support
» RUI Discovery and Authentication
HN Overview
• Java abstraction of:
» Network device discovery
» Content publishing
– Recordings, Live streaming, personal content
» Content discovery
» Content playback/display
» Remotely scheduling recordings
• Based upon, but abstracted from UPnP
• 2 specs
» HNEXT I08 Spec (Java APIs)
» HNP2.0 I07 Spec (Mapping to UPnP)
Baseline HN Technology
• UPnP
» Device Architecture 1.0
» Media Server 2.0
» Content Directory Service 3.0
» Connection Manager Service 2.0
» Scheduled Recording Service 1.0
• DLNA
» DLNA Guidelines, August 2009
HN Stack Components
HN Stack Architecture
Java Stack
org.ocap.dvr
org.ocap.hn
upnp media server
UPnP Diagnostics API
CyberLink For Java
mpe
mpeos
Platform
HN Gstreamer Pipeline
Design Choices
• UPnP Diagnostics API implemented using a 3rd
party UPnP stack
• Almost all code at Java level
• Content served/consumed at platform layer
» Rather than pass data up/down from Java
» Sockets passed between layers
UPnP Diagnostics Classes/Interfaces
• Singleton UPnPControlPoint
» Discovers UPnP devices on the network
» Register low level message handlers
• UPnPClientDevice
» Maps to each UPnP device on a specific network
• UPnPClientService
» Maps to each UPnP service on a device on a specific
network
» Invoke UPnP actions on a network service
• UPnPActionInvocation
Basic Public Classes/Interfaces
• Singleton NetManager
» Get list of discovered Devices on the home network
» Get aggregated list of NetModules
– NetModule is java abstraction of UPnP Service
• Device
» Straightforward mapping of UPnP device
• NetModules
» Loosely based on UPnP Services
» ContentServerNetModule
» RecordingNetModule
• Event driven listeners for discovery and activity
» DeviceEventListener/NetModuleEventListener/Conten
tServerListener
Basic Client Operation
•
•
•
•
•
NetManager.addNetModuleEventListener(…)
NetManager.getNetModuleList(…)
ContentServerNetModule.requestRootContainer
ContentServerNetModule.requestBrowseEntries
ContentServerNetModule.requestSearchEntries
» Get back ContentList of Items/Containers
» Render Item(s)
Content Public Classes/Interfaces
Content package
• Natural 1:1 mapping to UPnP ContentDirectory
» ContentContainer = <container>
» ContentItem, ChannelContentItem = <item>
» ContentResource = <res>
» MetadataNode ≈ <property attribute=blah>
» requestBrowseEntries = Browse action
» requestSearchEntries = Search action
Recording Content Interfaces
Client Recording Content
•
•
•
•
Not so simple UPnP Mapping
RecordingContentItem ≈ <item> in CDS
NetRecordingEntry ≈ <item> in CDS
But also:
» RecordingContentItem ≈ recordTask in SRS
» NetRecordingEntry ≈ recordSchedule in SRS
• Refer to HNP2.0 Appendix I
» Singleton NetManager gives access to
RecordingNetModules
» RecordingNetModule represents a DVR device
» requestSchedule ≈ CreateRecordSchedule SRS
» Also requestReschedule, etc.
Recording Scheduling Interfaces
Implemented by Stack Class
Implemented by Application Class
Server Recording Content
• Server stack per se does not initiate recording
• Application (EPG) gets RecordingNetModule and registers
request handler
» RecordingNetModule is a NetRecordingRequestManager
» UPnP SRS actions result in handler invocation
» Handler responsible for calling DVR APIs and publishing
resulting recordings
» OcapRecordingRequests are RecordingContentItems
• Note: RI HN extension currently requires DVR extension
» In future, no DVR APIs will be referenced in HN
– Allowing HN-Only client or server
HN Streaming
• Once content has been published on the network by the DMS, and
clients (DMCs) have discovered ContentItems, streaming can be
initiated.
• Remote client (DMC) initiates HTTP-based streaming from the DMS
using either the “res” URI from the ContentDirectoryService (CDS)
or the “alternateURI” registered by the guide application on the
ContentItem
• RI uses CyberGarage handle connection initiation to the HTTP port
• Streaming initiation requires authorization by the
NetAuthorizationHandler, if registered.
• For streaming requests, the NAH is passed the requested URI
and source IP
• The NAH2 is additionally passed the entire request line and
request headers
HN Streaming
• Incoming streaming requests are delegated to one of 5 interceptors:
» IconInterceptor: Provides UPnPManagedDeviceIcon support
(URI path /ocaphn/icon)
» RecordedServiceInterceptor: Provides RecordedService
streaming support (URI path /ocaphn/recording)
» ChannelRequestInterceptor: Provides ChannelContentItem
streaming support (URI path /ocaphn/service)
» VPOPInterceptor: Provides VPOP streaming support (URI path
/ocaphn/vpop)
» PersonalContentInterceptor: Intended to provide content to local
files (currently unsupported)
HN Streaming: Recorded Service
• Multiple HTTP range requests for a
RecordingContentItem
H
N
S
P
T
S
S
tre
a
m
S
e
s
s
io
n
1
(
m
p
e
_
H
n
S
tre
a
m
S
e
s
s
io
n
)
m
p
e
_
h
n
S
tre
a
m
O
p
e
n
()
H
N
S
P
T
S
S
tre
a
m
S
e
s
s
io
n
2
(m
p
e
_
H
n
S
tre
a
m
S
e
s
s
io
n
)
m
p
e
_
h
n
S
tre
a
m
C
lo
s
e
()
H
N
P
la
y
b
a
c
kS
e
s
s
io
n
1
(m
p
e
_
H
n
P
la
y
b
a
c
k
S
e
s
s
io
n
)
R
e
c
o
r
d
e
d
S
e
r
v
ic
e
In
te
r
c
e
p
to
rc
a
lls
N
e
tS
e
c
u
r
ity
M
a
n
a
g
e
rto
a
u
th
o
r
iz
e
p
la
y
b
a
c
ka
c
tiv
ity
N
e
x
tG
E
T
a
u
th
o
r
iz
e
d
m
p
e
_
h
n
P
la
y
b
a
c
k
S
ta
rt()
H
T
T
P
G
E
T
/h
e
a
d
e
r
sp
a
r
s
e
d
,U
R
L
ism
a
tc
h
e
d
to
C
o
n
te
n
tIte
m
,a
n
d
p
r
o
c
e
s
s
in
g
d
e
le
g
a
te
d
to
R
e
c
o
r
d
e
d
S
e
r
v
ic
e
In
te
r
c
e
p
to
r
S
o
c
k
e
th
a
n
d
e
d
o
ffto
p
la
tfo
r
m
fo
rs
tr
e
a
m
in
g
R
e
c
o
r
d
in
g
S
tr
e
a
m
in
itia
te
s
R
e
c
o
r
d
e
d
S
e
r
v
ic
e
R
1
r
a
n
g
e
p
la
y
b
a
c
ku
s
in
g
m
p
e
_
H
n
P
la
y
b
a
c
k
P
a
r
a
m
s
M
e
d
ia
S
e
r
v
e
r
H
ttp
w
ith
m
p
e
_
H
n
S
tr
e
a
m
C
o
n
te
n
tL
o
c
a
tio
n
o
f
L
O
C
A
L
_
M
S
V
_
C
O
N
T
E
N
T
m
p
e
_
h
n
S
tre
a
m
O
p
e
n
()
m
p
e
_
h
n
S
tre
a
m
C
lo
s
e
()
H
N
P
la
y
b
a
c
kS
e
s
s
io
n
2
(m
p
e
_
H
n
P
la
y
b
a
c
k
S
e
s
s
io
n
)
m
p
e
_
h
n
P
la
y
b
a
c
k
S
ta
rt()
R
e
c
o
r
d
in
g
S
tr
e
a
m
in
itia
te
s
R
e
c
o
r
d
e
d
S
e
r
v
ic
e
R
1
r
a
n
g
e
p
la
y
b
a
c
k
/
L
O
C
A
L
_
M
S
V
_
C
O
N
T
E
N
T
N
e
x
tG
E
T
p
a
r
s
e
d
&
d
e
le
g
a
te
d
M
P
E
_
H
N
_
E
V
T
_
E
N
D
_
O
F
_
C
O
N
T
E
N
T
M
P
E
_
H
N
_
E
V
T
_
E
N
D
_
O
F
_
C
O
N
T
E
N
T
S
o
c
k
e
tc
o
n
n
e
c
tio
n
e
s
ta
b
lis
h
e
d
to
H
T
T
P
p
o
r
t(
v
ia
C
y
b
e
r
G
a
r
a
g
e
)
t1t2t3t4t5
t6
t7t8t9t1
0
t1
1
HN Streaming: Recorded Service
• SegmentedRecordedService playback (2 segments,
1x playback)
H
N
S
P
T
SS
tre
a
m
S
e
s
s
io
n1(m
p
e
_
H
n
S
tre
a
m
S
e
s
s
io
n
)
m
p
e
_
h
n
S
tre
a
m
O
p
e
n
()
m
p
e
_
h
n
S
tre
a
m
C
lo
s
e
()
H
N
P
la
y
b
a
c
kS
e
s
s
io
n1
(m
p
e
_
H
n
P
la
y
b
a
c
k
S
e
s
s
io
n
)
R
e
c
o
rd
e
d
S
e
rv
ic
e
In
te
rc
e
p
to
rc
a
lls
N
e
tS
e
c
u
rity
M
a
n
a
g
e
rtoa
u
th
o
riz
e
p
la
y
b
a
c
ka
c
tiv
ity
H
N
P
la
y
b
a
c
kS
e
s
s
io
n2
(m
p
e
_
H
n
P
la
y
b
a
c
k
S
e
s
s
io
n
)
m
p
e
_
h
n
P
la
y
b
a
c
k
S
ta
rt(R
S
1
)
H
T
T
PG
E
T
/h
e
a
d
e
rsp
a
rs
e
d
,U
R
L
ism
a
tc
h
e
dtoC
o
n
te
n
tIte
m
,a
n
d
p
ro
c
e
s
s
in
gd
e
le
g
a
te
dto
R
e
c
o
rd
e
d
S
e
rv
ic
e
In
te
rc
e
p
to
r
m
p
e
_
h
n
P
la
y
b
a
c
k
S
ta
rt(R
S
2
)
R
e
c
o
rd
in
g
S
tre
a
m
in
itia
te
s1
xp
la
y
b
a
c
ko
f
firs
tR
e
c
o
rd
e
d
S
e
rv
ic
e(R
S
1
)in
S
e
g
m
e
n
te
d
R
e
c
o
rd
e
d
S
e
rv
ic
eu
s
in
g
m
p
e
_
H
n
P
la
y
b
a
c
k
P
a
ra
m
s
M
e
d
ia
S
e
rv
e
rH
ttp
w
ithm
p
e
_
H
n
S
tre
a
m
C
o
n
te
n
tL
o
c
a
tio
no
f
L
O
C
A
L
_
M
S
V
_
C
O
N
T
E
N
T
M
P
E
_
H
N
_
E
V
T
_
E
N
D
_
O
F
_
C
O
N
T
E
N
T
S
o
c
k
e
tc
o
n
n
e
c
tio
n
e
s
ta
b
lis
h
e
dtoH
T
T
Pp
o
rt(v
ia
C
y
b
e
rG
a
ra
g
e
)
R
e
c
o
rd
in
g
S
tre
a
m
in
itia
te
s1
xp
la
y
b
a
c
ko
f
s
e
c
o
n
dR
e
c
o
rd
e
d
S
e
rv
ic
e(R
S
2
)in
S
e
g
m
e
n
te
d
R
e
c
o
rd
e
d
S
e
rv
ic
e
L
a
s
tR
e
c
o
rd
e
d
S
e
rv
ic
einth
e
S
e
g
m
e
n
te
d
R
e
c
o
rd
e
d
S
e
rv
ic
e
M
P
E
_
H
N
_
E
V
T
_
E
N
D
_
O
F
_
C
O
N
T
E
N
T
t1 t2 t3 t4 t5
t6 t7
t8
HN Streaming: Live Streaming
• Streaming requests for ChannelContentItems also are subject to
additional processing steps:
• The “Channel Locator” is subject to resolution via the
ServiceResolutionHandler to establish the “Tuning locator”
• NetworkInterface has to be tuned to the program specified in the
Channel Locator (if the program is not already tuned)
• In attempting to acquire a tuner for streaming, the
ResourceContentionHandler may be invoked – with a
NetResourceUsage representing the network-initiated tuner
acquisition
• When the DVR extension is present, time-shift buffering also
needs to be started (if the program is not already buffering)
HN Streaming: Live Streaming
• ChannelContentItem playback
T
ra
n
s
p
o
rts
tre
a
m
s
e
c
tio
nfilte
rin
gs
e
s
s
io
n
(s
)
m
p
e
_
m
e
d
ia
T
u
n
e
(fre
q
1
,m
o
d
1
)
M
P
E
_
S
F
_
E
V
E
N
T
_
S
E
C
T
IO
N
_
F
O
U
N
D
M
P
E
_
T
U
N
E
_
C
O
M
P
L
E
T
E
T
S
B
C
h
a
n
n
e
lS
tre
a
m
a
c
q
u
ire
sa
T
im
e
S
h
iftW
in
d
o
w
v
iaT
im
e
S
h
iftM
a
n
a
g
e
r
C
h
a
n
n
e
lR
e
q
u
e
s
tIn
te
rc
e
p
to
rc
a
lls
N
e
tS
e
c
u
rity
M
a
n
a
g
e
rtoa
u
th
o
riz
e
p
la
y
b
a
c
ka
c
tiv
ity
H
T
T
P
G
E
T
/h
e
a
d
e
rsp
a
rs
e
d
,U
R
L
ism
a
tc
h
e
dtoC
o
n
te
n
tIte
m
,a
n
d
p
ro
c
e
s
s
in
gd
e
le
g
a
te
dto
C
h
a
n
n
e
lR
e
q
u
e
s
tIn
te
rc
e
p
to
r
tim
e
-s
h
ifte
ds
1c
o
n
te
n
t(T
S
B
1
)
m
p
e
_
d
v
rT
s
b
B
u
ffe
rin
g
S
ta
rt()
m
p
e
_
d
v
rT
s
b
B
u
ffe
rin
g
S
to
p
()
H
N
S
P
T
S
S
tre
a
m
S
e
s
s
io
n1(m
p
e
_
H
n
S
tre
a
m
S
e
s
s
io
n
)
m
p
e
_
h
n
S
tre
a
m
O
p
e
n
()
m
p
e
_
h
n
S
tre
a
m
C
lo
s
e
()
H
N
P
la
y
b
a
c
kS
e
s
s
io
n1(m
p
e
_
H
n
P
la
y
b
a
c
k
S
e
s
s
io
n
)
m
p
e
_
h
n
P
la
y
b
a
c
k
S
ta
rt()
S
o
c
k
e
tc
o
n
n
e
c
tio
n
e
s
ta
b
lis
h
e
dtoH
T
T
P
p
o
rt(v
ia
C
y
b
e
rG
a
ra
g
e
)
M
P
E
_
H
N
_
E
V
T
_
P
L
A
Y
B
A
C
K
_
S
T
O
P
P
E
D
B
u
ffe
rin
g
s
to
p
sa
fte
r
tim
e
o
u
t
T
S
B
C
h
a
n
n
e
lS
tre
a
m
in
itia
te
sT
S
B
1p
la
y
b
a
c
ku
s
in
g
m
p
e
_
H
n
P
la
y
b
a
c
k
P
a
ra
m
s
M
e
d
ia
S
e
rv
e
rH
ttpw
ith
m
p
e
_
H
n
S
tre
a
m
C
o
n
te
n
tL
o
c
a
tio
no
f
M
P
E
_
H
N
_
C
O
N
T
E
N
T
_
L
O
C
A
T
IO
N
_
L
O
C
A
L
_
T
S
B
R
e
m
o
tee
n
d
p
o
in
tte
rm
in
a
te
sp
la
y
b
a
c
k
c
lo
s
e
ss
o
c
k
e
tc
o
n
n
e
c
tio
n
0
t1 t2 t3t4 t5 t6 t7 t8 t9t1
t1
1
t1
2
HN Streaming: VPOP
• Virtual Primary Output Port: Allows
for streaming of whatever content is
playing back on the DMS
TheLO
C
A
L_D
IS
P
LA
Ystream
ing/playback
sessionspersist acrossbroadcast session
decodes, TS
Bplaybacks, andrecording
playbacksandterm
inatesw
hentheD
M
C
disconnects
H
NS
P
TSS
treamS
ession(m
pe_H
nS
tream
S
ession)
H
N
S
erverS
essionM
anagerinitializesthe
server-sideconnectionusing
m
pe_H
nS
tream
P
aram
sM
ediaS
erverH
ttp
–passingtheconnectiontotheplatform
H
NP
laybackS
ession(m
pe_H
nP
laybackS
ession)
m
pe_hnP
laybackS
tart(..., LO
C
A
L_D
IS
P
LA
Y
, disp1)
m
pe_hnS
tream
O
pen()
H
N
S
erverS
essionM
anagerinitiatesV
P
O
Pstream
ingby
passingam
pe_H
nP
laybackP
aram
sM
ediaS
erverH
ttpw
ith
m
pe_H
nS
tream
C
ontentLocationof LO
C
A
L_D
IS
P
LA
Yandthe
m
pe_D
ispD
evicehandleof theprim
arydisplay
S
tream
ingA
ctivityListenerinvoked
N
etA
uthorizationH
andlerinvoked
M
P
E
_H
N
_E
V
T_S
E
S
S
IO
N
_C
LO
S
E
D
D
ecodeS
ession1
D
ecodeS
ession2
m
pe_m
ediaTune(freq1)
m
pe_m
ediaTune(freq2)
m
pe_filterS
etFilter()
m
pe_filterS
etFilter()
m
pe_m
ediaD
ecode(…
,disp1)
m
pe_m
ediaD
ecode(…
,disp1)
H
TTPrequest received
w
ithV
P
O
PU
R
I &handled
byV
P
O
P
Interceptor
m
pe_m
ediaS
top()
JM
FTS
BP
layerstarted.
(B
ufferingdisabled)
t1 t2 t3 t4 t5 t6
V
P
O
Pconnectionappearspaused/stalledw
hen
nocontent isbeingdisplayedontheD
M
S
R
ecordingP
laybackS
ession
m
pe_dvrR
ecordingP
layS
tart(…
,disp1)
m
pe_dvrP
layB
ackS
top()
m
pe_m
ediaS
top()
P
laybackof recordedservice
C
hannel change
t7 t8
TheM
P
E
O
Sport/platformrenderstheA
V
content fordisp1tothesocket providedinthe
m
pe_H
nP
laybackS
ession
t9 t10
A
nytrickm
odesperform
edduringrecording
playbackarerenderedaslivetothesocket
providedinthem
pe_H
nP
laybackS
ession. P
referably,
P
ID
sarerem
appedtoconsistent values
t11
t12
HN Streaming: RemoteService playback
• OCAP RI DMC can playback a MPEG single-program
transport stream (modeled on the DMC as a
RemoteService)
H
NS
P
T
SS
tre
a
m
S
e
s
s
io
n(m
p
e
_
H
n
S
tre
a
m
S
e
s
s
io
n
)
m
p
e
_
h
n
S
tre
a
m
O
p
e
n
()
m
p
e
_
filte
rS
e
tF
ilte
r(M
P
E
_
F
IL
T
E
R
_
S
O
U
R
C
E
_
H
N
_
S
T
R
E
A
M
)
S
e
ctio
nfilte
rin
gfo
r
P
A
T
/P
M
Tin
itia
te
db
y
M
P
ES
IM
a
n
a
g
e
r
D
V
B
S
e
rvice
C
o
n
te
xt.se
le
ct()
ca
lle
dfo
rR
e
m
o
te
S
e
rvices
1
(co
u
ldre
p
re
se
n
tare
m
o
te
R
e
co
rd
in
g
C
o
n
te
n
tIte
m
o
r
C
h
a
n
n
e
lC
o
n
te
n
tIte
m
).
P
A
T
/P
M
Tfo
u
n
d
R
e
m
o
te
S
e
rvice
D
e
ta
ils
.g
e
tC
o
m
p
o
n
e
n
ts
()
re
q
u
e
stsa
tisfie
d
H
NP
la
y
b
a
c
kS
e
s
s
io
n
m
p
e
_
d
vrT
sb
o
n
ta
rt()
(m
p
e
_
H
n
P
la
y
b
a
c
k
S
e
s
s
iC
o
n
)vertS
M
P
E
_
S
F
_
E
V
E
N
T
_
S
E
C
T
IO
N
_
F
O
U
N
D
m
p
e
_
h
n
P
la
yb
a
ckS
ta
rt()
m
p
e
_
h
n
P
la
yb
a
ckS
to
p
()
JM
FR
e
m
o
te
S
e
rvice
/P
la
ye
rsta
rte
d
.
P
la
yb
a
ckin
itia
te
dw
ithd
e
fa
u
lto
ra
p
p
se
le
cte
dco
m
p
o
n
e
n
ts
/P
ID
s
t1
t2 t3 t4
JM
FP
la
ye
rsto
p
p
e
d
t5
HN Platform Functionality
• Two levels of RI HN Platform Code
• MPEOS C code
• GStreamer pipeline C code
•
MPEOS Level – Player
• Performs HTTP request & response handling
• Receives content via socket
• Transfers to HN player pipeline for decoding
• MPEOS Level – Server
• Sends content retrieved from platform via socket
• NOTE: HTTP handling is performed in RI Stack
• GStreamer HN Pipelines
• Server pipeline supplies content
• Player pipeline decodes content
MPEOS HN Changes
• Defines the porting interface for HN - mpeos_hn.h
• Methods & data structures used in platform for both
Server & Player roles
• Summary of recent changes
• Non-platform specific Server side processing of HTTP
requests moved to RI Stack level
• Clearer separation of methods b/w player & server
• Enhanced “javadoc” type documentation updates
• Added DTCP support
• Need to be sensitive to changes
• Impacts ALL platforms not just RI PC Platform
• All changes are posted to forum
DTCP/IP
• RI Stack support complete with 1.2.1.
» DTCP_ profile ID signalling.
» application/x-dtcp1 mime types.
» Support for Range.dtcp.com in 1.2.2-B.
• RI Platform integration complete with 1.2.1.
» Integrated Intel SIK v4.02.
» Library presence dynamically detected and loaded at
RI start-up.
» Fallback to No-OP version.
» MPE configuration options:
– MPEOS.HN.DTCTPIP.DLL=/f/encrypted/dtcpip.dll
– MPEOS.HN.DTCPIP.STORAGE=/f/encrypted/keys/
DTCP/IP (cont’d)
DTCP/IP Testing
• Successful sink/source interoperability.
• Verified support/interoperability with both facsimile
and production keys.
• Successful streaming to a production DMP device.
• Currently working through issues with DLNA LPTT.
Limitations
• Network interface mapping
» MoCA support
» Supporting multiple interfaces
– Bridging/loop mitigation
• Playback formats
» No Audio playback support
» Only standard MPEG transport stream
– DLNA “ISO” ts formats, not tts (zero or otherwise)
– No MPEG PS support (adding in July)
Graphics
March 15-16, 2012
Setting up Graphics Resolution
Platform Window size from
display.window.width
display.window.height
(platform.cfg)
TV Screen size from
DISP.DEFAULT.CONFIG
(mpeenv.ini)
Video scaled according
to incoming video size
and applicable DFC rule
Coherent Configurations
DISP.DEFAULT.CONFIG
Configuration
0
640x480 1:1 graphics, 720x480 8:9 video, 640x480 1:1
background
1
640x480 1:1 graphics, 720x480 8:9 video, 720x480 8:9
background
2
960x540 3:4 graphics, 720x480 8:9 video, 640x480 1:1
background
3
960x540 3:4 graphics, 720x480 8:9 video, 720x480 8:9
background
4
640x480 4:3 graphics, 1920x1080 1:1 video, 1920x1080
1:1 background (with I-frame support)
5
960x540 1:1 graphics, 1920x1080 1:1 video, 1920x1080
1:1 background (with I-frame support)
Stack Graphics Overview
MPE Java Classes (partial list)
•
•
•
•
•
•
MPEGraphics
MPEGraphicsConfiguration
MPEGraphicsDevice
MPEToolkit
MPESurface
MPEImage
MPEOS Graphics Object:
mpeos_GfxScreen
typedef struct mpeos_GfxScreen
{
int32_t
x;
int32_t
y;
int32_t
width;
int32_t
height;
int32_t
widthbytes;
mpe_GfxColorFormat
colorFormat;
mpe_GfxBitDepth
bitdepth;
mpeos_GfxSurface
*surf;
os_GfxScreen
osScr;
} mpeos_GfxScreen;
MPEOS Graphics Object:
mpeos_GfxSurface
typedef struct mpeos_GfxSurface
{
os_Mutex
mutex;
/**< surface is thread safe */
int32_t
width;
/**< width of surface in pixels */
int32_t
height;
/**< height of surface in pixels */
int32_t
bpl;
/**< bytes per line */
mpe_GfxBitDepth
bpp;
/**< bit depth (bits per pixel) */
mpe_GfxColorFormat
colorFormat; /**< color format */
void*
pixel_data;
/**< pixel data */
mpe_Bool
primary;
/**< true if on-screen surface */
mpe_GfxPalette
clut;
/**< color palette used (if
colorFormat == MPE_GFX_CLUT8) */
os_GfxSurface
os_data;
/**< os-specific surface info */
} mpeos_GfxSurface;
MPEOS Graphics Object:
mpeos_GfxContext
typedef struct mpeos_GfxContext
{
mpe_GfxColor
color;
mpe_GfxFont
font;
mpe_GfxPoint
orig;
mpe_GfxRectangle
cliprect;
mpe_GfxPaintMode
paintmode;
uint32_t
modedata;
mpeos_GfxSurface
os_GfxContext
} mpeos_GfxContext;
*surf;
os_ctx;
Third-party packages
• DirectFB -- Used for alpha blending onto
graphics buffer
• FreeType – Font support
Relationship with Platform
• Graphics Buffer
» Allocated by Platform
» Pointer passed to Stack via get_graphics_buffer
(display.c)
» Drawn upon request via draw_graphics_buffer
(display.c)
• Graphics resolution
» Changed by a call from Stack to Platform:
update_configuration (display.c)
Use Case: FillRect() in Paint()
1) MPEToolkit creates MPEGraphics and wraps it in
DVBGraphicsImpl2 object, which is passed into
paint.
2) FillRect called on DVBGraphicsImpl2 passes to
inner MPEGraphics object.
3) Call passes to gfxRectangle in mpeos_draw.c, with
native graphics context passed in.
4) gfxRectangle calls FillRectangle on
IDirectFBSurface in native graphics context
5) DirectFB paints to graphics buffer, then calls
Platform to redraw
RI Graphics UML - 1
UML Diagrams
•
https://community.cablelabs.com/svn/OCAPRI/trunk/ri/RI_Stack/docs/design/Graphi
cs/OCAP_graphics_PhoneME.vsd
•
Free Microsoft Visio 2003 Viewer
•
enableTv Contribution (Russell Greenlee)
•
9 Structure Diagrams
»
»
»
»
»
»
•
RI Launcher & Display
MPE/MPEOS
DirectFB
Java
HAVi
AWT
23 Sequence Diagrams
»
»
»
»
»
»
»
RI Emulator Startup
MPE/MPEOS Initialization
DirectFB Initialization
OCAP Main/AWT Toolkit Initialization
MPE Graphics Initialization
HAVi Initialization
AWT Rendering
RI Graphics UML - 2
Graphics vs VideoOutputPorts
• VideoOutputPorts: physical “spigots” on back of
OCAP box. Each HScreen has a main
VideoOutputPort.
• VideoOutputPorts AND CoherentConfigs control
video plane resolution
CoherentConfig vs VideoOutputPort
• Coherent Config and Video Output Config
BOTH control video resolution.
• On RI startup, persisted Video Output Port
Config is read and supercedes CoherentConfig
• When OCAP app change coherent config,
Video Output Config is changed
• When OCAP app changes Video Output Config,
CoherentConfig is changed
Testing
March 15-16, 2012
Different Tests Play Different Roles
•
•
•
•
Smoke Tests
Standards Compliance
Integration Demonstrations
See:
https://community.cablelabs.com/wiki/display/OC
ORI/Testing+the+RI
Smoke Tests - Overview
•
•
•
•
Philosophy of daily smoke tests
Current smoke tests
For more information
Recommendations for smoke tests
Smoke Tests - Philosophy
• Discover unexpected consequences ASAP
» Documented procedures for how and when to run the
tests
» Published reports from running guide tests
» Routine, periodic execution
» Executed by all engineers, verified by the build.
• Maximum coverage for short period of time
» Focus on troublesome areas of the code
» Manual execution < 30 minutes effort for MSO guides
» Manual execution < a few minutes effort for CTP tests
Smoke Tests – Current Procedures
• Manual tests, not fully automated
• For every code change
» CTP test suite
» TuneTest
» Other tests, as appropriate
• Daily, at least once
» Aspen Guide, dual tuner configuration
» ODN, will begin soon
Smoke Tests - Guides
•
Smoke Tests – For more information
• Wiki page:
» https://devzone.cablelabs.com/web/oc/9//wiki/OCAP%20RI/Smoke+Testing
Smoke Tests - Recommendations
• Suggestions for additional tests?
• Recommendations for alternative procedures?
Smoke Tests - Summary
• Smoke tests are manual, quickly-executed,
formal tests to gauge the health of a build
• All engineers on the RI project are running
smoke tests
• Please contribute on the forum your thoughts
about smoke tests.
CTP Testing against RI
• Full suite of unattended CTP tests (approx 5500) are run
against tip of RI trunk every week.
• CTP test are run using a “real ATE” – Automated Test
Environment:
» Dedicated machine that executes ATE software, generates
streams in real time and sends them via RF channel to RI
running on Windows and Linux.
• Priority given to testing full configuration of RI.
• The other three configuration are tested monthly.
CTP Testing against RI
• Failure Results:
» RI QA does initial analysis.
» File bugs in RI JIRA db at CableLabs which is tied
to CableLabs CTP bug db.
» If the failure is determined to be due to a test bug,
an issue is entered into the CL CTP bugs
database and the 2 issues are linked.
• Weekly results and corresponding Jira issues
are captured in a spreadsheet for easy
comparison of RI status from week to week.
Attended CTP Test Automation
• Existing Scenario
• Problems faced
• Tool used for Analysis/Report Generation.
Attended CTP - Existing Scenarios
• 2 Groups of Attended Test
Interactive Test
Visual Inspection Test
• Automation is done only for the second group.
• This is to increase the efficiency of the tester.
 Reduce the wait time spent for running tests.
• Minimal changes were made to ATE emulator
 Script changes to avoid pop up of a question.
 Take a screenshot of RI screen.
Tools Used for Test Run/ Test Analysis
• Screenshot tool: (Test Run)
» Tool written in Java to enable screenshot of RI
screen.
• Spreadsheet creation tool:
» After the Test run, to collect all the images and
questions and organize them to a spreadsheet.
• Test Result Update tool(TestResultMux):
» To view the images and questions through an
interface and create a test result.
Advantages of using the tool
• Usability :
» More user friendly so that it takes less time for a
new person using this tool.
• Efficiency :
» Reduces the time taken for test result analysis
and creating a test report.
• Robust :
» Avoids human errors while executing/updating
test analysis reports by showing all the mandatory
parameters on the screen.
Integration Tests
• $OCAPROOT/apps/qa/org/cablelabs/xlets
• Each test application should have a readme.txt
in its directory.
• Ongoing clean-up and rework
» Latest status is found in
$OCAPROOT/apps/qa/docs/IntegrationTestInfo.doc
• New test applications will be added going
forward for integration testing of new features.
Integration Test Automation AutoXlet
• Automated xlet examples
($OCAPROOT/apps/qa/org/cablelabs/xlet/):
» TuneTest
» PermissionTest
» FileAccessPermissionTest
» PropertiesTest
» DvrTest
Home Networking Test Automation
• Home Networking tests are challenging
» Video comparison
» Network issues
• Rx Project
• RiScriptlet
• RiExerciser
• Pragmatic automation of HN Integration tests
• Overnight smoke tests
MSO Guide Testing - Approach
• We want to run the same tests against the RI
that are run against any STB
» RI/QA is always looking for more tests
• “Canary” boxes
• All non-blocked suites are run before a release,
or as needed.
• TestLink manages the test procedures,
execution and results.
MSO Guide Testing - Suites
•
•
•
•
Tuning, live streaming, VPOP
DVR and Trick Mode viewing
Locks and PINS
Various ways to find content – Guides and HN
content searches
• All buttons on the simulator remote control
• All “feature menus”
MSO Guide Testing – Tests NOT Run
• Environment at Cablelabs determines tests to be
run. Some tests not run due to:
» Specialized headend support at CableLabs
(Upsell, CallerID, etc.)
» Headend triggered features
» VOD and CA support
» Platform features – audio, analog channels
• What tests do you think should be run, and how
frequently?
TestLink – Manage MSO Guide Tests
•
•
•
•
•
Web Based Test Management
http://www.teamst.org/
GNU GPL, version 2
Architecture – Apache web server, MySQL, PHP
http://www.apachefriends.org/en/xampp.html
TestLink – Test Cases
TestLink - Reports
MSO Guide Testing - TestLink
• We want to run the same tests against the RI
that are run against any STB
» RI/QA is always looking for more tests
» RI/QA is always looking for more canary boxes
• Not all tests can be run here – however, if YOU
can run them at your site…..
• TestLink is our Web Based Test Management
tool
Unit Tests – Design and Expectation
• Historical JUnit Tests
• $OCAPROOT/java/test
• Out of date when received by RI Project
• Contain useful coding examples
• Design of new tests for fixes and contributions
• Fail against old code, pass on new code
• Expectation of new tests
• Coverage for all lines of code for contributions
• Your experience with JUnit tests?
Rx - Ri eXerciser
March 15-16, 2012
Goals and Benefits of RX
Rx Project Overview: The RxProject is an effort to take the
current DvrExerciser OCAP Xlet and refactor it into a frame
work which provides the following:
•A library of functionality, called OcapAppDriver, that
aggregates OCAP API calls into functional building blocks
provided by RI Stack & PC Platform.
•A scripting interface, RiScriptlet Xlet, that allows automation
of testing of these functional building blocks.
•A "Guide" Type OCAP Xlet, which is referred to as the
RiExerciser, that supports functional/application level testing
and development through a GUI.
Another testing framework… Really?
• This framework allows for automation without much
additional effort.
• RxProject will be part of the open source so outside
contributors will be able to write bean shell scripts to
illustrate issues and also demonstrate fixes
• Currently have a multiple of Xlets in the QA directory, and
there is much redundant code. The Rx framework allows
Xlets to utilize common utilities already found in
OcapAppDriver or add to the common functionality
• For HN, we need a framework where tests can be run to
verify robustness in a network environment with many
devices. HN CTP tests assume an isolated network.
OcapAppDriver
• A library of commonly used functions (e.g. tune, record,
etc) that can be used by xlets or scripts. The idea of this
library is to be easier to use than the raw OCAP calls so
that a script-writer in particular does not need detailed
OCAP API knowledge to write a script.
• OcapAppDriver lib calls need to clearly assert whether
they are synchronous or asynchronous. In general,
synchronous calls will be favored over asynchronous.
• OcapAppDriver lib calls will pass/return only simple Java
primitives (String, int, etc) in keeping with the philosophy
that the API should require minimal OCAP API knowledge
to use.
Asynchronous vs Synchronous
example
• As previously mentioned, OCAP API calls will in general
be synchronous. However, there are asynchronous OCAP
API calls such as tuning and recording
• For any asynchronous API calls, a synchronous
counterpart will exist. For example, waitForTuningState() is
a synchronous counterpart to the asynchronous
serviceSelectByIndex() method.
• In general, synchronous counterparts should include
“waitFor” in the method name
Rx Architecture
RiScriptlet
• RiScritplet is an xlet that executes scripts
• Scripts
» Written in "Java" and executed by BeanShell
interpreter
» Specified in hostapp.properties or via telnet
» Can have subroutines for code org
• Results file written when script is complete
Example Script
// Delete All Recordings
rxLog.info ("Deleting all recordings...");
rxReturn = true;
if(!rxDrvr.deleteAllRecordings())
{
rxReturn = false;
rxReturnString = "deleteAllRecordings failed"
}
rxLog.info ("Done deleting all recordings...");
Synchronizing Scripts
• Can run multiple scripts in parallel
• Can sync scripts via sync points on one or more
RI instances
• One RiScriptlet acts as sync server to coordinate
sync points
• Syncing is TCP-based
Synchronization Architecture
Script #1
Script #2
TCP
(register, sync,
unregister)
TCP
(register, sync,
unregister)
RiScriptlet
(Sync Master)
Sync Example Scripts
// Script #0
rxSyncClient.register ((byte)0 /* clientId */, (byte)2 /* expected num clients */, 3000 /* timeout */);
Thread.currentThread().sleep(5000);
rxSyncClient.sync ((byte)0 /* syncId */, 10000 /* timeout */);
rxSyncClient.unregister(3000 /* timeout */);
// Script #1
rxSyncClient.register ((byte)1 /* clientId */, (byte)2 /* expected num clients */, 3000 /* timeout */);
Thread.currentThread().sleep(1000);
rxSyncClient.sync ((byte)0 /* syncId */, 10000 /* timeout */);
rxSyncClient.unregister(3000 /* timeout */);
Home Networking Integration Testing
•
•
•
•
•
•
•
Benefits
Designing tests
Building and running HN test
Handy tools
Inventory of current tests
Continuous integration scripts
Where to find more information
Benefits - HN Integration Testing
• Testing of HN features without needing a
headend or guide
• RI can be server – third party devices
• RI can be a player for your STB port
• Advantages of PC tools for network debugging
• API code examples for new ECs
Design – HN Integration Tests
•
•
•
•
•
•
Use Cases from specifications
Narrative fro the beginning of specifications
Common sense application of a feature
Only happy path tests
Limited scope - not exhaustive combinations
Mind Maps
Manual HN Integration Tests
Inventory – HN Integration Tests
•
•
•
•
•
Streaming, recording and trick modes
VPOP
Hidden content
Resource contention handling
New test suites for new ECs
Tools – HN Integration tests
• RiExerciser
• Intel’s UPnP Device Spy
• Third party devices – PS3, Samsung SmartTv
HN – Continuous Integration
•
•
•
•
Regression – all tests expected to pass
Results summarized and archived
Optimized for our HN test lab
…/OCAPRI/trunk/ri/hnTestScripts/buildRx.xml
More information – HN Tests
• How we test the RI
• https://community.cablelabs.com/wiki/display/OC
ORI/Testing+the+RI
• Location of integration spreadsheets
• OCAPRI/trunk/ri/RI_Stack/apps/qa/hn/integration
Contributions – HN Integration Tests
• Designs for integration tests
• Additions to OcapAppDriver
• Contribute Scriptlets
Summary – HN Integration Tests
• Demonstrations of functionality – end-to-end
• Do not need:
» Guides
» Headends
•
•
•
•
Learn about new APIs
Designed from specs and common sense
Manual test procedures in spreadsheets
Automated with scriptlets
Issue Reporting and
Handling
March 15-16, 2012
Issues – information to report
• Basic journalism
• In what environment (RI Rev level, OS, etc.)?
• What did you do (sample code is best)?
• What happened (observations, logs, screen
shots)?
• Priority – what should it be?
• Lastly, why do you believe this is an issue?
• Include sample code to demonstrate the
behavior
http://java.net/jira/browse/OCAP_RI
http://java.net/jira/browse/OCAP_RI
http://java.net/jira/browse/OCAP_RI
Issues – Life Cycle
•
•
•
•
•
Filed
JIRA counterpart
Comments, comments, comments
Resolution
Closed with the filer’s assent
Issues – Status
• Unresolved
• NEW – Initial state
• STARTED – Assigned and work begun
• REOPENED – Once resolved, but more work needed
• Resolved
•
•
•
•
•
FIXED - A fix is checked in
INVALID – The problem described is not an issue
WONTFIX – The issue will never be fixed
DUPLICATE – Duplicates an existing issues
WORKSFORME – Attempts to reproduce were futile
Issues – Guidelines for Priority
• Blocker- Most important.
• Catastrophic consequences
• Potentially effects many applications
• No workaround by changes to the app, etc.
• Critical
• More limited scope or consequences
• Major
• Workaround available, limited scope
• Minor and Trivial – Least important.
Issues - Process
• Every release has a published cutoff date for
considering issues to be resolved for that
release. Three weeks prior to release.
• Higher priority, well documented issues are
addressed sooner
• All correspondence should be through
comments in the issue
Issues - Summary
• All correspondence and information about issues
must be archived in the Issue Tracker system
• Report the required information for the most
efficient response
• Recommendations and observations?
Issues - http://xkcd.com/627
Stabilization/Robustness
Project
March 15-16, 2012
Stabilization (aka Brownian Motion)
• Rationale
» Some tests are not predictably repeatable – sometimes they pass,
sometimes they fail
» This is true for a wide range of test approaches – CTP, TDK, etc.
• Approach
» Need to bound the population of Brownian tests
– Approximately 114 of 5600+ CTP tests (all – not just HN)
– Approximately 5 of 400+ TDK tests (all “good” tests)
» HN is a focus area since there are many potential factors that can affect
test results (eg, # of interfaces, fluctuating network conditions)
• Resolution
» Determine if the cause of the uncertainty is the network, the RI or the
test itself
• Eliminate the test, fix the test, or fix the RI to accommodate a fluctuating
network environment
• Will rely on RiScriplet for test automation
Robustness
• Rationale
» We have done very little stress testing
on the RI
» We would like to begin addressing
robustness issues now
• Approach
» Identify potential areas to research
» Focus on a few of those initially
Possible Approaches - 1
•
•
•
•
Brownian Motion CTP investigation
FindBugs (a static analysis tool)
Drill down into code/walk throughs
Identify functional areas
»
»
»
»
•
•
•
•
•
•
•
Socket timeouts
Run in context
Monitor/locks
Lack of synchronization in CyberGarage
Design review of Cybergarage to gain better understanding
Address individual OCORIs which are categorized
Stop new feature development and focus on fixing issues
Setup “Typical/Real world” Home Network testing environment
Perform STB type testing
Gather stability metrics
Expand Rx Framework testing
Possible Approaches - 2
•
•
•
•
•
•
•
•
•
•
•
Run CTP tests (either all or a subset) without consecutive reboots
More Guide Type testing by developers
Identify scenarios with guides to be run
Start fixing known issues rather than looking for more issues
Perform deployment type testing
Run CTP tests on a busy network
Investigate isolation of jvm/platform /stack to do targeted testing
Run surfer tests
Prioritize guide issues
Investigate TDK Brownian motion
Form a focus team to address discovery issue in simplified
environment (local loopback)
• Re-architect problem areas
Miscellaneous Topics
March 15-16, 2012
MPEOS Review
• Low priority task to review and correct MPEOS
header file comments, remove unused items, etc
• Comments in Doxygen format
» Will expose this info as HTML pages
» Will not update MPEOS Porting Guide
• Initial file to be refactored was mpeos_dvr.h
» Was integrated into the 1.2.1 Release
• Next up are mpeos_media.h and mpeos_hn.h
» Targeting 1.2.2 Rel-B
RI Conditional Access
RI provides support for Conditional Access.
–
–
–
–
Portable implementation
Compliant with CCIF 2.0 CA Support (Section 9.7)
MPE and Java-level decrypt session constructs
RI MPE CA management can be disabled via ini
configuration (When disabled the CA management is
done in the MPEOS porting layer)
MPE POD Manager Responsibilities
• Methods to initiate/terminate decrypt sessions
• CAS session opened when POD_READY indication is
received
• All CA APDUs processed by the MPE POD Manager
• CA_PMT constructed for the selected Service when MPE
decrypt session is started
• Explicit LTSID assignment. MPE POD Manager assigns a
randomly generated LTSID when initiating decrypt session
• LTSID is included in the CA session event and passed
around to all layers to maintain tuner to LTSID association
• All CA sessions on a tuner share the same LTSID
• CA sessions between clients are shared when possible (e.g.
decode and buffering of the same program on a tuner)
MPE POD Manager Responsibilities
• CableCARD decrypt resource capabilities queried at start-up
• POD Manager internally keeps track of resources being used
• High priority decrypt requests will pre-empt lower priority
requests (e.g. ServiceContext select is higher priority than
DSMCC ServiceDomain attach)
• CP session is opened when CA session is successfully
started
• Terminate CP session when CA session is stopped
• CCI support (can be signaled via java/MPE decrypt session)
RI Conditional Access
CA session supported for
– JMF BroadcastSession (initiate decrypt session
prior to calling mpe_mediaDecode())
– DVR (initiate decrypt session prior to
mpe_dvrTsbBufferingStart())
– Object Carousel (initiate decrypt session before
attaching a DSMCC service domain)
– Section Filter (initiate decrypt session before setting
native section filter)
RI Conditional Access
OCAP ODL Stack Basic Decrypt/Decode
Transport stream section filtering session(s)
mpe_mediaTune(freq1,mod1)
mpe_filterSetFilter()
Section filtering for
PAT/PMT initiated by
MPE SI Manager
MPE_SF_EVENT_SECTION_FOUND
DVBServiceContext.select()
called for Service s1
Decrypt session
mpe_dvrTsbConvertStart()
Decode session
mpe_podStartDecrypt()
Tune completes
mpe_mediaDecode()
t1 t2
JMF Broadcast Player started.
Decode initiated with Locator-specified
components/PIDs from PMT
LTSID extracted from decrypt session.
CA_PMT generated.
Random generated
LTSID. Program index
table updated.
MPE_TUNE_SYNC
t3 t4
t5
mpe_stopDecrypt()
JMF player stopped
mpe_mediaStop()
t6
CA_PMT generated
(not selected)
program index table upda
t7