1

EDIT: согласно моим комментариям ниже, я смог расширить свое тестирование на другие устройства Honeycomb 3.2 и ICS. Во всех случаях URL-адреса, по сути, появляются и, таким образом, позволяют мне проверять адаптивную потоковую передачу. Это, следовательно, проблема только с Sony Blueray (которая в то время была моим единственным адаптивным потоковым поддерживающим устройством). Поскольку это не проблема с ОС 3.2+, но с одним только устройством-изготовителем, это не проблема с адаптивным потоковым тестированием, и я могу снять этот запрос для поддержки.Как остановить (инкогнито) подавление URL-адреса при запуске потоков HLS в Google-TV Sony 3.2 Программы для Android

У меня проблема с блокировкой и подавлением URL в локаторе/DDMS. То, что я пытаюсь сделать, это убедиться, что моя адаптивная потоковая передача HLS действительно адаптируется. Как я планировал это сделать, это следить за логарифмом и следить за тем, чтобы сегменты были подняты. Проблема в том, что URL-адреса подавлены, поэтому я не могу посмотрим, что происходит Вот отрывок из того, что я вижу в LogCat

05-15 14:.. 05: 03,499: D/AVAPIMediaPlayer (247): AVAPIMediaPlayer построен
05-15 14: 05: 03.503: D/AVAPIMediaPlayer (247): initCheck называется
05-15 14: 05: 03.503: D/AVAPIMediaPlayer (247): SetDataSource < BLOCKED >
05-15 14: 05: 03,503 D/AVAPIMediaPlayer (247): surfaceChangedCallback : call setVideoRectangle this 0x669017 38, x 480, y 180, w 1440, h 680
05-15 14: 05: 03.507: D/AVAPIMediaPlayer (247): Создать ядро ​​игрока для видеомагнитофона типа mime/mp2t
05-15 14: 05: 03.507 D/AVSettingsBridge (247): подготовка, ручка: c560b6c8f9, тип: 0
05-15 14: 05: 03,507 I/AVSettingsBridge (247): IAVSettingsBridgeImpl :: registerCb, размер карты: 0-> 1
05-15 14: 05: 03,511 I/LiveSession (247): OnConnect < URL-подавлено >
05-15 14: 05: 03.511: I/NuHTTPDataSource (247): подключение к URL < подавлено > @ 0

Теперь я быстро проследил их обратно в рамки хрома и режим инкогнито. Некоторые базовые источники: http://androidxref.com/source/s?defs=kFlagIncognito&project=frameworks.

81  if (!(mFlags & kFlagIncognito)) { 
82   LOG_PRI(ANDROID_LOG_INFO, LOG_TAG, "connect to %s @%lld", uri, offset); 
83  } else { 
84   LOG_PRI(ANDROID_LOG_INFO, LOG_TAG, 
85     "connect to <URL suppressed> @%lld", offset); 

Я также взял ссылку на Android 3.0 «Браузер включает в себя новые функции, которые позволяют пользователям осуществлять навигацию и организовать более эффективно. Несколько вкладок заменить окно браузера и новый„инкогнито“режим позволяет анонимный просмотр».

Что я думаю, это, по-видимому, идет в режим инкогнито по умолчанию?

Теперь я не кодер, просто борюсь с кодом, который был сброшен на моих коленях, но мне стало ясно, что где-то в setDataSource (контекст контекста, Uri uri) или связанные HTTP-заголовки, вероятно, есть тег/флаг который может быть установлен для включения или выключения инкогнито. И что опытные Android программисты, вероятно, смогут быстро разобраться.

Может ли кто-нибудь помочь?

У меня есть дополнительные ссылки ниже, если это помогает.


Ссылка в коде:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent receivedIntent = this.getIntent(); 
    receivedIntent = this.getIntent(); 
    String title = receivedIntent.getExtras().getString("label"); 
    String subtitle = receivedIntent.getExtras().getString("subtitle"); 
    String description = receivedIntent.getExtras().getString("description"); 
    String URI = receivedIntent.getExtras().getString("URI"); 
    String imagePrefix = receivedIntent.getExtras().getString("imagePrefix"); 
    setContentView(R.layout.video_page); 

    String fileName = Environment.getExternalStorageDirectory().toString() + "/CamaroPit/" + imagePrefix + ".mp4"; 
    File file = new File(fileName); 
    if (!file.exists()) { 
     fileName = Environment.getExternalStorageDirectory().toString() + "/CamaroPit/alschevrolet.mp4"; 
    } 

    Log.d("GTV", "Video to play: " + fileName); 
    TextView textTitle = (TextView) findViewById(R.id.video_page_title); 
    textTitle.setText(title); 
    TextView textSubtitle = (TextView) findViewById(R.id.video_page_subtitle); 
    if (subtitle.equals("subtitle")) { 
     subtitle = "Check out \""+ title + "\" and really get a feel for your Camaro."; 
    } 
    textSubtitle.setText(subtitle); 
    TextView textDescription = (TextView) findViewById(R.id.video_page_description); 
    textDescription.setText(description); 
    this.getWindow().setFormat(PixelFormat.TRANSPARENT); 
    final VideoView vView = (VideoView) findViewById(R.id.page_view); 
    vView.setMediaController(new MediaController(this)); 
    vView.setVideoURI(Uri.parse(URI)); 
    vView.requestFocus();  
} 

