标签: avassetwriter

来自OpenGL的CMSampleBuffer用于AVAssestWritter的视频输出

我需要为OpenGL框架获取CMSampleBuffer.我正在使用这个:

int s = 1;
        UIScreen * screen = [UIScreen mainScreen];
        if ([screen respondsToSelector:@selector(scale)]){
            s = (int)[screen scale];
        }
        const int w = viewController.view.frame.size.width/2;
        const int h = viewController.view.frame.size.height/2;
        const NSInteger my_data_length = 4*w*h*s*s;
        // allocate array and read pixels into it.
        GLubyte * buffer = malloc(my_data_length);
        glReadPixels(0, 0, w*s, h*s, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
        // gl renders "upside down" so swap top to bottom into new array.
        GLubyte * buffer2 = malloc(my_data_length);
        for(int y = 0; y < h*s; y++){ …
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es objective-c avassetwriter core-motion

5
推荐指数
1
解决办法
4816
查看次数

在将多个帧发送到AVAssetWriter之前,在内存中保留多个帧

我需要从内存中的captureSession中保存一些视频帧,并在"某事"发生时将它们写入文件.

此解决方案类似,我使用此代码将帧放入NSMutableArray:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection*)connection
{       
    //...
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    uint8 *baseAddress = (uint8*)CVPixelBufferGetBaseAddress(imageBuffer);
    NSData *rawFrame = [[NSData alloc] initWithBytes:(void*)baseAddress length:(height * bytesPerRow)];
    [m_frameDataArray addObject:rawFrame];
    [rawFrame release];
    //...
}
Run Code Online (Sandbox Code Playgroud)

这就是写视频文件:

-(void)writeFramesToFile
{
    //...
    NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSNumber numberWithInt:640], AVVideoWidthKey,
                                    [NSNumber numberWithInt:480], AVVideoHeightKey,
                                    AVVideoCodecH264, AVVideoCodecKey,
                                    nil ];
    AVAssetWriterInput *bufferAssetWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:outputSettings];
    AVAssetWriter *bufferAssetWriter = [[AVAssetWriter alloc]initWithURL:pathURL fileType:AVFileTypeQuickTimeMovie error:&error];
    [bufferAssetWriter addInput:bufferAssetWriterInput];

    [bufferAssetWriter startWriting];
    [bufferAssetWriter startSessionAtSourceTime:startTime];
    for (NSInteger i = 1; i < m_frameDataArray.count; …
Run Code Online (Sandbox Code Playgroud)

iphone avfoundation avcapturesession avassetwriter

5
推荐指数
1
解决办法
3964
查看次数

使用AVFoundation修改音频元数据

我正在开发一个需要修改音频文件元数据的应用程序.我玩过Apple的官方演示AVReaderWriterOSX.我试图设置的元数据AVAssetWriterInputAVAssetWriter,但我仍然不能使它工作,将元数据写入到输出文件.有没有人有这方面的例子?

先感谢您.

cocoa metadata objective-c avfoundation avassetwriter

5
推荐指数
1
解决办法
1245
查看次数

GPUImageMovieWriter - 崩溃时"状态为2时无法调用方法"

试图开始使用真正伟大的GPUImage框架,由Brad Larson亲切地分享,但有一个问题.

运行SimpleVideoFileFilter示例时,它总是在完成时崩溃并出现以下错误:

[AVAssetWriterInput markAsFinished]状态为2时无法调用方法

有谁知道如何纠正这个?

在模拟器中运行时也看不到视频,它对模拟器不起作用吗?

运行iOS 6.1和Xcode 4.6

谢谢!

我注意到finishRecordingWithCompletionHandler被调用了两次,它在第二次调用时崩溃了

ios avassetwriter gpuimage

5
推荐指数
0
解决办法
2187
查看次数

视频压缩ios:使用AVAssetWriter减小视频的大小

我成功地将AVFoundation Framework的AVCaptureVideoPreviewLayer捕获的一系列图像编码为使用AVAssetWriter和AVAssetWriterInput的视频.

但是视频的大小太大了,在这种情况下,你们中的任何人都可以向我推荐一个教程或者至少是直接的我,或者给我正确的视频压缩视频输出设置.

我正在使用以下VideoOutputSetting.

videoOutputSettings = @{
                          AVVideoCodecKey: AVVideoCodecH264,
                          AVVideoWidthKey: [NSNumber numberWithInt:width],
                          AVVideoHeightKey: [NSNumber numberWithInt:height],
                          AVVideoCompressionPropertiesKey: @{
                                  AVVideoAverageBitRateKey: [NSNumber numberWithInt:bitrate],
                                  AVVideoMaxKeyFrameIntervalKey: @(150),
                                  AVVideoProfileLevelKey: AVVideoProfileLevelH264BaselineAutoLevel,
                                  AVVideoAllowFrameReorderingKey: @NO,
                                  AVVideoH264EntropyModeKey: AVVideoH264EntropyModeCAVLC,
                                  AVVideoExpectedSourceFrameRateKey: @(30),
                                  AVVideoAverageNonDroppableFrameRateKey: @(30)
                                  }
                          };
    videoWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:videoSettings];
    _videoWriterInput.expectsMediaDataInRealTime = YES;
Run Code Online (Sandbox Code Playgroud)

compression video reduce ios avassetwriter

5
推荐指数
0
解决办法
3596
查看次数

AVAssetWriterInput - 黑屏,46小时

我正在尝试AVCaptureSession并编码为mp4.看起来这应该是直截了当的,我正在尝试编码单个960x540视频流; 出于此问题的目的,我并不担心音频问题.

