2014-02-06 4 views
3

Я пытаюсь понять, как большинство приложений выполняют настройку ATSC. Предположим, что у меня уже есть запрос ATSC мелодия, которую я приобрел черезКаков правильный способ настройки (и сканирования) канала ATSC?

ITuneRequest *pITuneRequest = NULL; 
pATSCTuningSpace->CreateTuneRequest(&pTuneRequest)` 

Кажется, что существует три распространенных способа:

1) Построить список всех MAJOR.MINOR каналов и отображающие их на физический канал, затем настройтесь на этот физический канал всякий раз, когда запрашивается запрос major.minor. Эта карта построена с помощью кода, как это:

for i = 2 to 69 
    tune_to_physical_channel(i) 
    if (tuner_has_lock()) 
     add_to_known_list(i, major_of(i), minor_of(i)); 
next 

Пользовательский интерфейс представляет только список каналов MAJOR.MINOR пользователю.

Проблема, которую я вижу здесь, заключается в том, что я, похоже, получаю дубликаты сопоставлений; есть моменты, когда я настраиваю физический канал 30 и смотрю 43.1, а в других случаях, когда настраиваю его, но вместо этого вижу 43.2! Почему это происходит?

2) Настройтесь на майор.minor напрямую. Разрешить прямой ввод как основного, так и второстепенного каналов и вообще не использовать физические каналы. Я пробовал это, используя несколько локальных каналов: 8.1, 8.2, 43.1, 43.2, 43.3, 49.1, 49.2.

8,1 и 8,2 мелодия прекрасно, если построить запрос настроить и установить параметры, как это:

IATSCChannelTuneRequest* pIATSCChannelTuneRequest = NULL; 
IATSCLocator *pIATSCLocator = NULL; 
hr = pITuneRequest->QueryInterface(IID_IATSCChannelTuneRequest, 
      (void**)&pIATSCChannelTuneRequest); 
pIATSCChannelTuneRequest->put_Channel(lMajorChannel); 
pIATSCChannelTuneRequest->put_MinorChannel(lMinorChannel); 
::CoCreateInstance(CLSID_ATSCLocator, 0, CLSCTX_INPROC, IID_IATSCLocator,  
      (void**)&pIATSCLocator); 
pIATSCLocator->put_CarrierFrequency(-1); 
pIATSCLocator->put_SymbolRate(-1); 
pIATSCLocator->put_PhysicalChannel(-1); 
pIATSCChannelTuneRequest->put_Locator(pIATSCLocator); 

Другие каналы никогда не настраивать. Зачем? Другие приложения (например, WinTV) настраивают все правильно.

3) Создайте список каналов major.minor, просмотрев список известных частот для данной географической области. Некоторые приложения засекли себя известными частотами на основе местоположения, such as this one, this one и this one. Обратите внимание, что все они зависят от США.

Я на самом деле не пробовал еще, но мой план будет поставлять список, и построить отображение major.minor -> частоты, похожий на # 1:

foreach (frequency f in frequency_array) 
    tune_to_frequency (f) 
    if (tuner_has_lock()) 
     add_to_known_list(f, major_of(f), minor_of(f)); 
next 

Так снова вопрос: Как приложения реализуют сканирование/настройку для каналов ATSC?

+0

Как создается ваш известный список? Если физический канал является индексом массива, двойные сопоставления невозможны, и дубликат просто заменит первое сопоставление. Это, по крайней мере, поможет с 1). Я предполагаю, что отображение выполняется только один раз? Или вы набираете карту повторно? Последнее также объясняет, почему отображение дает противоречивые результаты. – scenia

+0

> двойные сопоставления невозможны - вот какая точка моего вопроса. В методе 1 я иногда вижу, что запрос настройки на физический канал 30 приводит к настройке на 43.1, и иногда вижу, что запрос настройки настраивает меня на 43.2. Кажется, что нет такого шаблона для этого поведения, и я ожидал бы отношения 1: 1 для сопоставлений физического -> major.minor. Последнее, что я прошу о поведении метода 1 ... почему это происходит? Я не хочу заменять первое отображение, потому что вы никогда не знаете, какой из двух второстепенных каналов будет фактически настроен. –

+0

Отношения не обязательно 1: 1. На самом деле, если я не понимаю систему неправильно, сопоставление - это просто майоры для физического, в то время как несовершеннолетние - это всего лишь несколько потоков данных, предоставляемых на одном канале. Это означает, что есть намного больше программ (major.minor), чем каналы (физические). – scenia

ответ

2

Короче говоря, наше решение состояло в том, чтобы не поддерживать сканирование и идти с методом номер два: настроить на Major.Minor напрямую. В моем первоначальном посте я отметил, что это работало только для 8,1 и 8,2 в моей области.

Оказалось, установка Channel и MinorChannel не достаточно. Мне нужно было cross-reference each major channel, а также установить PhysicalChannel (RFChannel) при настройке. Итак, чтобы настроить, мы установили Channel, MinorChannel и PhysicalChannel для всех запросов.

Я установил все остальные свойства (включая CarrierFrequency) в -1 в TuneRequest.

Кроме того, я нашел два других ресурсов делают поисков:

http://transition.fcc.gov/mb/engineering/dtvmaps/
http://www.tvfool.com

Как примечание стороны, для наших целей применения, это разумно просить пользователей, чтобы пойти посмотреть на физическую (RF) с использованием antennaweb.org. Я не уверен, как вы по-прежнему будете использовать наш подход, если бы у пользователя не было этой информации.

Смежные вопросы