Как остановить (инкогнито) подавление URL-адресов при запуске потоков HLS в программах Google-TV Sony 3.2 для Android

РЕДАКТИРОВАТЬ: согласно моим комментариям ниже, я смог расширить свое тестирование на другие устройства Honeycomb 3.2 и ICS. Во всех случаях URL-адреса фактически появляются, что позволяет мне проверять адаптивную потоковую передачу. Таким образом, это проблема только с Sony Blueray (который в то время был моим единственным устройством поддержки адаптивной потоковой передачи). Поскольку это не проблема с операционной системой 3.2+, а только с устройством одного производителя, это не проблема с адаптивным потоковым тестированием, и я могу отозвать этот запрос на поддержку.

У меня проблема с URL, заблокированным и подавленным в locat/DDMS. То, что я пытаюсь сделать, это убедиться, что моя адаптивная потоковая передача HLS действительно адаптируется. Я планировал сделать это, наблюдая за logcat и наблюдая за тем, как сегменты выбираются. У меня проблема в том, что 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
05-15 14:05:03.503: D/AVAPIMediaPlayer(247): surfaceChangedCallback: вызов setVideo Выберите это 0x66901738, 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
05-15 14: 05: 03.511: I / NuHTTPDataSource (247): подключиться к @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(Context context, 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/frameworks/base/media/libstagefright/include/LiveSession.h#36)

 33 struct LiveSession : public AHandler {
 34     enum Flags {
 35         // Don't log any URLs.
 36         kFlagIncognito = 1,
 37     };
 38     LiveSession(uint32_t flags = 0, bool uidValid = false, uid_t uid = 0);

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();

2 ответа

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

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

Другие вопросы по тегам