1. Wireless Display SDK of Miracast
1.1 Purpose
It is used to guide the developers who use the Miracast SDK also called WiDi SDK run on Android of BiJie to develop and test.
1.2 Target Readers
This document is applicable to the developers who develop the receiver of Android miracast.
1.2 Definition Of Abbreviations
Abbreviation | English | Chinese |
---|---|---|
Miracast | The wireless display standard is based on Wi Fi direct, developed by the Wi Fi Alliance in 2012. |
2. Content Scope
2.1 Function
This SDK can accept the screen from miracast on Android and miracast on windows 10 or 8 and WiDi and windows 10 or 8 , and provide interfaces for the application layer to call processing.
2.2 SDK Framework
BJMiracast Receiver SDK
is generally divided into two layers
cast_base_lib-1.0.20-release.aar
: It is a Android Module,It defines the interfaces for theMediaChannel
class.bj_miracast_lib-1.0.19-release.aar
: It is a Android Module,It defines the interfaces for theMiraProxyBaseImp
,MiraProxyModule
and JNI。 In principle, the application should not modify the contents ofcast_base_lib-1.0.20-release.aar
andbj_miracast_lib-1.0.19-release.aar
。
2.3 Demo Implementation Of SDK
Castdemo
is a reference implementation of the receiver. It implements the functions of the receiver based on bj_miracast_lib-1.0.19-release.aar
and cast_base_lib-1.0.20-release.aar
. MiraProxyModuleImp
implements the MiraProxyBaseImp
class and realizes the control of the Miracast audio session. MiraRenderChannel
implements the MediaChannel
class and realizes the processing of the Miracast audio session.
2.4 SDK Deliverables
SDK libraries(Two AAR files)
DEMO source code
SDK interface document
3. Interface
The interfaces are mainly defined in the MiraProxyModule
, MiraProxyBaseImp
and MediaChannel
classes.
The MiraProxyModule
class provides interfaces for initializing SDK, deinitializing SDK, and stopping a session.
The MiraProxyBaseImp
class is an interface class, which needs to be implemented by the user. The SDK informs the user program of the start and end of miracast screen throwing session through the interface class. The user program needs to create corresponding MediaChannel
implementation classes and corresponding player applications according to different session types.
The MediaChannel
class is an interface class, which needs to be implemented by user program. Through this interface class, the SDK informs the application program of control events such as audio and video data, volume control, video rotation, etc., and the application program processes them in the corresponding player.
Users need to implement the relevant interfaces of the MediaChannel
class and the MiraProxyBaseImp
class, or refer to the demo source code provided by our company.
3.1 Interface of the MiraProxyModule
class
3.1.1 setProxyImp
public void setProxyImp(MiraProxyBaseImp proxyImp)
;
Input: An interface instance of the MiraProxyModuleImp class implemented by the user.
3.1.2 init
public native boolean init(Properties var1)
; The init method of the MiraProxyModule
class initializes the miracast receiver module. The MiraProxyModule
object should be designed to have only one global when the app is started for initialization.
The return value is 1, indicating successful initialization. The return value is 0, indicating failed initialization.
3.1.3 fini
public native void fini()
; The fini method of the MiraProxyModule class deinitializes the miracast module. Called when the app destroys the miracast receiver service.
3.1.4 stop a miracast session
public void hangup(int channelid)
;
Input: The channelid is the ID of the corresponding
MediaChannel
created by thereqMediaChannel
method of theMiraProxyBaseImp
class.
3.1.5 Keyframe request
public void reqKeyFrame(int channelid)
;
3.1.6 Delay keyframe request
public void advReqKeyFrame(int channelId)
;
3.2 Interface in the MiraProxyBaseImp
3.2.1 Interface for Session access
public abstract MediaChannel reqMediaChannel(MediaChannelInfo var1, UserInfo var2, int var3)
Input: Session information,Describe business type.
MediaChannelInfo
: Describes the type information of the current session.UserInfo
: Describes the IP, device model, device name and other information of the sender.sessionId
: Describes the session id of the current session.Output: Created an object of the
MediaChannel
class. This is a callback interface. When the miracast protocol stack finds that there is session access, the JNI layer will actively call this interface. The application layer needs to implement the relevant logic, which needs to be implemented in the implementation class of theMiraProxyModuleImp
class of the customer. The specific implementation can refer to the demo source code.
3.2.2 stop a session
public abstract void hangup(int var1)
;
Input: The
channelid
is the ID of the correspondingMediaChannel
created by thereqMediaChannel
method of theMiraProxyBaseImp
class.
3.2.3 notify for no data
public abstract void noMediaNotify(int var1)
Input: The
channelid
is the ID of the correspondingMediaChannel
created by thereqMediaChannel
method of theMiraProxyBaseImp
class.
3.2.4 keyframe request
public abstract void reqKeyFrame(int var1)
;
Input: The channelid is the ID of the corresponding
MediaChannel
created by thereqMediaChannel
method of theMiraProxyBaseImp
class.
3.3 Interface in the MediaChannel class
When the session is established successfully, the protocol stack will call the corresponding interface in the MediaChannel
class to call back the data or get the status. The following interfaces need to be implemented in the MediaChannel
subclass. Customers need to implement the following interfaces according to their own actual situations. The important interfaces in the MediaChannel
subclass are as follows, and the miracast receiver needs to focus on the following interfaces.
3.3.1 Set window handle
public void setSurface(Surface surface);
Configure the window handle for MiraRenderChannel
output. The surface is obtained by the player view created by the user. Refer to the implementation in demo.
3.3.2 audio data callback
public void onAudioFrame(byte[] buffer, int len, long ts)
; JNI returns audio data. Audio is data in PCM format. User needs to process audio data. For specific implementation, please refer to demo source code in SDK. Buffer is the audio data array, len is the data length, ts is the time stamp.
3.3.3 video data callback
public void onVideoFrame(byte[] buffer, int len, long ts);
Mirror video data interface, which spits out H264 video data, the user needs to decode and play. Buffer
is the audio data array, len
is the data length, ts
is the time stamp. For specific implementation, please refer to demo source code in SDK.
3.3.4 Bound buffer pool size
public ComBuffer reqBuffer(int size)
3.3.5 open MediaChannel
public abstract boolean open()
; User is required to implement specific the MediaChannel
functions for ‘open’. Refer to the implementation in demo.
3.3.6 close MediaChannel
public abstract void close()
; User is required to implement specific the MediaChannel
functions for ‘close’. Refer to the implementation in demo.
3.3.7 Set up audio information
public void notifyTrackCodecInfo(int trackId, AudioTrackInfo audioTrackInfo);
Set up audio information through AudioTrackInfo
.
4. Demo Explain
In demo, MiraProxyModuleImp
implements interfaces of the MiraProxyBaseImp
class and the methods of the reqMediaChannel
class. In reqMediaChannel
, the implementation of the MediaChannel
corresponding to the session type is created, the view related to playback is started, and the surface for playback is created. MiraRenderChannel
implements the relevant functional interfaces in the MediaChannel
class.
5. How to use SDK for customers
Import
aar
, create a new libs directory in the app directory and putaar
files in this directory, then add the following code above and inside dependencies inbuild.gradle
(app,Refer to demo.):
repositories{ flatDir { dirs 'libs '} },
compile (name: 'bj_miracast_lib-1.0.19-release.aar', ext: 'aar'),
compile (name: 'cast_base_lib-1.0.20-release.aar', ext: 'aar')
To implement the interface of the
MiraProxyBaseImp
class, refer toMiraProxyModuleImp.java
. The interface of thereqMediaChannel
class returns an instance of the customized implementation class of theMediaChannel
class and starts the playback interface.Implement relevant functional interfaces of the
MediaChannel
class. Refer toMiraRenderChannel
To realize its own playback interface, refer to the implementation of view in the view package, and set the surface of the playback interface to the
MediaChannel
class.
About BiJie
BiJie is a high-tech R&D enterprise focusing on the wireless display and interactive. It is committed to provide leading wireless display and interactive product and solution of smart meeting room and classroom.
BiJie can supply Wireless Display SDK such as Miracast, WiDi, Airplay, DLNA, Google Cast and BJCast.
At present, BiJie Networks has established cooperation with hundreds of well-known companies and institutions in the world, including Haier(SEHK: 1169) , JD.com(NASDAQ: JD) , 58.com(NYSE:WUBA), PetroChina(NYSE: PTR), MCC, Accenture(NYSE: ACN), Osram(FWB: OSR) and many other industry-level head enterprises.