2008-12-21 15 views
17

पर स्ट्रीमिंग ऑडियो मैं अपने सर्वर पर कुछ ऑडियो फाइलों को स्ट्रीम करने के लिए देख रहा हूं जो मैं लिख रहा हूं। संपीड़न के बाद भी, कुछ ऑडियो फाइल आकार में बड़ी हो सकती हैं। मेरा सवाल है, क्या कोई कोको फ्रेमवर्क है जो मुझे ऑडियो बफर करने में मदद करता है ताकि यह उपयोगकर्ता के लिए उपलब्ध हो जाए, जबकि बाकी को पाइप नीचे लाया जा रहा हो? यदि नहीं, तो क्या कोई मुझे उद्देश्य-सी/कोको का उपयोग करके ऐसी चीज करने के लिए आवश्यक तकनीकों के बारे में अधिक जानने के लिए सही दिशा में इंगित कर सकता है?सर्वर से आईफोन

सर्वर से ऑडियो के बफरिंग और संपीड़न पर एक निश्चित संसाधन < -> क्लाइंट इंफ्रास्ट्रक्चर आदर्श होगा।

उत्तर

24

ब्रैड ने एक पोस्ट का उल्लेख किया जिसे मैंने HTTP के माध्यम से ऑडियो स्ट्रीम करने के लिए लिखा था। वह यह था: Streaming and playing an MP3। मेरा मतलब यह नहीं है कि वह व्यक्ति हो जो अपने ब्लॉग से लिंक हो लेकिन यह आपके प्रश्न का पता चलता है।

समस्या को हल करने में कितनी मुश्किल है, इस संबंध में, आप देखेंगे कि मैंने उस पोस्ट में 4 अपडेट किए हैं (मैंने किसी और चीज के लिए और अधिक किया है), थ्रेडिंग त्रुटियों को ठीक करना, मेमोरी लीक और नेटवर्क बफरिंग मुद्दे। सटीक सही पाने के लिए बहुत कुछ है।

+0

मैट, मैं आपकी साइट का एक बड़ा प्रशंसक हूं। आप कुछ चुनिंदा फीड में से एक हैं जिन पर यह सुनिश्चित करने पर उच्च प्राथमिकता है कि मैं पढ़ने पर सक्रिय रहूं। अपनी अंतर्दृष्टि के साथ वापस देने के लिए बहुत बहुत धन्यवाद। – Coocoo4Cocoa

+0

