如何通过绝对路径从 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”,因为有些视频使用的是真实 URL file:///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 中获取当前工作目录的绝对路径?

如何通过Java代码获取tomcat服务器的绝对路径

如何从互联网下载音频/视频文件并存储在 iPhone 应用程序中?

浅谈nodejs文件操作中的相对路径问题

如何通过绝对路径访问我的应用程序文件 - windows phone - Phonegap/Cordova

phonegap iphone:文档目录绝对路径