I am trying to record primary and secondary monitor screens into two separate files using below code.
const uint32_t MAX_DISPLAY = 2;
CGDirectDisplayID displays[MAX_DISPLAY] = {0};
CGGetActiveDisplayList(MAX_DISPLAY, displays, &m_nDisplays);
NSString* dest_file[2] = {0};
NSURL* dest_path[2] = {0};
AVCaptureConnection *CaptureConnection[2] = {0};
NSDictionary *videoCleanApertureSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                            @2048, AVVideoCleanApertureWidthKey,
                                            @1152, AVVideoCleanApertureHeightKey,
                                            @0, AVVideoCleanApertureHorizontalOffsetKey,
                                            @0, AVVideoCleanApertureVerticalOffsetKey,
                                            nil];
NSDictionary *videoAspectRatioSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                          @3,AVVideoPixelAspectRatioHorizontalSpacingKey,
                                          @3,AVVideoPixelAspectRatioVerticalSpacingKey,
                                          nil];
 NSNumber* bitsPerSecond = [NSNumber numberWithDouble:1024*1000];
NSDictionary *codecSettings =  [NSDictionary dictionaryWithObjectsAndKeys:
                               bitsPerSecond, AVVideoAverageBitRateKey,
                               videoCleanApertureSettings, AVVideoCleanApertureKey,
                               videoAspectRatioSettings, AVVideoPixelAspectRatioKey,
                               nil];
NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                               AVVideoCodecH264, AVVideoCodecKey,
                               codecSettings,AVVideoCompressionPropertiesKey,
                               AVVideoScalingModeResize,AVVideoScalingModeKey,
                               @2048, AVVideoWidthKey,
                               @1152, AVVideoHeightKey,
                               nil];
for( int nIdx = 0; nIdx < m_nDisplays; ++nIdx )
{
    m_session[nIdx] = [[AVCaptureSession alloc] init];
    dest_file[nIdx] = [NSString stringWithFormat:@"%@_%d.MOV",destination_path,nIdx];
    dest_path[nIdx] = [NSURL fileURLWithPath: dest_file[nIdx] ];
    // Create a ScreenInput with the display and add it to the session
    m_movie_file_input[nIdx] = [[[AVCaptureScreenInput alloc] initWithDisplayID:displays[nIdx]] autorelease];    
    [m_movie_file_input[nIdx] removesDuplicateFrames ];
    if ([m_session[nIdx] canAddInput:m_movie_file_input[nIdx]])
    {
        [m_session[nIdx] addInput:m_movie_file_input[nIdx]];
    }
    // Create a MovieFileOutput and add it to the session
    m_movie_file_output[nIdx] = [[[AVCaptureMovieFileOutput alloc] init] autorelease];
    if ([m_session[nIdx] canAddOutput:m_movie_file_output[nIdx]])
    {
        [m_session[nIdx] addOutput:m_movie_file_output[nIdx]];
    }
    CaptureConnection[nIdx] = [m_movie_file_output[nIdx] connectionWithMediaType:AVMediaTypeVideo];
    [m_movie_file_output[nIdx] setOutputSettings : videoSettings forConnection : CaptureConnection[nIdx]];
    // Start running the session
    [m_session[nIdx] startRunning];
    [m_movie_file_output[nIdx] startRecordingToOutputFileURL:dest_path[nIdx]    recordingDelegate:self];
}
I am getting both the screens saved into two separate files. But while calling startRecordingToOutputFileURL API for the secondary monitor i.e. for the second pass of loop, I am getting an error as shown below :
VTCompressionSessionCreate signalled err=-8973 (err) (VTVideoEncoderStartSession failed) at /SourceCache/CoreMedia_frameworks/CoreMedia-1562.19/Sources/VideoToolbox/VTCompressionSession.c line 897
Also compression parameters(bitrate) are not setting properly for Secondary monitor, it takes some different values other than the one I have specified in the program.
Can somebody please help me on this ? Also please let me know this is the proper way of doing this.
Thanks in Advance
George