अरे @ मैटगल्लाघर, [क्या आपको लगता है कि ऑडियो को दूसरी तरफ स्ट्रीम करना संभव है] (http://stackoverflow.com/questions/6166019/stream-audio-from-ios)? (किसी आईओएस डिवाइस से दूसरी मशीन तक?) – Moshe

+0

@Moshe स्ट्रीमिंग मीडिया सर्वर चलाना उतना कठिन है जितना आपको चाहिए (बहुत कठिन हो सकता है)। HTTP के माध्यम से एक सादे एमपी 3 फ़ाइल की सेवा करना बहुत आसान है और अधिकांश सामान्य स्थितियों को संभाल सकता है। एक लाइव स्ट्रीम की सेवा के रूप में दर्ज किया जा रहा है बहुत मुश्किल है। –

2

दुर्भाग्यवश, आपके सामने थोड़ा सा काम करने जा रहे हैं। मुझे पिछले गर्मियों में एक आईफोन परियोजना के लिए ऐसा करना था। ऑडियोटूलबॉक्स फ़्रेमवर्क में ऑडियो कतार सेवाओं में आपको जो चाहिए वह अधिकांश है।

ऑडियो कतार सेवाओं के साथ काम करना मुश्किल है, आपको यह बताए जाने के लिए कॉलबैक का एक गुच्छा लागू करना होगा कि नेटवर्क से आने के बाद आपके पैकेट को कैसे संसाधित किया जाए।

कोई मुझे लगता है कि मैट गैलगर के पास एक ब्लॉग पर कुछ नमूना कोड था जो ठीक था, और ऐप्पल की कोर ऑडियो मेलिंग सूची पर सामान का एक गुच्छा है।

मुझे पता चला कि मैंने नेटवर्क भाग करने के लिए एनएसआरएल कनेक्शन पर रिले नहीं करने की आवश्यकता समाप्त कर दी है, क्योंकि मेरी डीड्रेसीवेटा प्रतिनिधि प्रतिनिधि विधि अक्सर गोलीबारी नहीं कर रही थी।

क्षमा करें मैं यहां उदाहरण के रूप में कोड की कुछ पंक्तियों में नहीं आ सकता था, लेकिन जिस वर्ग को मैंने लिखा था वह लगभग 400 लाइनों में आया था।

1

आप AVPlayer कक्षा को AVFoundation फ्रेमवर्क से स्थानीय फ़ाइलों या दूरस्थ सर्वर से ऑडियो स्ट्रीम करने के लिए उपयोग कर सकते हैं। AVPlayer क्लास आपको खेलने के लिए तैयारी के बारे में सूचित करेगा या अधिक डेटा बफर करने की आवश्यकता के बारे में सूचित करेगा।

हालांकि यदि आप अधिक नियंत्रण चाहते हैं तो आपको निश्चित रूप से ऑडियो कतार सेवाओं का उपयोग करना चाहिए। ऑडियो कतार सेवाओं का उपयोग करना थोड़ा कठिन होता है लेकिन एक बार जब आप इसे लटकते हैं तो आप ऑडियो प्लेबैक प्रक्रिया को जिस तरह से चाहते हैं उसे ठीक-ठीक करने में सक्षम होंगे।

5

MPMoviePlayerController ऑडियो फ़ाइलों को चला सकता है। यदि आप ऑब्जेक्ट को यूआरएल के साथ प्रारंभ करते हैं (उदाहरण के लिए यह सर्वर पर एक एमपी 3 फ़ाइल हो सकता है) तो यह फाइल स्ट्रीम करेगा और इसे वापस चलाएगा।

प्रारंभ इस तरह दिखता है:

NSURL *theURL = [NSURL urlWithString:@"http://yourdomain.com/yourmediafile.mp3"]; 

MPMoviePlayerController* yourPlayerController = [[MPMoviePlayerController alloc] initWithContentURL:theURL]; 

वहां से आप एक प्लेबैक का मानना ​​है कि सामग्री के माध्यम से स्क्रबिंग के लिए एक स्लाइडर दिखाएगा पॉप अप कर सकते हैं, और यह सामग्री बफर के रूप में स्लाइडर पट्टी में भर जाएगा।

[yourPlayerController shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]; 
[self presentMoviePlayerViewControllerAnimated:yourPlayerController]; 

या फिर आप इसे खेलने बनाने के लिए और अपने स्वयं के यूआई बना सकते हैं:

[yourPlayerController.moviePlayer play]; 

प्लेबैक का यह तरीका ऑडियो कट जाएगा और स्क्रीन लॉक हो जब तक आप पृष्ठभूमि में चलाने के लिए एप्लिकेशन बताओ info.plist फ़ाइल में।

2

अब तक मुझे पता है कि आप उम्मीद करते हैं कि आपकी समस्या हल हो गई है। लेकिन बस परेशान करें। यदि आप सीधे आगे समाधान चाहते हैं, तो आप हमेशा एम्बेड किए गए कोड या किसी अन्य लिंक को प्राप्त कर सकते हैं और इसमें से एक HTML फ़ाइल बना सकते हैं।

<html> 
<body> 
<script type="text/javascript"> 
    var embedBaseUrl = 'http://www.tv.net/'; 
    var embedChannelId = 13; 
    var embedSize = [300,250]; 
    var embedAutoplay = true; 
</script> 
<script type="text/javascript"src="http://www.tv.net/assets/js/embed.js"></script> 
</body> 
</HTML> 

तरह ViewController.h

@interface ViewController : UIViewController { 

NSString *videoURL; 

} 

@property (nonatomic, strong) NSString *videoURL; 

    (IBAction) tv; 

और ViewController.m

@synthesize videoURL; 

    (IBAction) tv { 

    self.videoURL = @"http://dl.dropbox.com/x/xxxxxxxx/HTML/tv.html"; 

    VideoViewController *videoViewController = [[VideoViewController alloc] initWithNibName:nil bundle:nil]; 

    videoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; videoViewController.videoURL = self.videoURL; 

    [self presentViewController:videoViewController animated:YES completion:nil]; } 

में और फिर VideoViewController.h

IBOutlet UIWebView *videoView; 

NSString *videoURL; NSString *videoHTML; 

} 

@property(nonatomic, retain) IBOutlet UIWebView *videoView; @property(nonatomic, retain) NSString *videoURL; @property(nonatomic, retain) NSString *videoHTML; 

    (void) embedTV; 

VideoViewController.m 

@synthesize videoView, videoURL, videoHTML; 

    (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } 

    (void)embedTV { 

    videoHTML = [NSString stringWithFormat:@"\ \ \ \ iframe {position:absolute; top:50%%; margin-top:-130px;}\ body {background-color:#000; margin:0;}\ \ \ \ \ \ ", videoURL]; 

    [videoView loadHTMLString:videoHTML baseURL:nil]; } 
     (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. 

    videoView.backgroundColor = [UIColor blackColor]; videoView.opaque = NO; 

    [self embedTV]; } 
अब मेरी उदाहरण में

में मैं के लिए भेजा वीडियो धारा के लिए, लेकिन आप बिंदु प्राप्त करते हैं, आप जो चाहते हैं उसे स्ट्रीम या प्ले कर सकते हैं। बस UIWebView का उपयोग करें।

+1

कृपया अपना उत्तर संपादित करें और कोड को कुछ पठनीय में प्रारूपित करें :-) – kleopatra

+1

धन्यवाद सिर्को मेरे लिए एचटीएमएल संपादित करने के लिए। मेरी पहली पोस्ट उसे। –

+0

क्लोपेट्रा करेगा :-) –

संबंधित मुद्दे