Как остановить (инкогнито) подавление 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): подключиться к
Теперь я быстро отследил их до хромированной структуры и режима инкогнито. Некоторые источники фреймворка: 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. Спасибо всем за уделенное время.