Хорошо, поэтому я разрабатываю приложение для хромирования на 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)
Любая помощь будет оценена.
Что говорит ресивер? –
@Leon Nicholls Nicholls Я добавил журнал на свой вопрос в качестве редактирования. – user2874682