HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – AVAssetWriterInput – 黑屏,46小时大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试AVCaptureSession并编码为mp4.看起来这应该是直截了当的,我正在尝试编码单个960×540视频流;出于此问题的目的,我并不担心音频问题.

当我运行以下代码并使用Xcode从文档容器中取出out2.mp4时,我会在快速时间内获得黑屏,持续时间为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

为什么我不能在此场景中将示例缓冲区附加到AVAssetWriterInput?

var videoInput: AVAssetWriterInput?
var assetWriter: AVAssetWriter?

override func viewDidLoad() {
    super.viewDidLoad()
    self.startStream()
    NSTimer.scheduledTimerWithTimeInterval(5,target: self,SELEctor: "swapSegment",userInfo: nil,repeats: falsE)
}

func swapSegment() {
    assetWriter?.finishWriTingWithCompletionHandler(){
        print("File written")
    }
    videoInput = nil
}

func pathForOutput() -> String {
    let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory,inDomains: .UserDomainMask)
    if let documentDirectory: NSURL = urls.first {
        let fileUrl = documentDirectory.URLByAppendingPathComponent("out1.mp4")
        return fileUrl.path!
    }
    return ""
}

func startStream() {
    assetWriter = try! AVAssetWriter(URL: NSURL(fileURLWithPath: self.pathForOutput()),fileType: AVFileTypeMPEG4)

    let videoSetTings: [String: AnyObject] = [AVVideoCodecKey: AVVideoCodecH264,AVVideoWidthKey: 960,AVVideoHeightKey: 540]
    videoInput = AVAssetWriterInput(mediaType: AVMediaTypeVideo,outputSetTings: videoSetTings)
    videoInput!.expectsMediaDataInRealTime = true
    assetWriter?.addInput(videoInput!)
    assetWriter!.startWriTing()
    assetWriter!.startSessionAtsourceTime(kCMTimeZero)

    let videoHelper = VideoHelper()
    videoHelper.delegate = self
    videoHelper.startSession()
}

func captureOutput(captureOutput: AVCaptureOutput!,didOutputSampleBuffer sampleBuffer: CMSampleBufferRef,fromConnection connection: AVCaptureConnection!) {
    if let videoOutput = captureOutput as? AVCaptureVideoDataOutput {
        videoInput?.appendSampleBuffer(sampleBuffer)
    }
}

解决方法

也许您的演示时间与您的sourceTime(kCMTimeZero)无关.您可以使用第一个缓冲区演示时间戳作为源时间.

附:也许46小时大约是你的设备正常运行时间

@H_696_25@

大佬总结

以上是大佬教程为你收集整理的ios – AVAssetWriterInput – 黑屏,46小时全部内容,希望文章能够帮你解决ios – AVAssetWriterInput – 黑屏,46小时所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。