Ich spiele HLS-Streams mit AVPlayer. Und ich muss diese Streams auch aufnehmen, wenn der Benutzer die Aufnahmetaste drückt. Der Ansatz, den ich verwende, besteht darin, Audio und Video getrennt aufzuzeichnen, und am Ende diese Dateien zusammenzuführen, um das endgültige Video zu erstellen. Und es ist erfolgreich mit Remote-MP4-Dateien.Extrahieren/Aufzeichnen von Audio aus HLS Stream (Video) während der Wiedergabe von iOS
Aber jetzt für die HLS (.m3u8) Dateien kann ich das Video mit AVAssetWriter aufnehmen, aber Probleme mit der Audioaufnahme haben.
Ich verwende MTAudioProccessingTap, um die rohen Audiodaten zu verarbeiten und in eine Datei zu schreiben. Ich folgte this Artikel. Ich bin in der Lage, Remote MP4 Audio aufzunehmen, aber es funktioniert nicht mit HLS-Streams. Anfangs konnte ich die Audiotracks mit AVAssetTrack * audioTrack = [Inhalt tracksWithMediaType: AVMediaTypeAudio] [0] nicht aus dem Stream extrahieren;
Aber ich war in der Lage, die audioTracks mit KVO zu extrahieren, um die MTAudioProcessingTap zu initialisieren.
Ich habe auch verfolgen TrackID zu überprüfen, ob die Spur geändert wird.
So initialisiere ich die MTAudioProcessingTap.
-(void)beginRecordingAudioFromTrack:(AVAssetTrack *)audioTrack{
// Configure an MTAudioProcessingTap to handle things.
MTAudioProcessingTapRef tap;
MTAudioProcessingTapCallbacks callbacks;
callbacks.version = kMTAudioProcessingTapCallbacksVersion_0;
callbacks.clientInfo = (__bridge void *)(self);
callbacks.init = init;
callbacks.prepare = prepare;
callbacks.process = process;
callbacks.unprepare = unprepare;
callbacks.finalize = finalize;
OSStatus err = MTAudioProcessingTapCreate(
kCFAllocatorDefault,
&callbacks,
kMTAudioProcessingTapCreationFlag_PostEffects,
&tap
);
if(err) {
NSLog(@"Unable to create the Audio Processing Tap %d", (int)err);
NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain
code:err
userInfo:nil];
NSLog(@"Error: %@", [error description]);;
return;
}
// Create an AudioMix and assign it to our currently playing "item", which
// is just the stream itself.
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
AVMutableAudioMixInputParameters *inputParams = [AVMutableAudioMixInputParameters
audioMixInputParametersWithTrack:audioTrack];
inputParams.audioTapProcessor = tap;
audioMix.inputParameters = @[inputParams];
_audioPlayer.currentItem.audioMix = audioMix;
}
aber jetzt mit dieser Audiospur MTAudioProcessingTap Rückrufe „Vorbereiten“ und „Process“ werden nie genannt.
Ist das Problem mit dem audioTrack ich durch KVO bekommen?
Jetzt würde ich wirklich schätzen, wenn jemand mir dabei helfen kann. Oder kann ich sagen, verwende ich den Schreibansatz, um HLS Streams aufzuzeichnen?
Haben Sie erfolgreich eine mp4-Datei mit m3u8-Datei erstellt? –
@Milan Ich habe die Antwort dafür geschrieben. bitte prüfe. –
Vielen Dank Sajad. –