Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何通过绝对路径从iPhone上的视频文件中读取流_Ios_Video_Xamarin.forms_Streamreader_Phasset - Fatal编程技术网

Ios 如何通过绝对路径从iPhone上的视频文件中读取流

Ios 如何通过绝对路径从iPhone上的视频文件中读取流,ios,video,xamarin.forms,streamreader,phasset,Ios,Video,Xamarin.forms,Streamreader,Phasset,我在尝试从iPhone上的视频中获取流时遇到了麻烦。这是一个Xamarin.Forms项目 首先,我通过如下方式通过PHAsset.RequestContentEditingInput获得VideoURL PHAsset videoAsset; ... videoAsset.RequestContentEditingInput(new PHContentEditingInputRequestOptions(), (contentEditingInput, dictInfo) =>

我在尝试从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;
var streamReader = new StreamReader(videoURL);
var fileStream = File.Open(videoURL, FileMode.Open);

VideoURL看起来像
file:///var/mobile/Media/DCIM/108APPLE/IMG_8078.MOV

然后我想像这样通过
VideoURL
使用
StreamReader
获取视频流

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;
var streamReader = new StreamReader(videoURL);
var fileStream = File.Open(videoURL, FileMode.Open);
或者使用文件。像这样打开

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;
var streamReader = new StreamReader(videoURL);
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之前,因此无法找到视频文件


所以我的问题是,如何通过视频的绝对路径获取流?谢谢。

我试着使用文件路径,比如

/var/mobile/Media/DCIM/108APPLE/IMG_8078.MOV

i、 e.删除“file://”,然后它就可以工作。

您可以互换使用URL和文件路径-它们是不同的东西。@Jason谢谢提醒。是的,在这种情况下,URL实际上是文件路径。但这并不重要。我把它命名为“VideoURL”,因为有些视频使用的是真实的URL
file:///var/mobile/Media/DCIM/108APPLE/IMG_8078.MOV
不是一个path@Jason哼你说得对。那么我可以通过url获取流吗?或者我可以使用文件路径,比如
/var/mobile/Media/DCIM/108APPLE/IMG_8078.MOV
?我想做的是通过使用blob.UploadFromFileAsync或blob.uploadFromStreamAsync将视频上传到Azure存储为什么不直接使用MediaPlugin?