当我运行以下代码并out2.mp4使用Xcode 抓取文档容器时,我会在快速时间内获得黑屏,持续时间为46小时.至少分辨率看起来正确.这是从的输出ffmpeg -i out2.mp4

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out2.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp41mp42isom
    creation_time   : 2015-11-18 01:25:55
  Duration: 46:43:04.21, start: 168178.671667, bitrate: 0 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt709/bt709), 960x540, 1860 kb/s, 27.65 fps, 29.97 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      creation_time   : 2015-11-18 01:25:55
      handler_name    : Core Media Video
Run Code Online (Sandbox Code Playgroud)

为什么我不能AVAssetWriterInput在此方案中添加样本缓冲区?

var videoInput: AVAssetWriterInput?
var assetWriter: AVAssetWriter?

override func viewDidLoad() {
    super.viewDidLoad() …
Run Code Online (Sandbox Code Playgroud)

avfoundation ios avassetwriter avasset swift

5
推荐指数
1
解决办法
415
查看次数

AVAssetWriter连续段

我想录制一系列片段,通过视频播放器一起播放或ffmpeg -f concat无缝播放.

在任何一种情况下,我都会在每个分段连接点处得到非常明显的音频打嗝.

我目前的策略是维持2个AssetWriter实例.在每个截止点,我开始一个新的作家,等到它准备好,然后开始给它样品.当视频和音频样本在特定时间点完成时,我关闭最后一个作者.

如何修改此项以获得连续剪辑录制?根本原因是什么问题?

import Foundation
import UIKit
import AVFoundation

class StreamController: UIViewController, AVCaptureAudioDataOutputSampleBufferDelegate, AVCaptureVideoDataOutputSampleBufferDelegate {
    @IBOutlet weak var previewView: UIView!

    var closingVideoInput: AVAssetWriterInput?
    var closingAudioInput: AVAssetWriterInput?
    var closingAssetWriter: AVAssetWriter?

    var currentVideoInput: AVAssetWriterInput?
    var currentAudioInput: AVAssetWriterInput?
    var currentAssetWriter: AVAssetWriter?

    var nextVideoInput: AVAssetWriterInput?
    var nextAudioInput: AVAssetWriterInput?
    var nextAssetWriter: AVAssetWriter?

    var previewLayer: AVCaptureVideoPreviewLayer?
    var videoHelper: VideoHelper?

    var startTime: NSTimeInterval = 0
    override func viewDidLoad() {
        super.viewDidLoad()
        startTime = NSDate().timeIntervalSince1970
        createSegmentWriter()
        videoHelper = VideoHelper()
        videoHelper!.delegate = self …
Run Code Online (Sandbox Code Playgroud)

avfoundation avassetwriter swift

5
推荐指数
1
解决办法
1326
查看次数

AVAssetWriter-如何获取已写入内容的字节数?

我正在编写一个MOV文件,其中提供了许多CMSampleBuffers传递给AVAssetWriterInput对象。进行此操作时,我正在跟踪CMSampleBuffers中压缩数据的字节大小,以写入系统上的日志文件。我唯一缺少的是MOV标头大小。

我的数量和保存的文件大小之间的差异通常是大约2000字节左右的数据。我不知道如何从AVAssetWriter写入文件系统的确切大小。

现在,我可以在关闭MOV文件后找到文件大小,但是由于某种原因,我在bash shell中查看文件时,NSFileSystemManager“ attributesOfItemAtPath”“ NSFileSize”从未匹配字节数。

欢迎提出建议!

鲍勃

filesize avassetwriter avasset

5
推荐指数
0
解决办法
131
查看次数

制作一个真正慢动作的慢动作视频

我正在创建我的这个应用程序,并以120和240 fps拍摄视频.

当我在Mac上观看这些视频时,我会在时间轴下方看到这些标记.

在此输入图像描述

这些标记是可编辑的,代表慢动作区域.因此,视频以正常帧速率开始,以慢动作进入并在结束时返回正常帧速率.iOS没有把那些标记放在那里.在那种情况下,我想知道是否有办法删除它们,使视频完全慢动作.

我只是AVAssetWriter正常初始化,就像我对视频非慢动作一样.

此外,我注意到这些"慢动作"视频并不是真正的慢动作,但它们是慢动作的"配方",只能在使用QuickTime X的iOS设备和Mac上正常播放.甚至QuickTime 7都没有正确播放它们.

无论如何要使这个东西成为可以在任何玩家,任何计算机上播放的真正的慢动作?

avfoundation ios avassetwriter avassetwriterinput

5
推荐指数
1
解决办法
454
查看次数

使用AVAssetWriter录制视频:第一帧是黑色的

我正在录制视频(用户也可以只切换到音频)AVAssetWriter.我在应用程序启动时开始录制.但是第一帧是黑色(或非常暗).当我从音频切换到视频时也会发生这种情况.感觉就像AVAssetWriter和/或AVAssetWriterInput尚未准备好记录.我怎么能避免这个?

我不知道这是否有用,但我也用a GLKView来显示视频.

func start_new_record(){
    do{
        try self.file_writer=AVAssetWriter(url: self.file_url!, fileType: AVFileTypeMPEG4)
        if video_on{
            if file_writer.canAdd(video_writer){
                file_writer.add(video_writer)
            }
        }
        if file_writer.canAdd(audio_writer){
            file_writer.add(audio_writer)
        }
    }catch let e as NSError{
        print(e)
    }
}

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!){
    guard is_recording else{
        return
    }

    guard CMSampleBufferDataIsReady(sampleBuffer) else{
        print("data not ready")
        return
    }

    guard let w=file_writer else{
        print("video writer nil")
        return
    }

    if w.status == .unknown && start_recording_time==nil{
        if (video_on && …
Run Code Online (Sandbox Code Playgroud)

ios avassetwriter swift avassetwriterinput

5
推荐指数
2
解决办法
1295
查看次数