一、什麼是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/zh-hant/n/183331.html
微信掃一掃
支付寶掃一掃