2016-11-16 18 views
1

我想从iOS设备发送外部视频。 这个视频正在从直播接收:RTSP服务器hls url(不是从iPhone摄像头)。如何从iOS设备(而不是自己的相机)流式传输(RTMP)视频

目前,我可以(内部使用CameraSourceMicSource)使用VideoCoreiPhone流我的相机,视频,但现在,视频我要流来自一个URL。类似于Periscope streaming video from GoPro Cam

问题1:我不知道如何从一个RTSP URL的音频和视频提取

问题2:我不知道如何从这种提取视频创建CameraSourceØMicSource和音频。

你知道哪里可以找到一个例子吗?或者你能帮助我解决这个技术难题吗?

回答

1

我发现的第一个问题第一种方法:

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;  
    }]; 

然后创建CADisplayLink的回调,这将回调displayPixelBuffer:在每一个垂直同步。

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只有ATM,我不是很好用C++编程来调整源,所以如果你可以帮助这里吗? 这是我采取的参考:https://github.com/kciter/FBLiveAPISample-iOS – AJit

相关问题