一、什么是Miracast
Miracast是Wi-Fi联盟提出的一项技术标准,主要用于实现不同设备之间的视频、音频和图像的无线传输。
使用Miracast可以将一个支持Miracast功能的设备中的音视频内容无线地传输到另一个支持Miracast功能的设备中,比如,将手机中的影片在电视上播放,实现无线同屏。
二、Miracast的原理
Miracast使用Wi-Fi Direct技术建立P2P网络,发送端的设备通过H.264压缩技术将音视频数据压缩成一定格式后封装成RTSP规范的数据包,通过Wi-Fi Direct网络传输到接收端设备,接收端设备对其进行解码和播放。
Miracast的传输延时较低,最高可达100毫秒左右,传输距离基本限制于设备之间的Wi-Fi距离和信道质量。
三、Miracast的应用
1、手机到电视的无线投屏
通过在电视上安装支持Miracast功能的接收器,比如小米盒子、Chromecast等,可以将手机中的影片、游戏、图像、音频内容通过Miracast技术无线投射到电视上,实现无线同屏的效果。
public class MiracastActivity extends Activity {
private WifiP2pManager mManager;
private WifiP2pManager.Channel mChannel;
private BroadcastReceiver mReceiver;
private IntentFilter mIntentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), null);
mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this);
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(mReceiver, mIntentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
}
2、游戏直播的应用
将游戏机中的内容通过Miracast技术无线传输到电视或者显示器上,可以达到比传输到手机屏幕上更好的游戏视觉效果,同时也可以进行游戏直播和自己的截屏、录屏等操作。
private void setUpMiracast() {
final Channel channel = getChannel();
if (channel != null) {
final Activity activity = getActivity();
final WifiP2pManager manager = (WifiP2pManager) (activity
.getSystemService(Context.WIFI_P2P_SERVICE));
manager.requestGroupInfo(channel, new WifiP2pManager.GroupInfoListener() {
@Override
public void onGroupInfoAvailable(WifiP2pGroup group) {
if (group == null) {
manager.createGroup(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
showToast("miracast is enable");
}
@Override
public void onFailure(int reason) {
showToast("miracast is failed");
}
});
} else {
showToast("miracast is already enable");
}
}
});
}
}
3、无线投影机的应用
企业中对于演示和会议的需求,可以通过Miracast技术将PPT等文档无线传输到投影仪设备上,实现无线投影的效果,该方式具有方便、快捷的特点。
public class MainActivity extends Activity {
private Button button;
private WifiP2pManager wifiP2pManager;
private WifiP2pManager.Channel channel;
private WifiP2pManager.ActionListener connectListener;
private WifiP2pManager.ActionListener disconnectListener;
private WifiP2pManager.GroupInfoListener groupInfoListener;
private boolean isConnected = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.connect);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isConnected) {
wifiP2pManager.removeGroup(channel, disconnectListener);
isConnected = false;
button.setText("Connect");
} else {
wifiP2pManager.createGroup(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
wifiP2pManager.requestGroupInfo(channel, groupInfoListener);
isConnected = true;
button.setText("Disconnect");
}
@Override
public void onFailure(int reason) {
Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
}
});
}
}
});
wifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
channel = wifiP2pManager.initialize(this, getMainLooper(), null);
connectListener = new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Toast.makeText(MainActivity.this, "Connected", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int reason) {
Toast.makeText(MainActivity.this, "Connection failed", Toast.LENGTH_SHORT).show();
}
};
disconnectListener = new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Toast.makeText(MainActivity.this, "Disconnected", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int reason) {
Toast.makeText(MainActivity.this, "Disconnect failed", Toast.LENGTH_SHORT).show();
}
};
groupInfoListener = new WifiP2pManager.GroupInfoListener() {
@Override
public void onGroupInfoAvailable(WifiP2pGroup group) {
if (group != null && group.isGroupOwner()) {
WifiP2pDevice device = group.getOwner();
if (device != null) {
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = device.deviceAddress;
wifiP2pManager.connect(channel, config, connectListener);
}
}
}
};
}
}
四、Miracast的局限性
由于Miracast本身是基于Wi-Fi Direct技术的,因此Miracast的使用需要在支持Wi-Fi Direct的设备中使用,同时Miracast并不支持同时传输多路音视频流。
另外,由于Miracast使用Wi-Fi Direct技术建立P2P网络,该网络的连接要求设备必须处于同一Wi-Fi网络中,因此在实际使用中存在一定的限制。
五、结语
Miracast技术的出现,使得无线视频、音频的传输变得更加便捷和高效,为用户提供了更加多样化的选择,同时也推动了无线传输技术的不断发展和改进。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/183331.html
微信扫一扫
支付宝扫一扫