相关疑难解决方法(0)

在播放iOS时从HLS流(视频)中提取/录制音频

我正在使用AVPlayer播放HLS流.而且我还需要在用户按下记录按钮时记录这些流.我使用的方法是分别录制音频和视频,然后在最后合并这些文件以制作最终视频.并且它对远程mp4文件很成功.

但是现在对于HLS(.m3u8)文件,我能够使用AVAssetWriter录制视频,但是录音有问题.

我正在使用MTAudioProccessingTap处理原始音频数据并将其写入文件.我跟着这篇文章.我能够录制远程mp4音频,但它无法使用HLS流.最初我无法使用AVAssetTrack*audioTrack = [asset tracksWithMediaType:AVMediaTypeAudio] [0]从流中提取音轨.

但我能够使用KVO提取audioTracks来初始化MTAudioProcessingTap.

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
AVPlayer *player = (AVPlayer*) object;

if (player.status == AVPlayerStatusReadyToPlay)
{
    NSLog(@"Ready to play");
    self.previousAudioTrackID = 0;


        __weak typeof (self) weakself = self;

        timeObserverForTrack = [player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1, 100) queue:nil usingBlock:^(CMTime time)
                {

                    @try {

                            for(AVPlayerItemTrack* track in [weakself.avPlayer.currentItem tracks]) {
                                if([track.assetTrack.mediaType isEqualToString:AVMediaTypeAudio])
                                    weakself.currentAudioPlayerItemTrack = track;

                            }

                            AVAssetTrack* audioAssetTrack = weakself.currentAudioPlayerItemTrack.assetTrack;


                            weakself.currentAudioTrackID = audioAssetTrack.trackID;

                            if(weakself.previousAudioTrackID != weakself.currentAudioTrackID) {

                                NSLog(@":::::::::::::::::::::::::: Audio track changed : %d",weakself.currentAudioTrackID);
                                weakself.previousAudioTrackID …
Run Code Online (Sandbox Code Playgroud)

recording http-live-streaming ios m3u8

10
推荐指数
1
解决办法
2万
查看次数

标签 统计

http-live-streaming ×1

ios ×1

m3u8 ×1

recording ×1