在 Android 中通过 OTG 数据线使用连接的 USB 播放视频?
Play Video using connected USB via OTG cable in Android?
我想问一下有没有应用程序可以让用户通过 OTG 电缆设备将 USB 连接到 Android 并播放其中包含的媒体(特别是视频)。
我做了一个广播接收器来检测连接的USB,我也想阅读内容。我正在使用这个代码片段。
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if(device != null){
//
Log.d("1","DEATTCHED-" + device);
}
}
}
//
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if(device != null){
//
Log.d("1","ATTACHED-" + device);
}
}
else {
PendingIntent mPermissionIntent;
mPermissionIntent = PendingIntent.getBroadcast(MainActivity.this, 0, new Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_ONE_SHOT);
mUsbManager.requestPermission(device, mPermissionIntent);
}
}
}
//
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if(device != null){
//
Log.d("1","PERMISSION-" + device);
}
}
}
}
}
};
我想做这样的申请
有人知道吗?
将视频分成多个子视频可能适合您。
我的建议:与其将完整视频保存在一个临时路径中,不如将该视频分成多个子视频,然后相应地替换 AVPlayer 的 AVPlayerItem 属性。
所以现在功能与视频流一样工作。 :)
您还可以将 AVAssetReader returns 的 CMSampleBuffer 转换为 CGImage,然后转换为 UIImage 并将其显示在 UIImageView 中,以渲染从原始视频文件中提取的帧。
AVFoundation 编程指南中有示例代码展示了如何进行这种转换。
经过多日的研究,我找到了解决方案
我想问一下有没有应用程序可以让用户通过 OTG 电缆设备将 USB 连接到 Android 并播放其中包含的媒体(特别是视频)。
我做了一个广播接收器来检测连接的USB,我也想阅读内容。我正在使用这个代码片段。
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if(device != null){
//
Log.d("1","DEATTCHED-" + device);
}
}
}
//
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if(device != null){
//
Log.d("1","ATTACHED-" + device);
}
}
else {
PendingIntent mPermissionIntent;
mPermissionIntent = PendingIntent.getBroadcast(MainActivity.this, 0, new Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_ONE_SHOT);
mUsbManager.requestPermission(device, mPermissionIntent);
}
}
}
//
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if(device != null){
//
Log.d("1","PERMISSION-" + device);
}
}
}
}
}
};
我想做这样的申请
有人知道吗?
将视频分成多个子视频可能适合您。
我的建议:与其将完整视频保存在一个临时路径中,不如将该视频分成多个子视频,然后相应地替换 AVPlayer 的 AVPlayerItem 属性。
所以现在功能与视频流一样工作。 :)
您还可以将 AVAssetReader returns 的 CMSampleBuffer 转换为 CGImage,然后转换为 UIImage 并将其显示在 UIImageView 中,以渲染从原始视频文件中提取的帧。
AVFoundation 编程指南中有示例代码展示了如何进行这种转换。
经过多日的研究,我找到了解决方案