1
私はXamarin(iOS)でビデオ(アップロード用)を圧縮したいと思っています。 AVAssetWriterクラスについて知りました。解像度、ビットレートなどを設定できました。 どうやって使用しますか?どの他のクラスですか? 既に気づいているかもしれませんが、私は非常に新しいアプリ開発に取り組んでいます。Xamarinビデオサイズを小さくする
私はXamarin(iOS)でビデオ(アップロード用)を圧縮したいと思っています。 AVAssetWriterクラスについて知りました。解像度、ビットレートなどを設定できました。 どうやって使用しますか?どの他のクラスですか? 既に気づいているかもしれませんが、私は非常に新しいアプリ開発に取り組んでいます。Xamarinビデオサイズを小さくする
ここ再サンプル及び/又はトランスビデオにAVAssetWriterを供給するAVAssetReaderを使用したサンプルです。
この例では、アプリケーションバンドル(BundleResource)に含まれ、 "NewVideo.mp4"という名前の "tmp"ディレクトリに1Mbpsで300x300のサイズで保存された "Pool.mp4"という名前のビデオを撮影しています元のファイルサイズを〜50%縮小します)
:戻り値もエラーコードもチェックされておらず、それは実装者に残されています。
var asset = AVAsset.FromUrl(NSUrl.FromFilename("Pool.mp4"));
NSError assetReaderError;
var assetReader = AVAssetReader.FromAsset(asset, out assetReaderError);
var assetTrack = asset.Tracks.First();
var inputSettings = new AVVideoSettingsUncompressed()
{
Height = 300,
Width = 300,
};
var assetReaderOutput = new AVAssetReaderTrackOutput(assetTrack, settings: inputSettings);
assetReaderOutput.AlwaysCopiesSampleData = false;
string tempFile = Path.Combine(Path.GetTempPath(), "NewVideo.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
}
};
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;
}
}
});
ありがとうございました!やってみます! – Reaper