IceCast с проблемой заголовка iPhone

Я пытаюсь использовать сервер Icecast с моим приложением для iPhone. Я создаю исходный клиент для своего сервера icecast. В настоящее время я использую уровень NSURL для отправки запроса на создание точки монтирования на сервер. Но как я чувствовал, что этого недостаточно. Я должен использовать любую другую базовую библиотеку, такую ​​как CFNetworks или BSD Sockets. Но я не уверен. Может ли кто-нибудь помочь мне с тем, какая библиотека подходит для реализации icecast для iPhone.

Во-вторых, когда я реализую заголовок для запроса Icecast для создания точки монтирования. Я использую следующую ссылку - Icecast 2: описание протокола, потоковая передача к нему с помощью C#

Но я не могу отправить SOURCE /mountpoint ICE/1.0, потому что у него нет ключа.

Я посылаю это как -

 NSMutableString *requestString = [NSMutableString stringWithFormat:@"http://192.168.1.99:8000"];

    NSLog(@"Request String = %@", requestString);


    NSURL *url = [NSURL URLWithString:requestString];
    NSMutableURLRequest *requestURL = [NSMutableURLRequest requestWithURL:url];
    [requestURL setHTTPMethod:@"GET"];
    [requestURL addValue:@"SOURCE /mp3test ICE/1.0" forHTTPHeaderField:@"SOURCE"];
    [requestURL addValue:@"audio/mpeg" forHTTPHeaderField: @"Content-Type"];
    [requestURL setValue:@"Basic c291cmNlOmhhY2ttZQ==" forHTTPHeaderField:@"Authorization"];
    [requestURL setValue:@"This is my server name" forHTTPHeaderField:@"ice-name"];
    [requestURL setValue:path forHTTPHeaderField:@"ice-url"];
    [requestURL setValue:@"Rock" forHTTPHeaderField:@"ice-genre"];
    [requestURL setValue:@"128" forHTTPHeaderField:@"ice-bitrate"];
    [requestURL setValue:@"0" forHTTPHeaderField:@"ice-private"];
    [requestURL setValue:@"1" forHTTPHeaderField:@"ice-public"];
    [requestURL setValue:@"This is my server description" forHTTPHeaderField:@"ice-description"];
    [requestURL setValue:@"ice-samplerate=44100;ice-bitrate=128;ice-channels=2" forHTTPHeaderField:@"ice-audio-info"];

    NSLog(@"Request URL Value = %@",requestURL);

    NSURLResponse *response;
    NSError *error;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:requestURL returningResponse:&response error:&error];

    if(error !=  nil){
         NSLog(@"%@",[error description]);
    }

Мой ответ и HTML-код -

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<h2>Icecast2 Status</h2>
<br><div class="roundcont">
<div class="roundtop"><img src="/corner_topleft.jpg" class="corner" style="display: none"></div>
<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="4"><tr><td bgcolor="#656565">
<a class="nav" href="admin/">Administration</a><a class="nav" href="status.xsl">Server Status</a><a class="nav" href="server_version.xsl">Version</a>
</td></tr></table>
<div class="roundbottom"><img src="/corner_bottomleft.jpg" class="corner" style="display: none"></div>
</div>

<br><br>&nbsp;


<div class="poster">Support icecast development at <a class="nav" target="_blank" href="http://www.icecast.org">www.icecast.org</a>
</div>
</body>
</html>

Это плохой ответ. Может ли кто-нибудь помочь мне, как я могу отправить аккуратный и чистый запрос и получить ответ. Я также не понял, как отправлять данные mp3 на сервер после создания точки монтирования. Как создать поток и отправить его на icecast.

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


person Devel    schedule 16.11.2013    source источник


Ответы (1)


Я отправлял запрос, используя метод GET, который был неправильным. Я использовал -

[requestURL setHTTPMethod:@"SOURCE /mountpoint ICE/1.0"];.

Я могу создать монтирование на сервере icecast.

Я также добавил данные файла mp3 для воспроизведения файла, например

    //get data from the file url so we can start recording with some file
    NSData *audioData = [NSData dataWithContentsOfURL:fileURL];

    //add audio to stream and add the stream to request for sending data
    NSInputStream *inputStream = [NSInputStream inputStreamWithData:audioData];
    [request setHTTPBodyStream:inputStream];

Он способен воспроизводить данные песни. Но в настоящее время я не знаю, почему он воспроизводит только один фрагмент данных. Я исследую, чтобы добавить куски данных в поток.

person Devel    schedule 18.11.2013
comment
Проверьте свой сервер на наличие ошибки «точка монтирования используется». Возможно, сервер не разрешает повторную запись данных. Проверьте, не создаете ли вы соединение сокета каждый раз, когда на сервер записывается новое значение буфера. Это может быть проблемой. Все остальное выглядит нормально в коде, который вы вставили. - person koherent; 02.12.2013
comment
@Devel, эй, ты смог передавать непрерывные куски данных? Мне нужно реализовать это. Можно подробнее о реализации этого? - person Pavan Kotesh; 18.12.2014
comment
Вы должны убедиться, что отправляете данные с правильным временем. Если вы используете, например, libshout, он сделает это за вас (и многое другое), но в остальном вам нужно позаботиться об этом самостоятельно. - person ePirat; 02.07.2015