से एचएलएस के पीसीएम डेटा प्राप्त करना पिछले कुछ वर्षों में यह प्रश्न कुछ बार पूछा जा रहा है लेकिन इसके लिए कोई जवाब नहीं है। मैं एचएलएस से पीसीएम डेटा को संसाधित करने की कोशिश कर रहा हूं और मुझे एवीप्लेयर का उपयोग करना है।AVPlayer
इस पोस्ट .m3u8 HLS फाइलों के साथ स्थानीय फ़ाइलों https://chritto.wordpress.com/2013/01/07/processing-avplayers-audio-with-mtaudioprocessingtap/
और दूरस्थ फ़ाइलें के साथ इस नल काम नहीं बल्कि टैप करता। http://venodesigns.net/2014/01/08/recording-live-audio-streams-on-ios/
मैं प्लेलिस्ट में पहले दो पटरियों खेल सकते हैं, लेकिन यह जब फ़ाइल स्थानीय या दूरदराज के (स्ट्रीम नहीं) मैं अभी भी पीसीएम प्राप्त कर सकते है, पीसीएम प्राप्त करने के लिए आवश्यक कॉलबैक शुरू नहीं करता है, लेकिन यह है HLS काम नहीं कर रहा है और मैं एचएलएस काम कर
यहाँ की जरूरत है मेरी कोड है
//avplayer tap try
- (void)viewDidLoad {
[super viewDidLoad];
NSURL*testUrl= [NSURL URLWithString:@"http://playlists.ihrhls.com/c5/1469/playlist.m3u8"];
AVPlayerItem *item = [AVPlayerItem playerItemWithURL:testUrl];
self.player = [AVPlayer playerWithPlayerItem:item];
// Watch the status property - when this is good to go, we can access the
// underlying AVAssetTrack we need.
[item addObserver:self forKeyPath:@"status" options:0 context:nil];
}
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if(![keyPath isEqualToString:@"status"])
return;
AVPlayerItem *item = (AVPlayerItem *)object;
if(item.status != AVPlayerItemStatusReadyToPlay)
return;
NSArray *tracks = [self.player.currentItem tracks];
for(AVPlayerItemTrack *track in tracks) {
if([track.assetTrack.mediaType isEqualToString:AVMediaTypeAudio]) {
NSLog(@"GOT DAT FUCKER");
[self beginRecordingAudioFromTrack:track.assetTrack];
[self.player play];
}
}
}
- (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);
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];
self.player.currentItem.audioMix = audioMix;
}
void process(MTAudioProcessingTapRef tap, CMItemCount numberFrames,
MTAudioProcessingTapFlags flags, AudioBufferList *bufferListInOut,
CMItemCount *numberFramesOut, MTAudioProcessingTapFlags *flagsOut)
{
OSStatus err = MTAudioProcessingTapGetSourceAudio(tap, numberFrames, bufferListInOut,
flagsOut, NULL, numberFramesOut);
if (err) NSLog(@"Error from GetSourceAudio: %d", (int)err);
NSLog(@"Process");
}
void init(MTAudioProcessingTapRef tap, void *clientInfo, void **tapStorageOut)
{
NSLog(@"Initialising the Audio Tap Processor");
*tapStorageOut = clientInfo;
}
void finalize(MTAudioProcessingTapRef tap)
{
NSLog(@"Finalizing the Audio Tap Processor");
}
void prepare(MTAudioProcessingTapRef tap, CMItemCount maxFrames, const AudioStreamBasicDescription *processingFormat)
{
NSLog(@"Preparing the Audio Tap Processor");
}
void unprepare(MTAudioProcessingTapRef tap)
{
NSLog(@"Unpreparing the Audio Tap Processor");
}
void init
कहा जाता है void prepare
और process
रूप में अच्छी तरह के नाम से जाना है।
मैं यह कैसे कर सकता हूं?
क्या आपको इसके साथ कोई सफलता मिली है? मैं एक ही समस्या से जूझ रहा हूं। – danielbuechele
दुर्भाग्यवश कोई भाग्य नहीं है, हमें किसी भी कोण के साथ समस्या का सामना करना पड़ा, हमने कनेक्शन को प्रॉक्सी किया ताकि हम पीसीएम का विश्लेषण करने के लिए '.m4a' फ़ाइलों को अपने स्वयं के कोडेक में खिला सकें, फिर एक खिलाड़ी को m4a भाग खिलाएं। हालांकि यह वास्तव में हैकी था। –
भले ही इसका उत्तर भी नहीं दिया गया है, फिर भी मैं 4 साल से अधिक समय से मेरा एक प्रश्न संदर्भित करना चाहता हूं जो निकट से संबंधित है। कोई ऐसा कह रहा है कि वह वास्तव में सफल हुआ, लेकिन इसे गुप्त रखा, उसने यह कैसे किया :( https://stackoverflow.com/questions/19403584/avplayer-hls-live-stream-level-meter-display-fft-data –