首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin - iOS视频裁剪

Xamarin - iOS视频裁剪
EN

Stack Overflow用户
提问于 2014-07-18 02:33:47
回答 1查看 531关注 0票数 0

我想知道有没有办法用Xamarin裁剪视频。我似乎找不到任何例子。我尝试查看现有的函数和类,但什么也找不到。

基本上就是制作像Vine和Instagram那样的方形视频。我认为这是通过裁剪视频的其余部分来实现的,而不仅仅是放大。

EN

回答 1

Stack Overflow用户

发布于 2018-05-03 06:11:07

我从一个来源找到了部分代码,我试图添加所有者,但我找不到。解决方案的关键部分是我添加的用于裁剪的部分,它是AVVideoSettingsCompressed中的"VideoCleanAperture“。

代码语言:javascript
复制
                videoUrl = ((AVFoundation.AVUrlAsset)avAsset).Url;
                NSError assetReaderError;
                var assetReader = AVAssetReader.FromAsset(avAsset, out assetReaderError);
                var assetTrack = avAsset.Tracks.First();

                //Height = (System.nint?)avAsset.NaturalSize.Height,
                    //Width = (System.nint?)avAsset.NaturalSize.Width,
               var inputSettings = new AVVideoSettingsUncompressed()
               {
                    Height = (System.nint?)avAsset.NaturalSize.Height,
                    Width = (System.nint?)avAsset.NaturalSize.Width,
               };
               var assetReaderOutput = new AVAssetReaderTrackOutput(assetTrack, settings: inputSettings);
               assetReaderOutput.AlwaysCopiesSampleData = false;

               string tempFile = Path.Combine(Path.GetTempPath(), "CroppedVideo.mp4");
               if (File.Exists(tempFile)) File.Delete(tempFile);
               var url = NSUrl.FromFilename(tempFile);
               NSError assetWriterError;
               var assetWriter = new AVAssetWriter(url, AVFileType.Mpeg4, out assetWriterError);



               var outputSettings = new  AVVideoSettingsCompressed()
               {
                   Height = 300,
                   Width = 300,
                    Codec = AVVideoCodec.H264,
                   CodecSettings = new AVVideoCodecSettings()
                   {
                       AverageBitRate = 1000000, 
                        VideoCleanAperture = new AVVideoCleanApertureSettings(
                            new NSDictionary(
                            AVVideo.CleanApertureWidthKey, new NSNumber(300),
                            AVVideo.CleanApertureHeightKey, new NSNumber(300),
                            AVVideo.CleanApertureVerticalOffsetKey, new NSNumber(10),
                            AVVideo.CleanApertureHorizontalOffsetKey, new NSNumber(10)
                            )
                        )    
                   }, 

                    ScalingMode = AVVideoScalingMode.ResizeAspectFill
               };


                var assetWriterInput = new AVAssetWriterInput(mediaType: AVMediaType.Video, outputSettings: outputSettings);
                assetWriterInput.ExpectsMediaDataInRealTime = false;
               assetWriter.AddInput(assetWriterInput);

               assetWriter.StartWriting();
               assetReader.AddOutput(assetReaderOutput);
               assetReader.StartReading();
               assetWriter.StartSessionAtSourceTime(CoreMedia.CMTime.Zero);

               var mediaInputQueue = new DispatchQueue("mediaInputQueue");
               assetWriterInput.RequestMediaData(mediaInputQueue, () =>
               {
                   while (assetWriterInput.ReadyForMoreMediaData)
                   {
                       var nextBuffer = assetReaderOutput.CopyNextSampleBuffer();
                       if (nextBuffer != null)
                       {
                           assetWriterInput.AppendSampleBuffer(nextBuffer);
                       }
                       else
                       {
                           assetWriterInput.MarkAsFinished();
                           assetWriter.FinishWritingAsync();
                           assetReader.CancelReading();
                           assetReader.Dispose();
                           assetReaderOutput.Dispose();
                           assetWriter.Dispose();
                           assetWriterInput.Dispose();
                           break;
                       }
                   }
               });
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24811029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档