1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yangchaojiang0515-yjPlay

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

yjPlay

gif 显示有点卡,帧数低,实际很流畅

Скачать предварительный просмотр apk


Основываясь на exoPlayer, пользовательский проигрыватель JPlayer поддерживает следующие функции:

  1. ExoUserPlayer — базовый проигрыватель.
  2. GestureVideoPlayer — добавлены жесты для регулировки яркости, громкости, перемотки и т. д.
  3. ManualPlayer — можно настроить запуск воспроизведения.
  4. Поддержка предварительного просмотра рекламного видео (легко реализовать, идеально переключается, можно настроить).
  5. Поддержка различных разрешений видеопереключения.
  6. Кэширование загруженных зашифрованных видеофункций (лёгкая реализация буферизации во время воспроизведения), не используется AndroidVideoCache.
  7. Поддержка настраиваемых протоколов kttp, Rtmp, Https, Cronet и других.
  8. Поддержка списка воспроизведения видео (идеальный переход от списка к деталям).
  9. Поддержка различных типов файлов: MP4, M4A, WebM, Matroska, Ogg, WAV, MP3, MPEG-TS, MPEG-PS, FLV, ADTS (AAC), Flac, M3U8, mkv и другие.
  10. Поддержка типа сети для подсказки о воспроизведении (можно настроить блокировку).
  11. Поддержка загрузки видео, макета ошибки, макета повтора, макета подсказки, настройка более гибкого собственного стиля макета.
  12. Поддержка режима отображения видео во время загрузки (режим скорости интернета и режим процента [больше не используется]).
  13. Поддержка ускорения и замедления видео.
  14. Поддержка нескольких обложек видео (два режима обложки).
  15. Поддержка пользовательского MediaSource.
  16. Поддержка увеличения жестов для регулировки яркости видео, прогресса, громкости и настройки макета.
  17. Поддержка упрощённой версии и полной версии, выбор использования более богатого контента.
  18. Поддержка AES для шифрования видео, простое шифрование → нажмите меня (версия 2.1.31 больше не используется).
  19. Добавление вспомогательного класса для автономной загрузки ExoWholeDownLoadManger, ExoWholeDownloadTracker, ExoDownLoadManger, DownloadService() → нажмите меня.
  20. Поддержка функции блокировки экрана во время воспроизведения и управления отображением анимации.
  21. Поддержка настройки значка кнопки возврата и полноэкранной кнопки.
  22. Поддержка пользовательской обложки видео (обложка видео с идеальным разнообразием стилей).
  23. Поддержка видео в реальном времени (строка заголовка и нижний колонтитул).
  24. Поддержка потокового API-вызова.

Обновление журнала 2.1.91 → нажмите меня, чтобы просмотреть

I. Ссылка на библиотеку

repositories {
    jcenter()
    mavenCentral();
}

dependencies {
    // полная версия
    compile 'com.ycjiang:VideoPlayModule:2.1.91'
    // упрощённая версия (без smoothstreaming, dash, hls, только обычные функции потоковой передачи)
    compile 'com.ycjiang:VideoPlayModule-Lite:2.1.91'
}

Примечание: если не удаётся нормально сослаться, пожалуйста, добавьте следующий код в repositories{ } mavenCentral(url: "https://dl.bintray.com/ycjiang/ycjiang")

II. Свойства управления

Основное использование следующее

<chuangyuan.ycj.videolibrary.widget.VideoPlayerView
        android:id="@+id/exo_play_context_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent" />

1. Свойства элемента управления

<chuangyuan.ycj.videolibrary.widget.VideoPlayerView
    android:id="@+id/exo_play_context_id"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:controller_layout_id="@layout/simple_exo_playback_control_view"
    app:player_layout_id="@layout/simple_exo_view"
    app:player_replay_layout_id="@layout/custom_play_replay"
    app:player_error_layout_id="@layout/custom_play_error"
    app:player_hint_layout_id="@layout/custom_play_btn_hint"
    app:player_load_layout_id="@layout/custom_exo_play_load"
    app:player_gesture_audio_layout_id="@layout/custom_gesture_audio"
    app:player_gesture_bright_layout_id="@layout/custom_gesture_brightness"
    app:player_gesture_progress_layout_id="@layout/custom_gesture_pro"
    app:preview_layout_id="@layout/exo_default_preview_layout"
    app:resize_mode="fit"
    app:show_timeout="3000"
    app:surface_type="texture_view"
    app:fastforward_increment="0"
    app:rewind_increment="0"
    app:user_watermark="@mipmap/watermark_big"
    app:list="true"
    app:use_controller="true"
    app:fullscreen_image_selector="@drawable/custom_full_selector"
    app:back_image="@drawable/ic_back_custom" />
