精华内容
下载资源
问答
  • exoplayer

    2018-08-21 17:14:20
    exoplayer     构建视频播放器播放mp4流  implementation 'com.google.android.exoplayer:exoplayer:2.8.4' implementation 'com.google.android.exoplayer:exoplayer-core:2.8.4' implementation '...

    exoplayer

     

     

    • 构建视频播放器播放mp4流  
    implementation 'com.google.android.exoplayer:exoplayer:2.8.4'
    implementation 'com.google.android.exoplayer:exoplayer-core:2.8.4'
    implementation 'com.google.android.exoplayer:exoplayer-dash:2.2.8.4'
    implementation 'com.google.android.exoplayer:exoplayer-ui:2.2.8.4'
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <com.google.android.exoplayer2.ui.PlayerView
            android:id="@+id/player_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    
    </FrameLayout>
    public class ExoPlayerActivity extends AppCompatActivity {
        public static final String IMAGE_URL = "http://dl.sunshinefm.cn/mobileimg/application/cac/f49/5805ea42cd2dd.png";
    
        private PlayerView playerView;
        private SimpleExoPlayer player;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            playerView = findViewById(R.id.player_view);
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            player = ExoPlayerFactory.newSimpleInstance(this,
                    new DefaultTrackSelector());
    
            playerView.setPlayer(player);
            DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this,
                    Util.getUserAgent(this,"exo-demo"));
            ExtractorMediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory)
                    .createMediaSource(Uri.parse(IMAGE_URL));
            player.prepare(mediaSource);
            player.setPlayWhenReady(true);
        }
    @Override
    protected void onStop() {
        super.onStop();
        playerView.setPlayer(null);
        player.release();
        player = null;
    }

     

    • 如何插入广告与视频内容在一起
    implementation 'com.google.android.exoplayer:extension-ima:2.2.8.4'
    
    
    public class ExoPlayerActivity extends AppCompatActivity {
        //http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
        public static final String IMAGE_URL = "http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8";
    
        public static final String AD_URL = "http://sbslive.cnrmobile.com/storage/storage4/76/23/10/14de52115893fb5371b7e064f910ab7b.3gp";
    
        private PlayerView playerView;
        private SimpleExoPlayer player;
        ImaAdsLoader adsLoader;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            playerView = findViewById(R.id.player_view);
    
    
            adsLoader = new ImaAdsLoader(this, Uri.parse(AD_URL));
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            player = ExoPlayerFactory.newSimpleInstance(this,
                    new DefaultTrackSelector());
    
            playerView.setPlayer(player);
            DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this,
                    Util.getUserAgent(this,"exo-demo"));
            ExtractorMediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory)
                    .createMediaSource(Uri.parse(IMAGE_URL));
    
            AdsMediaSource adsMediaSource = new AdsMediaSource(mediaSource, dataSourceFactory, adsLoader,
                    playerView.getOverlayFrameLayout());
            player.prepare(adsMediaSource);
            player.setPlayWhenReady(true);
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            playerView.setPlayer(null);
            player.release();
            player = null;
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            adsLoader.release();
        }
    } 

     

    • 音频播放在后台服务
    public class AudioPlayerService extends Service {
    
    
        String[] urls = {"http://live.cc.52ytv.cn/fm/2/3809088728/54abb17d92e5e.m3u8","http://live.cc.52ytv.cn/fm/2/3809088729/54abb17d92eb3.m3u8"};
        String[] imags = {"http://ubmcmm.baidustatic.com/media/v1/0f000D3Tc9-rZbcEkUN9O0.jpg","http://ubmcmm.baidustatic.com/media/v1/0f000D3Tc9-rZbcEkUN9O0.jpg"};
        String[] title ={"name","text"};
        private SimpleExoPlayer player;
        private PlayerNotificationManager playerNotificationManager;
    
        @Override
        public void onCreate() {
            super.onCreate();
            final Context context = this;
            player = ExoPlayerFactory.newSimpleInstance(this,
                    new DefaultTrackSelector());
    
            DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this,
                    Util.getUserAgent(this,"AudioDemo"));
    
            ConcatenatingMediaSource concatenatingMediaSource = new ConcatenatingMediaSource();
            for (int i=0;i<urls.length;i++){
                MediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).
                        createMediaSource(Uri.parse(urls[i]));
                concatenatingMediaSource.addMediaSource(mediaSource);
            }
            player.prepare(concatenatingMediaSource);
            player.setPlayWhenReady(true);
    
            playerNotificationManager = PlayerNotificationManager.createWithNotificationChannel(
                    context,"CHANNEL",R.string.app_name,1000,new PlayerNotificationManager.MediaDescriptionAdapter() {
                @Override
                public String getCurrentContentTitle(Player player) {
                    return title[player.getCurrentWindowIndex()];
                }
    
                @Nullable
                @Override
                public PendingIntent createCurrentContentIntent(Player player) {
                    Intent intent = new Intent(context,ExoPlayerActivity.class);
                    return PendingIntent.getActivity(context,0,intent,
                            PendingIntent.FLAG_UPDATE_CURRENT);
                }
    
                @Nullable
                @Override
                public String getCurrentContentText(Player player) {
                    return title[player.getCurrentWindowIndex()];
                }
    
                @Nullable
                @Override
                public Bitmap getCurrentLargeIcon(Player player, PlayerNotificationManager.BitmapCallback callback) {
                    Resources res = getResources();
                    Bitmap bmp = BitmapFactory.decodeResource(res, R.mipmap.ic_launcher);
                    return bmp;
                }
            });
    
            playerNotificationManager.setNotificationListener(new PlayerNotificationManager.NotificationListener() {
                @Override
                public void onNotificationStarted(int notificationId, Notification notification) {
                    startForeground(notificationId,notification);
                }
    
                @Override
                public void onNotificationCancelled(int notificationId) {
                    stopSelf();
                }
            });
            playerNotificationManager.setPlayer(player);
        }
    
    
        @Override
        public void onDestroy() {
            playerNotificationManager.setPlayer(null);
            player.release();
            player = null;
            super.onDestroy();
        }
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
    

      

    • 使用android MediaSessions
    • exoplayer新功能下载媒体离线播放

     

    展开全文
  • EXOplayer

    2017-12-13 11:52:43
    使用google开源框架Exoplayer开发自定义播放器 【翻译】安卓新播放器EXOplayer介绍 ExoPlayer 开发者指导 EXOplayer API 转载于:https://juejin.im/post/5a31148b51882503eb4b4756...
    展开全文
  • ExoPlayer

    千次阅读 2017-06-01 21:57:57
    google文档明确指出,ExoPlayer是拓展和方便MediaPlayer应用而开发的。支持更多的功能和特性。 由于是在MediaPlayer基础上拓展的,所以,所有MediaPlayer的API和所支持的音视频特质均有增无减。 DASH,

    我个人的笔记一般比较随便,层次只有自己看的明白。

    对于自己发的东西,不喜欢码字码版面,不错,我就是这么偏执。


     ExoPlayer:

    google文档明确指出,ExoPlayer是拓展和方便MediaPlayer应用而开发的。支持更多的功能和特性。

    由于是在MediaPlayer基础上拓展的,所以,所有MediaPlayer的API和所支持的音视频特质均有增无减。


    DASH, SmoothStreaming and HLS adaptive streams, as well as formats such as
    MP4, M4A, FMP4, WebM, MKV, MP3, Ogg, WAV, MPEG-TS, MPEG-PS, FLV and ADTS (AAC). 
    It also discusses ExoPlayer events, messages, customization and DRM support.

        compile 'com.google.android.exoplayer:exoplayer:r2.X.X'
        compile 'com.google.android.exoplayer:exoplayer-core:r2.X.X'
        compile 'com.google.android.exoplayer:exoplayer-dash:r2.X.X'

        compile 'com.google.android.exoplayer:exoplayer-ui:r2.X.X'


    其他功能支持库:
    exoplayer-core: Core functionality (required).
    exoplayer-dash: Support for DASH content.
    exoplayer-hls: Support for HLS content.
    exoplayer-smoothstreaming: Support for SmoothStreaming content.
    exoplayer-ui: UI components and resources for use with ExoPlayer.


    creating player:
    //Create a default TrackSelector
    Handler mainHandler = new Handler();
    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    //Create the player
    SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context, trackSelector);
    /**
     * SimpleExoPlayerView, which encapsulates a PlaybackControlView and a Surface onto which video is rendered. 
     * setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder and setVideoSurface.
     * simpleExoPayerView.setPlayer(player);
    **/



    preparing:
    // Measures bandwidth during playback. Can be null if not required.
    DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    // Produces DataSource instances through which media data is loaded.
    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,Util.getUserAgent(context, "yourApplicationName"), bandwidthMeter);
    // Produces Extractor instances for parsing the media data.
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    // This is the MediaSource representing the media to be played.
    MediaSource videoSource = new ExtractorMediaSource(mp4VideoUri,dataSourceFactory, extractorsFactory, null, null);
    // Prepare the player with the source.
    player.prepare(videoSource);


    这里的意思是说,ExoPlayer对于媒体源都是用实现MediaSource来封装复用的。这一点,有点像对androidAnimatio封装,可以叠合。
        DASH:DashMediaSource
        SmoothStreaming:SsMediaSource
        HLS:HlsMediaSource
        regular media:ExtractorMediaSource
    setPlayWhenReady();seekTo();
    ExoPlayer.release

    //合并播放
    MediaSource videoSource = new ExtractorMediaSource(videoUri,...);
    MediaSource subtitleSource = new SingleSampleMediaSource(subtitleUri,...);
    //Plays the video with the sideloaded subtitle
    MergingMediaSource mergedSource = new MergingMediaSource(videoSouce,subtitleSource);

    //循环播放
    MediaSource source = new ExtractorMediaSource(videoUri,...);
    //Loops the video indefinitely.
    LoopingMediaSource loopingSouce = new LoopingMediaSource(source(,int));

    //播放一个视频序列
    MediaSource firstSource = new ExtractorMediaSource(firstVideoUri,...);
    MediaSource secondSource = new ExtratorMediaSource(secondVideoUri,...);
    //Plays the first video,then the second video
    ConcatenatingMediaSource concatenatedSource = new ConcatenatingMediaSource(firstSource,secondSource);


    在ExoPlayer的特性中,是支持数字版权的,Digit Rights Manager,DRM,具体的可以查看google的相信文档,这里只是抛砖引玉。还要说的是,DRM和Exo的一些东西,需要在android4.4之后才有支持。所以在选型时,还要考虑更多的东西。。如果没记错的话,BiLibiLi,也就是B站,在自己封装的解编码框架基础上,实现了一个类似ExoPlayer的东西。可以作为选型的方案之一。


    Google提供这样的支持库,扩展和强化功能,已经不是一点两点的事了。在以前的使用有一个CustomWeb好像,记不清了,用新的思想来加载WebView,对于原理和项目我也记不清了,支持到这是对android WebView的提高和优化,并不是去解决浏览器渲染核心这个级别的问题。



    展开全文
  • ExoPlayer_Application:探索EXOPLAYER
  • ExoPlayer ExoPlayer is an application level media player for Android. It provides an alternative to Android’s MediaPlayer API for playing audio and video both locally and over the Internet. ...
  • Exoplayer 2.0

    2020-12-09 06:28:59
    When do you expect to support Exoplayer 2 on Amazon devices? Exoplayer 2 fixed an issue for our Widevine-Dash content on Android devices <p>https://github.com/google/ExoPlayer/issues/1813</p><p>该提问...
  • ExoPlayer 2.6

    2020-12-09 12:01:14
    <div><p>Hi. Do you have an estimate of when you expect to update this port to ExoPlayer 2.6?</p><p>该提问来源于开源项目:amzn/exoplayer-amazon-port</p></div>
  • Exoplayer2

    2020-12-31 15:20:23
    <div><p>Do you attend to support exoplayer2?</p><p>该提问来源于开源项目:gearvrf/GearVRf-Demos</p></div>
  • ExoPlayer尝鲜

    2020-04-25 19:52:04
    本文是根据ExoPlayer的HelloWorld文档翻译而来 Hello world! Another way to get started is to work through the ExoPlayer codelab. 开始上手的另一种方式是通过ExoPlayer codelab. For simple use cases, getting...

    前言:
    本文是根据ExoPlayer的HelloWorld文档翻译而来

    Hello world!
    Another way to get started is to work through the ExoPlayer codelab.
    开始上手的另一种方式是通过ExoPlayer codelab.

    For simple use cases, getting started with ExoPlayer consists of implementing the following steps:
    做一些简单的使用案例,上手ExoPlayer按照下面的步骤实现

    1.Add ExoPlayer as a dependency to your project.
    添加ExoPlayer依赖到你的工程中
    2.Create a SimpleExoPlayer instance.
    创建一个SimpleExoPlayer实例对象
    3.Attach the player to a view (for video output and user input).
    关联播放器到视图,(视频输出,用户输入)
    4.Prepare the player with a MediaSource to play.
    为播放器准备一个MediaSource播放
    5.Release the player when done.
    结束使用时,释放播放器
    These steps are described in more detail below. For a complete example, refer to PlayerActivity in the main demo app.
    这些步骤在下面的描述中更加详细,一个更完整的例子在PlayerAtivity的演示版本app中

    Adding ExoPlayer as a dependency
    添加ExoPlayer依赖
    Add repositories
    添加仓库
    The first step to getting started is to make sure you have the Google and JCenter repositories included in the build.gradle file in the root of your project.
    开始之前的第一步要确保你有google和jcenter仓库在你的工程根目录下的build.gradle文件中引入

    repositories {
        google()
        jcenter()
    }
    

    Add ExoPlayer modules
    添加ExoPlayer的模块

    Next add a dependency in the build.gradle file of your app module. The following will add a dependency to the full ExoPlayer library:
    接下来添加一个依赖在你app模块的build.gradle文件当中。下面是一个完整的ExoPlayer哭的依赖添加

    implementation ‘com.google.android.exoplayer:exoplayer:2.X.X’
    where 2.X.X is your preferred version (the latest version can be found by consulting the release notes).

    As an alternative to the full library, you can depend on only the library modules that you actually need. For example the following will add dependencies on the Core, DASH and UI library modules, as might be required for an app that plays DASH content:
    除了依赖整个库,你也可以只依赖你需要的库。下面的这个例子将添加核心
    根据你的需要选择
    implementation ‘com.google.android.exoplayer:exoplayer-core:2.X.X’
    implementation ‘com.google.android.exoplayer:exoplayer-dash:2.X.X’
    implementation ‘com.google.android.exoplayer:exoplayer-ui:2.X.X’
    The available library modules are listed below. Adding a dependency to the full ExoPlayer library is equivalent to adding dependencies on all of the library modules individually.

    exoplayer-core: Core functionality (required).
    exoplayer-dash: Support for DASH content.
    exoplayer-hls: Support for HLS content.
    exoplayer-smoothstreaming: Support for SmoothStreaming content.
    exoplayer-ui: UI components and resources for use with ExoPlayer.
    In addition to library modules, ExoPlayer has multiple extension modules that depend on external libraries to provide additional functionality. Browse the extensions directory and their individual READMEs for details.

    Turn on Java 8 support
    If not enabled already, you need to turn on Java 8 support in all build.gradle files depending on ExoPlayer, by adding the following to the android section:

    compileOptions {
      targetCompatibility JavaVersion.VERSION_1_8
    }
    

    Creating the player
    创建一个播放器

    You can create an ExoPlayer instance using SimpleExoPlayer.Builder or ExoPlayer.Builder. The builders provide a range of customization options for creating ExoPlayer instances. For the vast majority of use cases SimpleExoPlayer.Builder should be used. This builder returns SimpleExoPlayer, which extends ExoPlayer to add additional high level player functionality. The code below is an example of creating a SimpleExoPlayer.
    您可以ExoPlayer使用SimpleExoPlayer.Builder或 创建实例ExoPlayer.Builder。这些构建器提供了一系列用于创建ExoPlayer实例的定制选项。对于绝大多数用例, SimpleExoPlayer.Builder都应使用。此构建器返回 SimpleExoPlayer,它扩展ExoPlayer为添加其他高级播放器功能。以下代码是创建的示例SimpleExoPlayer。

    SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build();
    

    A note on threading
    关于线程的说明
    ExoPlayer instances must be accessed from a single application thread. For the vast majority of cases this should be the application’s main thread. Using the application’s main thread is a requirement when using ExoPlayer’s UI components or the IMA extension.
    The thread on which an ExoPlayer instance must be accessed can be explicitly specified by passing a Looper when creating the player. If no Looper is specified, then the Looper of the thread that the player is created on is used, or if that thread does not have a Looper, the Looper of the application’s main thread is used. In all cases the Looper of the thread from which the player must be accessed can be queried using Player.getApplicationLooper.
    If you see “Player is accessed on the wrong thread” warnings, some code in your app is accessing a SimpleExoPlayer instance on the wrong thread (the logged stack trace shows you where!). This is not safe and may result in unexpected or obscure errors.
    For more information about ExoPlayer’s treading model, see the “Threading model” section of the ExoPlayer Javadoc.

    必须从单个应用程序线程访问ExoPlayer实例。在绝大多数情况下,这应该是应用程序的主线程。使用ExoPlayer的UI组件或IMA扩展时,必须使用应用程序的主线程。

    Looper创建播放器时,可以通过传递a来显式指定必须访问ExoPlayer实例的线程。如果未Looper指定no ,则Looper使用创建播放器的线程的,或者如果该线程没有Looper,Looper则使用应用程序的主线程的。在所有情况下,Looper都可以使用来查询必须从中访问播放器的线程的线程 Player.getApplicationLooper。

    如果看到“在错误的线程上访问了播放器”警告,则表明应用程序中的某些代码正在SimpleExoPlayer错误的线程上访问实例(记录的堆栈跟踪显示了您的位置!)。这是不安全的,并且可能导致意外或模糊的错误。

    有关ExoPlayer的踩踏模型的更多信息,请参见ExoPlayer Javadoc的 “线程模型”部分。

    Attaching the player to a view
    将播放器附加到视图
    The ExoPlayer library provides a PlayerView, which encapsulates a PlayerControlView, a SubtitleView, and a Surface onto which video is rendered. A PlayerView can be included in your application’s layout xml. Binding the player to the view is as simple as:
    ExoPlayer库提供了一个PlayerView,其中封装了 PlayerControlView,a SubtitleView和a Surface渲染视频。一个PlayerView可以包含在应用程序的布局XML。将播放器绑定到视图很简单:

    // Bind the player to the view.
    playerView.setPlayer(player);
    

    If you require fine-grained control over the player controls and the Surface onto which video is rendered, you can set the player’s target SurfaceView, TextureView, SurfaceHolder or Surface directly using SimpleExoPlayer’s setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder and setVideoSurface methods respectively. You can also use PlayerControlView as a standalone component, or implement your own playback controls that interact directly with the player. SimpleExoPlayer’s addTextOutput method can be used to receive captions during playback.

    如果您需要在播放器控制细粒度的控制和Surface 在其上渲染视频,可以设置玩家的目标SurfaceView, TextureView,SurfaceHolder或Surface直接使用SimpleExoPlayer的 setVideoSurfaceView,setVideoTextureView,setVideoSurfaceHolder和 setVideoSurface分别的方法。您还可以PlayerControlView用作独立组件,或实现自己的播放控件,这些控件直接与播放器进行交互。SimpleExoPlayer的addTextOutput方法可用于在播放期间接收字幕。

    Preparing the player
    准备播放器
    In ExoPlayer every piece of media is represented by a MediaSource. To play a piece of media you must first create a corresponding MediaSource and then pass this object to ExoPlayer.prepare. The ExoPlayer library provides MediaSource implementations for DASH (DashMediaSource), SmoothStreaming (SsMediaSource), HLS (HlsMediaSource) and regular media files (ProgressiveMediaSource). The following code shows how to prepare the player with a MediaSource suitable for playback of an MP4 file.
    在ExoPlayer中,每个媒体都由表示MediaSource。要播放某种媒体,您必须先创建一个对应的媒体MediaSource,然后将此对象传递给ExoPlayer.prepare。ExoPlayer库提供 MediaSource了DASH(DashMediaSource),SmoothStreaming(SsMediaSource),HLS(HlsMediaSource)和常规媒体文件(ProgressiveMediaSource)的实现。以下代码显示了如何准备MediaSource适合播放MP4文件的播放器。

    // Produces DataSource instances through which media data is loaded.
    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
        Util.getUserAgent(context, "yourApplicationName"));
    // This is the MediaSource representing the media to be played.
    MediaSource videoSource =
        new ProgressiveMediaSource.Factory(dataSourceFactory)
            .createMediaSource(mp4VideoUri);
    // Prepare the player with the source.
    player.prepare(videoSource);
    

    Controlling the player
    控制播放器
    Once the player has been prepared, playback can be controlled by calling methods on the player. For example setPlayWhenReady starts and pauses playback, the various seekTo methods seek within the media,setRepeatMode controls if and how media is looped, setShuffleModeEnabled controls playlist shuffling, and setPlaybackParameters adjusts playback speed and pitch.

    If the player is bound to a PlayerView or PlayerControlView, then user interaction with these components will cause corresponding methods on the player to be invoked.
    准备好播放器后,可以通过调用播放器上的方法来控制播放。例如,setPlayWhenReady开始和暂停播放,各种seekTo方法都可以在媒体中进行搜索,setRepeatMode控制是否循环媒体以及如何循环播放,setShuffleModeEnabled控制播放列表改组以及 setPlaybackParameters调整播放速度和音高。

    如果播放器绑定到PlayerView或PlayerControlView,则用户与这些组件的交互将导致调用播放器上的相应方法。

    Releasing the player
    释放播放器
    It’s important to release the player when it’s no longer needed, so as to free up limited resources such as video decoders for use by other applications. This can be done by calling ExoPlayer.release.
    重要的是在不再需要播放器时将其释放,以释放有限的资源(例如视频解码器)供其他应用程序使用。这可以通过调用来完成ExoPlayer.release。

    展开全文
  • exoplayer-textureview, 用于TextureView的ExoPlayer的包装器 exoplayer-textureview 用于TextureView的ExoPlayer 包装器。exoplayer的版本是 r1.5.11特性播放HLS播放列表在资产文件夹中播放本地视频。设置比特率...
  • Exoplayer implementation

    2020-12-26 06:13:11
    <div><p>This PR introduces new advancements bringing exoplayer to android client. <p>In this PR is included basic event propagation, like play, pause, end and playing. Playing given file it will start...
  • Seems to be a crash within ExoPlayer. We updated ExoPlayer recently. <p><strong>Steps to reproduce</strong>: <p>Was not able to reproduce <p><strong>Environment</strong>: [Settings you have changed,...
  • Android ExoPlayer播放器

    2017-09-11 10:19:08
    Android ExoPlayer播放器实现,通过google官方自带的播放器ExoPlayer实现播放网络URL和本地视频,更过设置请移步官网地址:https://google.github.io/ExoPlayer/guide.html
  • 使用ExoPlayer进行媒体流 此存储库中的代码进行。 如果您想开始使用那么代码实验室是一个不错的起点。
  • ExoPlayer-SurfaceView

    2016-08-11 12:35:02
    1.Exoplayer视频播放,支持横竖屏播放。 2.在build.gradle文件中编译“com.google.android.exoplayerexoplayer:rX.XX” 3.使用SurfaceView
  • ExoPlayer 探营

    2019-07-09 14:38:30
    ExoPlayer 探营 阅读 2154 收藏 38 2017-02-05 原文链接:mijack.github.io 1.什么是ExoPlayer ExoPlayer是谷歌官方主导基于低层媒体API(如MediaCodec,AudioTrack,MediaDrm)开发的Android媒体播放库,整体...
  • EXOplayer简书

    千次阅读 2016-09-05 15:07:33
    EXOplayer 使用google开源框架Exoplayer开发自定义播放器 【翻译】安卓新播放器EXOplayer介绍 ExoPlayer 开发者指导 EXOplayer API
  • EXOPlayer简要学习及应用

    万次阅读 2017-08-25 23:23:11
    EXOPlayer
  • exoplayer-realistic-源码

    2021-03-19 10:25:52
    exoplayer-realistic
  • 最新 Exoplayer 源代码

    2019-03-27 14:44:51
    ExoPlayer是运行在YouTube app Android版本上的视频播放器, 很好的学习资料, ExoPlayer是构建在Android低水平媒体API之上的一个应用层媒体播放器。和Android内置的媒体播放器相比,ExoPlayer有许多优点。...
  • ExoPlayer 引入

    2019-11-13 10:32:09
    Exoplayer 引入记录1.新建工程,会自带以下代码, 不多说2.项目建立成功后,在build.gradle(Module:app) `dependencies`的引入3.继续在 build.gradle(Module:app) 里面引入4.Sync Project5.运行结尾 官方文档:...
  • ExoPlayer浅析

    千次阅读 2017-04-21 10:29:25
    ExoPlayer是个什么高大上的东西?怎么用?如何用?有哪些优缺点?相比IjkPlayer和Viatimo有那些区别? ExoPlayer是什么? ExoPlayer是一个开源媒体播放器,App等级的媒体API。 ExoPlayer的优缺点: ExoPlayer相较于...
  • EXOPlayer.jar

    2016-05-30 10:36:10
    ExoPlayer 是 Android 上一个应用级的媒体播放器。它为 Android MediaPlayer 的 API 在播放本地或在线的视频与音频上提供了一个候选。ExoPlayer 支持一些 Android MediaPlayer API 无法提供的特性,包括 DASH 和 ...
  • ExoPlayer视频播放器

    2018-06-05 14:31:42
    基于google的exoplayer的播放器,能播放多个码流根据带宽自动切换码流,也可手动切换码流,支持窗口预览
  • ExoPlayer OutDated?

    2020-12-09 04:43:14
    <div><p>The ExoPlayer in the app is outdated, Which when I am playing HLS stream, it causes it to skip. <p>Can the ExoPlayer be updated or even changed to videoView?</p><p>该提问来源于开源项目:...
  • ExoPlayer (待修订)

    千次阅读 2016-07-08 14:35:11
    ExoPlayer
  • ExoPlayer的源码非常复杂,抽空看了几周的源码过后,决定以博客的形式将之前整理的笔记同大家分享,希望对于刚接触ExoPlayer的新人能有一定的帮助和指导作用,当然,本人能力有限,有些分析不对的地方也恳请大家指正...
  • ExoPlayer 浅析

    千次阅读 2017-02-09 10:25:06
    ExoPlayer is an application level media player for Android. It provides an alternative to Android’s MediaPlayer API for playing audio and video both locally and over the Internet. ExoPlayer supports ...
  • exoplayer.jar

    2016-09-02 13:18:55
    ExoPlayer 是 Android 上一个应用媒体播放器。它为 Android MediaPlayer 的 API 在播放本地或在线的视频与音频上提供了一个候选

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,560
精华内容 624
关键字:

exoplayer