Chrome Cast无法播放服务视频

时间:2014-06-27 16:23:29

标签: ios google-cast cocoahttpserver

好的,我正在为IOS上的Chrome演员开发应用程序。我的应用程序将执行的功能之一是从您的​​设备播放本地视频。要做到这一点,我使用github上的外部源代码CocoaHttpServer.这个Http服务器允许我将文件上传到localhost服务。为此,我使用以下代码启动我的服务器:

- (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服务器并将其指向web文件夹,该文件夹导入我的主包并包含我从谷歌下载的测试视频用于测试目的(此视频谷歌在他们的流媒体样本中使用通过网络投射的铬)。我从http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4收到了这段视频。除此之外,代码还设置了一个新的媒体通道,可以将chrome cast转换为...

接下来我有我的void函数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);
    }
}

最后,代码bellow将路径设置为等于localhost url,并将视频同时转换为chrome cast:

-(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服务器发布并准备投射时,即使当我实际导航到safari上的路径时,视频也能完美地播放。除此之外,我知道镀铬铸件流好,因为它流动googles在线示例视频就好了。

修改 这是我的调试日志形式的chrome cast:

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) 

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我没有在模拟器上使用localhost进行测试,而是编写一个函数来获取当前设备的IP地址以及localhost部分在此行内的位置path = [NSString stringWithFormat:@"localhost:%hu%@%@", [httpServer listeningPort], @"/", @"BigBuckBunny.mp4"];将其替换为设备IP地址。

相关问题