``` | enum      | 视频缩放渲染显示方式一共4种                                                 | 
  |                                   | reference | 1.fit          正常模式                                                     | 
  |                                   | reference | 2.fixed_width  保持的是视频宽度,拉伸视频高度                               | 
  |                                   | reference | 3.fixed_height 保持的是视频高度,拉伸视频宽度                               |         
  |                                   | reference | 4.fill           全屏模式,拉伸视频宽高                                     |        
  | player_layout_id                  | reference | (播放器布局):目前默认布局  simple_exo_view.xml                              |
  | controller_layout_id              | reference | 控制器布局  默认有四种布局                                                  |
  |                                   | reference | 1.simple_exo_playback_control_view.xml  视频封面控制布局下面,(默认)       | 
  |                                   | reference | 2.simple_exo_playback_list_view.xml.xml 在列表播放使用控制布局              | 
  |                                   | reference | 3.simple_exo_playback_top_view.xml.xml  视频封面控制布局上面                |
  |                                   | reference | 4.exo_playback_control_view.xml         exo 提供默认风格                    | 
  | player_replay_layout_id           | reference | 设置 自定义重播布局文件                                                     |
  | player_error_layout_id            | reference | 设置 自定义错误布局文件                                                     |
  | player_hint_layout_id             | reference | 设置 自定义非wifi提示布局文件                                               |
  | player_load_layout_id             | reference | 设置 自定义视频加载布局文件                                                 |
  | player_gesture_audio_layout_id    | reference | 设置 自定义手势音频调节布局                                                 |
  | player_gesture_bright_layout_id   | reference | 设置 自定义手劳亮度调节布局                                                 |
  | player_gesture_progress_layout_id | reference | 设置 自定义手劳进度调节布局                                                 |
  | player_preview_layout_id          | reference | 设置 自定义封面图布局(默认 exo_default_preview_layout.xml)                 |
  | player_list                       | boolean   | 设置 是否指定列表播放    默认 false  true 列表播放                          |
  | player_fullscreen_image_selector  | reference | 设置 自定义全屏按钮selector                                                 |
  | player_back_image                 | reference | 设置 自定义返回按钮图标                                                     |
  | default_artwork                   | reference | 设置 封面占位图                                                             |
  | show_timeout                      | integer   | 设置 控制布局隐藏时间  默认值为3秒                                          |
  | fastforward_increment             | integer   | 设置 按钮设置快进增量,以毫秒为单位(exo控制布局使用)                       |
  | rewind_increment                  | integer   | 设置 按钮设置快退增量,以毫秒为单位(exo控制布局使用)                       |
  | user_watermark                    | reference | 设置 水印图片 默认在右上角                                                  | **4. Изменить текст в диалоговом окне сети**

app.strings.xml:

Вы используете сеть, отличную от Wi-Fi. Продолжить просмотр видео? Подсказка


**5. В функциональном списке AndroidManifest.xml**:

добавить «android:configChanges="orientation|keyboardHidden|screenSize"» к узлу activity:

    ```
    <activity android:name="chuangyuan.ycj.yjplay.MainListActivity"
              android:configChanges="orientation|keyboardHidden|screenSize"
              android:screenOrientation="portrait">
    ```

### 3. Код на Java

* **1. Классы управления воспроизведением:**

   - ExoUserPlayer — базовый класс для воспроизведения, реализует базовое воспроизведение и устанавливает setPlayUri();

   - GestureVideoPlayer — воспроизведение с возможностью управления жестами (регулировка яркости и видеопрогресса, а также громкости);

   - ManualPlayer — запуск воспроизведения при нажатии кнопки, имеет функции управления жестами и воспроизведения из списка.

* **2. Методы VideoPlayerView:**

| Название | Тип | Описание |
| --- | --- | --- |
| setTitle("Заголовок") | void | Устанавливает заголовок видео |
| setExoPlayWatermarkImg(R.mipmap.watermark_big) | void | Добавляет изображение водяного знака |
| setPreviewImage(Bitmap) | void | Устанавливает изображение обложки |
| setPreviewImage(R.res.image) | void | Устанавливает изображение обложки |
| getPreviewImage() | ImageView | Возвращает элемент управления изображением обложки |

* **3. Пример кода для воспроизведения:**

ExoUserPlayer exoPlayerManager = new VideoPlayerManager.Builder(VideoPlayerManager.TYPE_PLAY_MANUAL, videoPlayerView) .setDataSource(new DataSource(this)) // Загрузка видео по протоколу RTMP .setPlayUri("rtmp://live.hkstv.hk.lxdns.com/live/hks") // Загрузка M3U8 .setPlayUri("http://dlhls.cdn.zhanqi.tv/zqlive/35180_KUDhx.m3u8") // Загрузка TS-файла .setPlayUri("http://185.73.239.15:25461/live/1/1/924.ts") // Воспроизведение локального видео .setPlayUri("/storage/emulated/0/DCIM/Camera/VID_20170717_011150.mp4") // Воспроизведение видео из списка .setPlayUri(listss); // Установка начальной позиции воспроизведения .setPosition(1000) // Пример локального пути или /storage/emulated/0/DCIM/Camera/VID_20180215_131926.mp4 .setPlayUri(Environment.getExternalStorageDirectory().getAbsolutePath()+"/VID_20170925_154925.mp4") // Включение настройки линии .setShowVideoSwitch(true) .setPlaySwitchUri(0,test,name) .setPlaySwitchUri(0, 0, getString(R.string.uri_test_11), Arrays.asList(test), Arrays.asList(name)) // Настройка скорости воспроизведения (ускорение и замедление) .setPlaybackParameters(0.5f, 0.5f) // Блокировка панели поиска для перемотки (например, в рекламных видео) .setSeekBarSeek(false) // Циклическое воспроизведение .setLooping(10) // Обратные вызовы прогресса видео .addOnWindowListener(new VideoWindowListener() { @Override


**Внимание:**
1. *exoPlayerManager.setPlayUri(Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.h264");* — локальное видео.

2. **Настройка многолинейного воспроизведения:**
    * включить настройку многолинейного воспроизведения, по умолчанию она отключена;
    * *exoPlayerManager.setShowVideoSwitch(true);*
    * поддержка списка List;
    * String [] test={"http://120.25.246.21/vrMobile/travelVideo/zhejiang_xuanchuanpian.mp4", "http://120.25.246.21/vrMobile/travelVideo/zhejiang_xuanchuanpian.mp4", http://120.25.246.21/vrMobile/travelVideo/zhejiang_xuanchuanpian.mp4};*
    * String[] name={"超清","高清","标清"};*
    * *exoPlayerManager.setPlaySwitchUri(0,test,name);*
    * настройка для нескольких разрешений и рекламного видео;
    * *exoPlayerManager.setPlaySwitchUri(0, 0, getString(R.string.uri_test_11), Arrays.asList(test), Arrays.asList(name));*
3. **Предварительный просмотр рекламного видео (легко реализовать):**
    * /***необходимо добавить параметры**/*
    * первый параметр представляет собой индекс местоположения рекламного видео;
    * *exoPlayerManager.setPlayUri(0, "http://mp4.vjshi.com/2013-07-25/2013072519392517096.mp4", "http://mp4.vjshi.com/2013-11-11/1384169050648_274.mp4");*
    * если вы обрабатываете видео во время воспроизведения самостоятельно. Реализуйте этот интерфейс обратного вызова;
    * обработка обратного вызова при переключении видео, выполнение компоновки, управление компоновкой отображения;
    * *exoPlayerManager.setOnWindowListener(new VideoWindowListener() {*
        * @Override*
        * public void onCurrentIndex(int currentIndex, int windowCount) {*
            * if (currentIndex == 0) {*
                * //скрыть управление компоновкой*
                * exoPlayerManager.hideControllerView();*
                * //если скрыть управление компоновкой, но необходимо отобразить полноэкранную кнопку. Показать вручную, восстановить автоматически при воспроизведении. Не нужно выходить*
                * videoPlayerView.getExoFullscreen().setVisibility(View.VISIBLE);*
            *} else {*
                * //восстановить управление компоновкой*
                * exoPlayerManager.showControllerView();*
            *}*
        *}*
    });*
    * пропустить операцию с рекламным видео;
    * *exoPlayerManager.next();*
4. **Настроить обработку нажатия кнопки воспроизведения:**
    * *exoPlayerManager.setOnPlayClickListener(new View.OnClickListener() {*
        * @Override*
        * public void onClick(View v) {*
            * Toast.makeText(MainCustomActivity.this,"Определение события нажатия на кнопку воспроизведения",Toast.LENGTH_LONG).show();*
            * //обработка бизнес-операций после завершения*
            * exoPlayerManager.startPlayer();//начать воспроизведение*
        *}*
     });*
5. **Назначить прослушивание обратного вызова VideoInfoListener:**
     * *exoPlayerManager.addVideoInfoListener(new VideoInfoListener() {*
         * @Override*
         * public void onPlayStart() {*
             * //начало воспроизведения*
         *}*

         *@Override*
         *public void onLoadingChanged() {*
              *//изменение загрузки*
         *}*

         *@Override*
         *public void onPlayerError(ExoPlaybackException e) {*
           *//ошибка загрузки*
        *}*

        *@Override*
        *public void onPlayEnd() {*
          *//завершение воспроизведения*
        *}*

        *@Override*
        *public void onRepeatModeChanged(int repeatMode) {*
          *//изменение режима*
        *}*
      *});*
6. **Переписать методы Activity и Fragment жизненного цикла:**
    * *Override*
    *public void onResume() {*
       *super.onResume();*
       *exoPlayerManager.onResume();*
    *}*

    *@Override*
    *public void onPause() {*
      *super.onPause();*
      *exoPlayerManager.onPause();*
    *}*

   *@Override*
   *protected void onDestroy() {*
     *exoPlayerManager.onDestroy();*
     *super.onDestroy();*
  *}*

  *@Override*
  *public void onConfigurationChanged(Configuration newConfig) {*
   *exoPlayerManager.onConfigurationChanged(newConfig);//переключение между горизонтальным и вертикальным экраном*
   *super.onConfigurationChanged(newConfig);* ### Три. [Список использования —> нажать на меня](RELEASEVIDEO_LIST.md)

### Четыре. Классы фабрики источников данных
#### 1. Источники данных по умолчанию
    * Кэш: CacheDataSourceFactory
    * HTTP: DefaultDataSourceFactory, DefaultHttpDataSourceFactory
    * Приоритет: PriorityDataSourceFactory
#### 2. Пользовательские источники данных ExoPlayer (выбрать в соответствии с требованиями)
   compile 'com.google.android.exoplayer:extension-okhttp:2.8.2'
   compile 'com.google.android.exoplayer:extension-rtmp:2.8.2'
   compile 'com.google.android.exoplayer:extension-gvr:2.8.2'
   compile 'com.google.android.exoplayer:extension-cast:2.8.2'
   compile 'com.google.android.exoplayer:extension-mediasession:2.8.2'
   compile 'com.google.android.exoplayer:extension-ima:2.8.2'
   compile 'com.google.android.exoplayer:extension-leanback:2.8.2'

### Пять. [Использование пользовательских источников данных —> нажать на меня](RELEASESOURCE.md)
### Шесть. [Использование настраиваемых макетов —> нажать на меня](READMELAYOUT.md)
### Семь. [Использование пользовательского MediaSource —> нажать на меня](RELEASEVIDEO.md) 
### Восемь. [Использование кэширования, шифрования и обработки видео —> нажать на меня](README_EN_VIDEO.md)

 ### Запутывание
   -dontwarn chuangyuan.ycj.**
   -keep class chuangyuan.ycj.** { *;}

## [Лицензия](https://github.com/yangchaojiang/yjPlay/blob/master/LICENSE)
   Лицензия Apache версии 2.0 («Лицензия»);
   вы не можете использовать этот файл, кроме как в соответствии с Лицензией.
   Вы можете получить копию Лицензии по адресу:

       http://www.apache.org/licenses/LICENSE-2.0

   Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, предоставляется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых. См. Лицензию для конкретного языка, регулирующего разрешения и ограничения по Лицензии.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yangchaojiang0515-yjPlay.git
git@api.gitlife.ru:oschina-mirror/yangchaojiang0515-yjPlay.git
oschina-mirror
yangchaojiang0515-yjPlay
yangchaojiang0515-yjPlay
master