2011-11-09 10 views
13

मैं वेबव्यू के साथ काम कर रहा हूं जो कुछ स्थानों जैसे सैंडबॉक्स से लोड करता है। इसलिए मैंने उन फ़ाइलों को संभालने के लिए NSURLProtocol की सरल बाल कक्षा को जोड़ा। प्रोटोकॉल हैंडलर यूआरएल योजना जैसे "डमी:" का प्रबंधन करेगा। जब मैंने कस्टम यूआरएल की तरह डमी की कोशिश की: ///index.html, यह स्थानीय निर्देशिका से index.html लोड करना चाहिए। एचटीएमएल और एम्बेडेड छवियों आदि ठीक काम किया।वेबव्यू के लिए कस्टम NSURLProtocol क्लास HTML5 दस्तावेज़ में वीडियो लोड करते समय काम नहीं करता

लेकिन जब मैंने एक HTML फ़ाइल की कोशिश की तो टैग का उपयोग कर HTML5 वीडियो प्लेयर शामिल है, यह काम नहीं करता है। WebView ने विधि भी कोशिश नहीं की है InitWithRequest: वीडियो फ़ाइल के लिए मेरी कस्टम कक्षा में अनुरोध।

@interface DummyURLProtocol : NSURLProtocol { 
} 

+ (BOOL)canInitWithRequest:(NSURLRequest *)request; 
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request; 
+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b; 
- (void)startLoading; 
- (void)stopLoading; 

@end 

@implementation DummyURLProtocol 

+(BOOL)canInitWithRequest:(NSURLRequest *)request { 
    return [[[request URL] scheme] isEqualToString:@"dummy"]; 
} 

+(NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { 
    return request; 
} 

+(BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b { 
    return [[[a URL] resourceSpecifier] isEqualToString:[[b URL] resourceSpecifier]]; 
} 

-(void)startLoading { 
    NSURL *url = [[self request] URL]; 
    NSString *pathString = [url resourceSpecifier]; 
    NSString *path = [NSString stringWithFormat:@"/Users/cronos/tmp/video_demo/%@", pathString]; 
    NSString *fullFilename = [pathString lastPathComponent]; 
    NSString *extention = [fullFilename pathExtension]; 
    NSString *mimeType = [[SSGHTMLUtil sharedUtil] mimeTypeForExtension:extention]; 
    NSLog(@"DummyURLProtocol:FILEPATH: %@ EXTENSION: %@ MIME-TYPE: %@", path, extention, mimeType); 


    NSURLResponse *response = [[NSURLResponse alloc] initWithURL:url MIMEType:mimeType expectedContentLength:-1 textEncodingName:nil]; 
    FILE *fp = fopen([path UTF8String], "r"); 
    if (fp) { 
     char buf[32768]; 
     size_t len; 
     [[self client] URLProtocol:self 
       didReceiveResponse:response 
       cacheStoragePolicy:NSURLCacheStorageNotAllowed]; 
     while ((len = fread(buf,1,sizeof(buf),fp))) { 
      [[self client] URLProtocol:self didLoadData:[NSData dataWithBytes:buf length:len]]; 
     } 
     fclose(fp); 
    } 
    [[self client] URLProtocolDidFinishLoading:self]; 
} 

-(void)stopLoading { 
} 

@end 

मैं applicationDidFinishLaunching में प्रोटोकॉल हैंडलर पंजीकृत: AppDelegate.m

if ([NSURLProtocol registerClass:[DummyURLProtocol class]]) { 
    NSLog(@"URLProtocol registration successful."); 
} else { 
    NSLog(@"URLProtocol registration failed."); 
} 

में तो मैं यूआरएल के साथ मेरी WebView की कोशिश की "डमी: ///HTML5_Video.html"। जावास्क्रिप्ट फाइलों, सीएसएस फाइलों, छवियों जैसे अन्य संसाधन सफलतापूर्वक लोड किए गए हैं लेकिन mp4 फ़ाइल DummyURLProtocol को पास नहीं की गई थी। HTML5_Video.html में निम्नलिखित शामिल हैं।

<video preload="metadata"> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=676422 --> 
    <source src="assets/dizzy.mp4" type="video/mp4" /> 
    <source src="assets/dizzy.webm" type="video/webm" /> 
    <source src="assets/dizzy.ogv" type="video/ogv" /> 
    </video> 

इस समस्या को हल करने के लिए कोई विचार या अच्छा प्रारंभिक बिंदु?

धन्यवाद।

+1

हैलो मैं कर रहा हूँ समस्या देखें सहित अन्य मल्टीमीडिया प्रकार के। क्या कोई ऐसा करने का प्रयास करता था? यह डमी लोड नहीं करता है: // पेज। –

उत्तर

8

यूप। यह काम नहीं करेगा।

मैंने एक साल पहले ऐप्पल के साथ बग दायर की है।

वीडियो और एसवीजी NSURLProtocol तंत्र के माध्यम से मत जाओ

नई WKWebView कक्षा के साथ कस्टम NSURLProtocol का उपयोग कर http://openradar.appspot.com/8446587

और http://openradar.appspot.com/8692954

+0

http: योजना का उपयोग करने के बारे में क्या है लेकिन कस्टम हेडर का उपयोग करना है? –

+0

उत्तर के लिए धन्यवाद! – cronos

+1

मैंने एक ही रोडब्लॉक मारा है। ऐप में (ऐप के भीतर से) मल्टीमीडिया फ़ाइलों को सेवा देने के लिए मुझे एक एम्बेडेड वेबसर्वर (कोकोएचटीपीएससेवर) के साथ जाना था – TrekOnTV2017

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