Near Real Time Video Upload from iPhone

后端 未结 2 615
野性不改
野性不改 2021-02-06 14:34

I am trying to find the best way to upload video from an iPhone (iOS5) as fast as possible - real time if possible.

I found this previous question and answer very useful

2条回答
  •  [愿得一人]
    2021-02-06 14:57

    2) Here's how I chunked the files without dropping too many frames:

    - (void) segmentRecording:(NSTimer*)timer {
        AVAssetWriter *tempAssetWriter = self.assetWriter;
        AVAssetWriterInput *tempAudioEncoder = self.audioEncoder;
        AVAssetWriterInput *tempVideoEncoder = self.videoEncoder;
        self.assetWriter = queuedAssetWriter;
        self.audioEncoder = queuedAudioEncoder;
        self.videoEncoder = queuedVideoEncoder;
        //NSLog(@"Switching encoders");
    
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
            [tempAudioEncoder markAsFinished];
            [tempVideoEncoder markAsFinished];
            if (tempAssetWriter.status == AVAssetWriterStatusWriting) {
                if(![tempAssetWriter finishWriting]) {
                    [self showError:[tempAssetWriter error]];
                }
            }
            if (self.readyToRecordAudio && self.readyToRecordVideo) {
                NSError *error = nil;
                self.queuedAssetWriter = [[AVAssetWriter alloc] initWithURL:[self newMovieURL] fileType:(NSString *)kUTTypeMPEG4 error:&error];
                if (error) {
                    [self showError:error];
                }
                self.queuedVideoEncoder = [self setupVideoEncoderWithAssetWriter:self.queuedAssetWriter formatDescription:videoFormatDescription bitsPerSecond:videoBPS];
                self.queuedAudioEncoder = [self setupAudioEncoderWithAssetWriter:self.queuedAssetWriter formatDescription:audioFormatDescription bitsPerSecond:audioBPS];
                //NSLog(@"Encoder switch finished");
    
            }
        });
    }
    

    https://github.com/chrisballinger/FFmpeg-iOS-Encoder/blob/master/AVSegmentingAppleEncoder.m

    3) Here's a script to concatenate the files on the server

    import glob
    import os
    run = os.system  # convenience alias
    
    
    files = glob.glob('*.mp4')
    out_files = []
    
    n = 0
    for file in files:
        out_file = "out-{0}.ts".format(n)
        out_files.append(out_file)
        full_command = "ffmpeg -i {0} -f mpegts -vcodec copy -acodec copy -vbsf h264_mp4toannexb {1}".format(file, out_file)
        run(full_command)
        n += 1
    
    out_file_concat = ''
    for out_file in out_files:
        out_file_concat += ' {0} '.format(out_file)
    
    cat_command = 'cat {0} > full.ts'.format(out_file_concat)
    print cat_command
    run(cat_command)
    run("ffmpeg -i full.ts -f mp4 -vcodec copy -acodec copy -absf aac_adtstoasc full.mp4")
    

    https://github.com/chrisballinger/FFmpeg-iOS-Encoder/blob/master/concat-mp4.py

提交回复
热议问题