如何将视频从iOS设备发送到服务器?

如何将视频从iOS设备发送到服务器?,ios,tabs,http-live-streaming,Ios,Tabs,Http Live Streaming,我必须将视频从iPhone实时发送到服务器。我创建捕获会话并使用AVCaptureMovieFileOutput NSError*error=nil captureSession = [[AVCaptureSession alloc] init]; // find, attach devices AVCaptureDevice *muxedDevice = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeMuxed]; if (mu

我必须将视频从iPhone实时发送到服务器。我创建捕获会话并使用AVCaptureMovieFileOutput

NSError*error=nil

captureSession = [[AVCaptureSession alloc] init];
// find, attach devices
AVCaptureDevice *muxedDevice = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeMuxed];
if (muxedDevice) {
    NSLog (@"got muxedDevice");
    AVCaptureDeviceInput *muxedInput = [AVCaptureDeviceInput deviceInputWithDevice:muxedDevice
                                                                             error:&error];
    if (muxedInput) {
        [captureSession addInput:muxedInput];
    }
} else {
    AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeVideo];
    if (videoDevice) {
        NSLog (@"got videoDevice");
        AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice
                                                                                 error:&error];
        if (videoInput) {
            [captureSession addInput: videoInput];
        }
    }
    AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeAudio];
    if (audioDevice) {
        NSLog (@"got audioDevice");
        AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice
                                                                                 error:&error];
        if (audioInput) {
            [captureSession addInput: audioInput];
        }
    }
}

// create a preview layer from the session and add it to UI
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
previewLayer.frame = view.layer.bounds;
previewLayer.videoGravity = AVLayerVideoGravityResizeAspect;
previewLayer.orientation = AVCaptureVideoOrientationPortrait;
[view.layer addSublayer:previewLayer];

// create capture file output

captureMovieOutput = [[AVCaptureMovieFileOutput alloc] init];
if (! captureMovieURL) {
    captureMoviePath = [[self getMoviePathWithName:MOVIE_FILE_NAME] retain];
    captureMovieURL = [[NSURL alloc] initFileURLWithPath:captureMoviePath];
}
NSLog (@"recording to %@", captureMovieURL);
[captureSession addOutput:captureMovieOutput];

我使用AVAssetExportSession获取持续时间为10秒的视频

如果导出会话状态已完成,我将向服务器发送视频。但是它非常慢。要获取持续时间为10秒的电影,然后将其发送到服务器需要15秒。如果胶片的大小小于10秒,则不会发生任何变化。
我怎样才能解决这个问题?最好的方法是什么?我怎样才能解决这个问题?服务器上的流式视频有什么更好的用途?

使用ffmpeg对元数据进行编码,可能比AVAssetExportSession更好。但是ffmpeg编码比AVAssetExportSession困难得多

     AVURLAsset *asset = [AVURLAsset URLAssetWithURL:captureMovieURL options:[NSDictionary  dictionaryWithObject:@"YES" forKey:AVURLAssetPreferPreciseDurationAndTimingKey]];

AVMutableComposition *composition = [AVMutableComposition composition];

CMTime endTime;
CMTime duration = CMTimeMake(6000, 600);
if (asset.duration.value - startFragment.value < 6000)
{
    endTime = asset.duration;
}
else
{
    endTime = CMTimeMake(startFragment.value + 6000, 600);        
}
CMTimeRange editRange = CMTimeRangeMake(startFragment, duration);
startFragment = CMTimeMake(endTime.value, 600);
  NSError *editError = nil;
// and add into your composition