gpt4 book ai didi

ios - 如何从 iOS 设备(而不是它自己的相机)流式传输 (RTMP) 视频

转载 作者:行者123 更新时间:2023-11-29 11:52:22 26 4
gpt4 key购买 nike

我想从我的 iOS 设备发送外部视频。此视频是从实时流接收的:RTSP 服务器HLS url(不是来自 iPhone 摄像头)。

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

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

问题 2:我不知道如何从这个提取的视频和音频创建 CameraSourceMicSource

您知道在哪里可以找到示例吗?或者您能帮我解决这个技术难题吗?

最佳答案

我找到了第一个问题的第一种方法:

  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 在准备回调中执行类似的任务。

关于ios - 如何从 iOS 设备(而不是它自己的相机)流式传输 (RTMP) 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40629948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com