如何通过绝对路径从 iPhone 上的视频文件中读取流
Posted
技术标签:
【中文标题】如何通过绝对路径从 iPhone 上的视频文件中读取流【英文标题】:How to read streams from video files on iPhone by their absolute path 【发布时间】:2020-01-22 07:16:49 【问题描述】:我在尝试从 iPhone 上的视频中获取流时卡住了。这是一个Xamarin.Forms
项目。
首先,我得到了PHAsset.RequestContentEditingInput
这样的VideoURL
PHAsset videoAsset;
...
videoAsset.RequestContentEditingInput(new PHContentEditingInputRequestOptions(), (contentEditingInput, dictInfo) =>
if (videoAsset.MediaType == PHAssetMediaType.Video)
AVFoundation.AVUrlAsset avUrlAsset = (AVFoundation.AVUrlAsset)contentEditingInput.AvAsset;
string VideoURL = avUrlAsset.Url.AbsoluteString;
VideoURL 看起来像 file:///var/mobile/Media/DCIM/108APPLE/IMG_8078.MOV
。
然后我想像这样使用StreamReader
获取VideoURL
的视频流
var streamReader = new StreamReader(videoURL);
或者像这样使用 File.Open
var fileStream = File.Open(videoURL, FileMode.Open);
但是这两种方法都会抛出 System.IO.DirectoryNotFoundException 并说
找不到路径/private/var/containers/Bundle/Application/BC860AE6-B358-405D-B2CD-47ECF853F365/test.app/file:/var/mobile/Media/DCIM/108APPLE/IMG_8078.MOV
的一部分。
如您所见,它自动在视频 URL 前添加了我的应用路径,因此找不到视频文件。
所以我的问题是,如何通过视频的绝对路径获取流?谢谢。
【问题讨论】:
您正在交替使用 URL 和文件路径 - 它们是不同的东西。 @Jason 感谢您的提醒。是的,在这种情况下,URL 实际上是文件路径。但这没关系。我将其命名为“VideoURL”,因为有些视频使用的是真实 URLfile:///var/mobile/Media/DCIM/108APPLE/IMG_8078.MOV
不是路径
@Jason Hum...你是对的。那么我可以通过 url 获取流吗?或者我可以使用像/var/mobile/Media/DCIM/108APPLE/IMG_8078.MOV
这样的文件路径吗?我要做的是使用 blob.UploadFromFileAsync 或 blob.UploadFromStreamAsync 将视频上传到 Azure 存储
为什么不直接使用 MediaPlugin?
【参考方案1】:
我尝试使用类似的文件路径
/var/mobile/Media/DCIM/108APPLE/IMG_8078.MOV
即删除“file://”,然后就可以了。
【讨论】:
以上是关于如何通过绝对路径从 iPhone 上的视频文件中读取流的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Objective-C 中获取当前工作目录的绝对路径?
如何从互联网下载音频/视频文件并存储在 iPhone 应用程序中?