Comments 24
Вот интересно, можно ли будет играть 2 потока видео в этом случае, т.е. один на основном экране одного приложение, а другой маленький от какого-нибудь другого приложения.
Если да, то возможно вашу проблему уже решили в Android N…
In Android N, Android TV users can now watch a video in a pinned window in a corner of the screen when navigating within apps.
Судя по данной записи здесь идет разговор о том, что отображается только одно видео в режиме PIP
PIP is intended for activities that play full-screen video. When switching your activity into PIP mode, avoid showing anything except video content. Track when your activity enters PIP mode and hide UI elements, as described in Handling UI During Picture-in-picture.
отличие в том что готовая поддержка в библиотеках и permission не надо?
Мы два раза бежим по обоим строкам (сначала strlen, потом в цикле), что в общем-то лишняя работа, достаточно одного прохода. Зачем вообще размер сравнивать, если один фиг в ноль упрёмся в более короткой строке?
ни одно видео нb — ни одно видео не
не только в нашем приложение — не только в нашем приложении
а и в других приложениях — но и в других приложениях
И начался велики пойиск — И начался великий поиск
является оберткой ffmep — является оберткой ffmpeg ???
кладем его в буффер — кладем его в буфер
смена сигмента — смена сегмента
Так же будет не плохо — Так же будет неплохо
сделать так, что бы — сделать так, чтобы
Итак, подитожим — Итак, подытожим
для ссответственной пропускной способности — для соответственной пропускной способности
Может стоит вычитывать перед отправкой?
Ваше решение несёт практическую пользу? Если да, то почему бы не оформить ваш код согласно соглашению по кодированию FFmpeg и не отправить патч? По всему опыту: нужные вещи принимают хорошо. Плюс на ревью бы указали на косяки: вдруг что-то не так понято в кишках FFmpeg.
К примеру, now_ms()
, зачем, если есть libavutil/time.h
и av_gettime()
, которая, правда, выдаёт время в микросекундах, либо av_gettime_relative()
которая более соответствует вашим потребностям (с тем же увеличением точности).
Или, зачем такое количество глобальных переменных в bitrate_manager.c
? Почему не добавить static
к ним, ведь доступ только из функций внутри.
Или, внутри FFmpeg для выделения памяти непринято использовать malloc()
напрямую. Воспользуйтесь av_malloc()
или av_mallocz()
(если нужно сразу занулить память). Парная функция для освобождения — av_free()/av_freep()
— вторая сразу зануляет указатель, дабы избежать. Для случая массивов же, вообще следует воспользоваться av_malloc_array()/av_realloc_array()
Или, подобное:
urls[i] = (char*) malloc(strlen(url) * sizeof(char));
strcpy(urls[pointerAfterLastItem], url);
вообще стоит заменить одним вызовом av_strdup()
Ну и последнее, почему вы как-то отдельно от всего остального вызываете freeData()
? Почему бы не поместить его в hls_close()
? Ведь логично, что такой механизм может потребоваться при чтении этого формата, логично, что освобождать нужно при закрытии оного.
Ещё бы я пересмотрел бы правки в avio.c
и локализовал бы их только в hls.c
. Дабы не превращать код в лапшу.
После такой краткой ревизии: решение в таком виде я бы постеснялся кому-то показывать, а тем более использовать, кроме как для случая — "быстро проверить".
я не видел «согласно соглашению по кодированию FFmpeg»
http://ffmpeg.org/developer.html#Coding-Rules-1
Практическую пользу несет
но патч я и не хотел создавать вместо этого я оформил в виде руководства и добавил к тикету
Патч добавляет +100500 к шансу попасть в апстрим.
Заставляем FFMPEG менять HLS потоки в зависимости от текущей пропускной способности