2016-11-16 16 views
1

iOSデバイスから外部ビデオを送信したい。 RTSP(ないiPhoneのカメラからの)サーバーまたはHLSのURL: このビデオは、ライブストリーミングから受信されています。iOSデバイスからビデオをストリームする方法(自分のカメラからではなく)

現在、私は(内部CameraSourceMicSourceを使用して)VideoCoreを使用してiPhoneから私のカメラのビデオをストリーミングすることができますが、今、私はストリーミングしたい動画がURLから来ています。 Periscope streaming video from GoPro Camと同様です。

問題1:私はRTSPのURLのオーディオおよびビデオから抽出する方法がわからない

問題2:私は、この抽出されたビデオからMicSource O CameraSourceを作成する方法がわからないと、オーディオ。

あなたはどこの例を見つけることを知っていますかあなたは私には、この技術的な課題に助けることができますか?

答えて

1

私は、最初の問題のための最初のアプローチを見つけた:すべてのVSYNCで:

AVPlayerItem *item = [AVPlayerItem playerItemWithURL:URL]; 
    AVAsset *asset = [item asset]; 

    [asset loadValuesAsynchronouslyForKeys:@[@"tracks"] completionHandler:^{ 
     if ([asset statusOfValueForKey:@"tracks" error:nil] == AVKeyValueStatusLoaded) { 
      NSArray *videoTracks = [asset tracksWithMediaType:AVMediaTypeVideo]; 
      NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; 

      //VIDEO 
      //videoOutput is a AVPlayerItemVideoOutput * property 
      [item addOutput:self.videoOutput]; 

      //AUDIO 
      AVMutableAudioMixInputParameters *inputParams = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:[audioTracks objectAtIndex:0]]; 
      MTAudioProcessingTapCallbacks callbacks;    
      callbacks.version = kMTAudioProcessingTapCallbacksVersion_0; 
      callbacks.clientInfo = (__bridge void *)self, 
      callbacks.init = tap_InitCallback; 
      callbacks.finalize = tap_FinalizeCallback; 
      callbacks.prepare = tap_PrepareCallback; 
      callbacks.unprepare = tap_UnprepareCallback; 
      callbacks.process = tap_ProcessCallback;    
      MTAudioProcessingTapRef tap; 
      OSStatus err = MTAudioProcessingTapCreate(kCFAllocatorDefault, &callbacks, 
                 kMTAudioProcessingTapCreationFlag_PostEffects, &tap);   
      inputParams.audioTapProcessor = tap; 
      AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; 
      audioMix.inputParameters = @[inputParams]; 
      item.audioMix = audioMix;  
    }]; 

はその後displayPixelBufferをコールバックしますCADisplayLinkとコールバックを作成します。

self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkCallback:)]; 
    [[self displayLink] addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    [[self displayLink] setPaused:YES]; 

と、この方法でpixelBufferを取得し、オーディオ出力 に送る、AURenderCallbackStructを使用してコールバックを準備中で同様のタスクを実行します。

+0

ちょっと@Bisca RTMP接続を行う方法も詳細なコードはありますか?私はAssetsビデオからFacebookに生きようとしています。 – AJit

+0

@AJit私は例を持っていない...あなたはVideoCore(https://github.com/jgh-/VideoCore-Inactive)またはLF(https://github.com/shogo4405/HaishinKit.swiftを使用して試すことができます)またはこれを行うための別の実装で、このpixelBufferをソースとして使用する – Bisca

+0

すばやく再生するために@Biscaをお試しいただきありがとうございます。私はすでにVideoCoreを実装していますが、CameraSourceのみをサポートしています。何とかここで助けてくれる? これは私が取ったリファレンスです:https://github.com/kciter/FBLiveAPISample-iOS – AJit

関連する問題