2014-06-27 5 views
1

Хорошо, поэтому я разрабатываю приложение для хромирования на IOS. Одной из функций, которую будет выполнять мое приложение, будет воспроизведение локальных видео с вашего устройства. Для этого я использую внешний источник, найденный в github под названием CocoaHttpServer. Этот Http-сервер позволяет загружать файлы в службу localhost. Для этого я использую следующий код, чтобы начать свой сервер:Chrome Cast не будет воспроизводить поданное видео

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
     // Configure our logging framework. 
    // To keep things simple and fast, we're just going to log to the Xcode console. 
    [DDLog addLogger:[DDTTYLogger sharedInstance]]; 

    // Create server using our custom MyHTTPServer class 
    httpServer = [[HTTPServer alloc] init]; 


    // Tell the server to broadcast its presence via Bonjour. 
    // This allows browsers such as Safari to automatically discover our service. 
    [httpServer setType:@"_http._tcp."]; 

    // Normally there's no need to run our server on any specific port. 
    // Technologies like Bonjour allow clients to dynamically discover the server's port at runtime. 
    // However, for easy testing you may want force a certain port so you can just hit the refresh button. 
    // [httpServer setPort:12345]; 

    // Serve files from our embedded Web folder 
    NSString *webPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Web"]; 
    DDLogInfo(@"Setting document root: %@", webPath); 

    [httpServer setDocumentRoot:webPath]; 
    [self startServer]; 

    gblvb = [GlobalVariables singleobj]; 

    self.mediaControlChannel = [[GCKMediaControlChannel alloc] init]; 
    self.mediaControlChannel.delegate = self; 
    [gblvb.deviceManager addChannel:self.mediaControlChannel]; 
    [self.mediaControlChannel requestStatus]; 
} 

Этот код устанавливает мой HTTP-сервер и указывает его искать в веб-папку, которая импортируется в мой основной узел и содержит тестовое видео я загрузите из Google в целях тестирования (это видео Google использует в своем примере потоковой передачи на хром, переданный через Интернет). Я получил это видео от http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4. Так же, как это код также устанавливает новый медиа-канал, готовый к хрому литой бросить, чтобы ...

Далее у меня есть пустое функцию startServer, которая действительно устанавливает соединение и публикует сервер ...

- (void)startServer 
{ 
    // Start the server (and check for problems) 

    NSError *error; 
    if([httpServer start:&error]) 
    { 
     DDLogInfo(@"Started HTTP Server on port %hu", [httpServer listeningPort]); 

    } 
    else 
    { 
     DDLogError(@"Error starting HTTP Server: %@", error); 
    } 
} 

Наконец код ниже устанавливает путь равной LOCALHOST URL и acctuallly отливать видео на хромированном гипс:

-(void)viewDidAppear:(BOOL)animated 
{ 
path = [NSString stringWithFormat:@"localhost:%hu%@%@", [httpServer listeningPort], @"/", @"BigBuckBunny.mp4"]; 


    // Do any additional setup after loading the view from its nib. 

    gblvb = [ GlobalVariables singleobj]; 


    deviceScanner = [[GCKDeviceScanner alloc] init]; 


    [deviceScanner addListener:self]; 
    [deviceScanner startScan]; 
    NSString *image; 
    NSString *type; 
    GCKMediaMetadata *metadata = [[GCKMediaMetadata alloc] init]; 


     image = @"Folder-Video-icon.png"; 

     [metadata setString:@"The MP4 file format defined some extensions over the ISO Base Media File Format to support MPEG-4 visual/audio codecs and various MPEG-4 Systems features such as object descriptors and scene descriptions." 
        forKey:kGCKMetadataKeySubtitle]; 
     type = @"video/mp4"; 
[metadata setString:[NSString stringWithFormat:@"%@%@", @"Casting " , gblvb.FileType]forKey:kGCKMetadataKeyTitle]; 



    [metadata addImage:[[GCKImage alloc] 
         initWithURL:[[NSURL alloc] initWithString:image] 
         width:480 
         height:360]]; 

    //define Media information 
    sleep(2); 
    GCKMediaInformation *mediaInformation = 
    [[GCKMediaInformation alloc] initWithContentID:path 
             streamType:GCKMediaStreamTypeNone 
             contentType:type 
              metadata:metadata 
            streamDuration:0 
             customData:nil]; 

    //cast video 
    [_mediaControlChannel loadMedia:mediaInformation autoplay:TRUE playPosition:0]; 
    NSLog(@"Full Path : %@", path); 
} 

Теперь моя проблема заключается в том, что, когда этот HTTP сервер опубликован и готов бросить хром актеры не играют хотя, когда я фактически перехожу к пути на сафари, видео отображается отлично. Как и в этом, я знаю, что хром-потоки отличные из-за того, что потоки видеороликов онлайн-видео просто прекрасны.

EDIT Вот мой лог отладки образуют хром литой:

Failed to load resource: the server responded with a status of 404 (Not Found) https://www.gstatic.com/eureka/player/undefined 
[ 0.259s] [goog.net.WebSocket] Opening the WebSocket on ws://localhost:8008/v2/ipc 
cast_receiver.js:18 
[ 0.580s] [goog.net.WebSocket] WebSocket opened on ws://localhost:8008/v2/ipc 
cast_receiver.js:18 
GET https://www.gstatic.com/eureka/player/Folder-Video-icon.png 404 (Not Found) player.js:31 
The page at 'https://www.gstatic.com/eureka/player/player.html?skin' was loaded over HTTPS, but displayed insecure content from 'http://localhost:49598/BigBuckBunny.mp4': this content should also be loaded over HTTPS. 
cast_receiver.js:69 
GET http://localhost:49598/BigBuckBunny.mp4 cast_receiver.js:69 
[ 21.834s] [cast.receiver.MediaManager] Load metadata error 
cast_receiver.js:18 
GET https://www.gstatic.com/eureka/player/Folder-Video-icon.png 404 (Not Found) 

Любая помощь будет оценена.

+0

Что говорит ресивер? –

+0

@Leon Nicholls Nicholls Я добавил журнал на свой вопрос в качестве редактирования. – user2874682

ответ

1

Я работал над этим, вместо того, чтобы тестировать с помощью localhost на симуляторе, написать функцию, чтобы получить текущий IP-адрес устройства и где локальная часть была в этой строке path = [NSString stringWithFormat:@"localhost:%hu%@%@", [httpServer listeningPort], @"/", @"BigBuckBunny.mp4"]; заменить ее на IP-адрес устройства.