item.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View view) { 
    final VideoView vView = (VideoView) GTVHomeScreenSetup.this.homeScreen.findViewById(R.id.gtv_video_view); 
    MediaController mC = new MediaController(GTVHomeScreenSetup.this.homeScreen); 
    vView.setMediaController(mC); 
    mC.setAnchorView(vView); 

    VideoData clickedVideo = currentVideoList.get(item.position); 

    vView.setVideoURI(Uri.parse(homeScreen.getVideoURI(clickedVideo, cPath))); 
    vView.start(); 

    item.requestFocus(); 
    for (ImageItemView item : GTVHomeScreenSetup.this.imageItems) { 
     item.unSelect(); 
    } 
    item.select(); 

Дополнительные ссылки из рамок:

PS: это не позволит мне размещать гиперссылки в виде гиперссылок.

// HTTPBase.h (http://androidxref.com/source/xref/frameworks/base/media/libstagefright/include/HTTPBase.h)

28 struct HTTPBase : public DataSource { 
29  enum Flags { 
30   // Don't log any URLs. 
31   kFlagIncognito = 1 
32  }; 

// HTTPLiveSource.h (HTTP : //androidxref.com/source/xref/frameworks/base/media/libmediaplayerservice/nuplayer/HTTPLiveSource.h)

 struct NuPlayer::HTTPLiveSource : public NuPlayer::Source { 
30  HTTPLiveSource(
31    const char *url, 
32    const KeyedVector<String8, String8> *headers, 
33    bool uidValid = false, 
34    uid_t uid = 0); 
35 
36  virtual void start(); 
37 
38  virtual status_t feedMoreTSData(); 
39 
40  virtual sp<MetaData> getFormat(bool audio); 
41  virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit); 
42 
43  virtual status_t getDuration(int64_t *durationUs); 
44  virtual status_t seekTo(int64_t seekTimeUs); 
45  virtual bool isSeekable(); 
46 
47 protected: 
48  virtual ~HTTPLiveSource(); 
    51  enum Flags { 
52   // Don't log any URLs. 
53   kFlagIncognito = 1, 
54  }; 
55 
56  AString mURL; 
57  KeyedVector<String8, String8> mExtraHeaders; 
58  bool mUIDValid; 
59  uid_t mUID; 
60  uint32_t mFlags; 

//HTTPLiveSession.h (http://androidxref.com/source/xref/ рамки/база/медиа/libstagefright/include/LiveSession.h # 36)

AwesomePlayer 140 INCOGNITO = 0x8000,

PreviewPlayerBase.h 132 INCOGNITO = 32768,

//PreviewPlayerBase.cpp (http://androidxref.com/source/xref/frameworks/media/ libvideoeditor/lvpp/PreviewPlayerBase.cpp)

247 status_t PreviewPlayerBase::setDataSource_l(
248   const char *uri, const KeyedVector<String8, String8> *headers) { 
249  reset_l(); 
250 
251  mUri = uri; 
252 
253  if (headers) { 
254   mUriHeaders = *headers; 
255 
256   ssize_t index = mUriHeaders.indexOfKey(String8("x-hide-urls-from-log")); 
257   if (index >= 0) { 
258    // Browser is in "incognito" mode, suppress logging URLs. 
259 
260    // This isn't something that should be passed to the server. 
261    mUriHeaders.removeItemsAt(index); 
262 
263    mFlags |= INCOGNITO; 
264   } 
265  } 
266 
267  if (!(mFlags & INCOGNITO)) { 
268   LOGI("setDataSource_l('%s')", mUri.string()); 
269  } else { 
270   LOGI("setDataSource_l(URL suppressed)"); 
271  } 
272 
273  // The actual work will be done during preparation in the call to 
274  // ::finishSetDataSource_l to avoid blocking the calling thread in 
275  // setDataSource for any significant time. 
276 
277  return OK; 
278 } 
279 




30 struct ChromiumHTTPDataSource : public HTTPBase { 
31  ChromiumHTTPDataSource(uint32_t flags = 0); 
32 
33  virtual status_t connect(
34    const char *uri, 
35    const KeyedVector<String8, String8> *headers = NULL, 
36    off64_t offset = 0); 
37 
38  virtual void disconnect(); 
39 
40  virtual status_t initCheck() const; 
41 
42  virtual ssize_t readAt(off64_t offset, void *data, size_t size); 
43  virtual status_t getSize(off64_t *size); 
44  virtual uint32_t flags(); 

ответ

1

обычно мы используем M0n0wall. Просто загрузите, запишите DVD, загрузитесь с него на 2-портовом ПК. Один к сети, другой - к вашему телевизору Google. Вы можете затем активировать сеть, как пожелаете.

+0

Hi Les, читал ваш учебник по мультимедиа для Android. Качественный товар. И спасибо за ссылку M0n0wall. Предположительно, я могу использовать формирователь трафика, чтобы помочь установить пропускную способность для проверки адаптивного переключателя? Моя проблема намного более простая. Я не вижу переключатель, потому что URL-адреса подавляются на выходе Logcat/DDMS. Он входит в инкогнито по умолчанию, и я не знаю, какие флаги, параметры, параметры могут быть установлены и где, чтобы остановить его от использования инкогнито. Для справки это не происходит, когда я тестирую на своих устройствах Honeycomb (но они не поддерживают HLS). – MikeInDetroit

+0

Если вы пришлете мне электронное письмо или, хотя G +, я поделюсь дополнительными подсказками, но я не уверен, что хочу сделать их публичными в это время. –

+0

Вы можете просто посмотреть журналы доступа http на сервере, чтобы увидеть коммутатор. Я понятия не имею, почему он по умолчанию инкогнито с HLS, но это похоже на ошибку в Android или документах. – vipw

0

Поскольку проблема изолирована от одного производителя, она больше не препятствует адаптивной потоковой передаче. На самом деле, если Sony BLueray не сможет адаптировать потоковое видео, это все равно может быть проблемой, но тот, который нужно будет отправить в Sony. Спасибо всем за их время.