使用IjkPlayer 实现直播功能

最近直播很火,是的,很火很火!

我也想搞一下这个很火很火的东西,怎么办?

那懂ffmpeg吗?

好吧,我不懂,所以我就瞄上了哔哩哔哩的ijkplayer了。

ijkplayer是哔哩哔哩开源的一个播放器,可以支持本地播放,视频直播等功能。

如果你时间很充裕,并且富有学习精神,那你要先去Github上把它的源码clone下来,是的你自己要先去编译它的源代码。那么你需要安装NDK,因为有些复杂,这里不介绍了。我们直接搞现成的。怎么样?你们喜欢吗?不喜欢也没办法,我们就直接搞!

这里使用的是AndroidStudio 2.1.3,我们只需要在build.gradle里声明一下依赖,如下:

dependencies {
    # required, enough for most devices.
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.6.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.1'

    # Other ABIs: optional
    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.6.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.6.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.6.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.6.1'

    # ExoPlayer as IMediaPlayer: optional, experimental
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.6.1'
}

这里涉及到了64位的处理器;ijkplayer在64位下要求最低SDK版本为21。

我们只需要下面这些,把64位的剔出去:

//    # required, enough for most devices.
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.6.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.1'

//    # Other ABIs: optional
    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.6.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.6.1'

//    # ExoPlayer as IMediaPlayer: optional, experimental
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.6.1'

然后我们需要导入一些代码,这些代码就在这里:

还有一些string,导入进来就OK,这样我们的工作完成了一大半了,剩下的就简单了。

首先我们在布局里引入ijkplayer的播放视频的控件IjkVideoView:

    <tv.danmaku.ijk.media.widget.media.IjkVideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"/>       

然后在代码里这样写:

mVideoPath = getIntent().getStringExtra("stream_addr");
mVideoView = (IjkVideoView) findViewById(R.id.video_view);
// init player
IjkMediaPlayer.loadLibrariesOnce(null);
IjkMediaPlayer.native_profileBegin("libijkplayer.so");
if (mVideoPath != null) {
    mVideoView.setVideoPath(mVideoPath);
}
mVideoView.start();

最后声明一下权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />

好了。基本步骤完了。

我们去哪里搞数据呢?我们去哪里搞美女的直播视频呢?这里对映客直播说声对不起,我要在你那里搞数据。具体怎么抓的数据,我就不告诉你我用的Charles。具体怎么抓的就不讲了,网上很多讲这个的。

最后我们的效果是这样的:

关于有些头像不显示,因为映客直播的这些图使用的是不同的地址,我没有深究,所有大家凑合着看吧。

还有我改了一些代码,删掉一些不用的代码:

比如AndroidMediaController,调整视频的播放比例。可能有的人在集成ijkplayer的时候遇到视频播放的时候,两边会有白边(蓝边)的事情,其实就是修改一下视频的播放比例就OK了。代码都在IjkVideoView里,去设置一下mCurrentAspectRatio这个属性就OK。

源码在这里

不知道这样要不要负法律责任,如果犯法,我就删掉源码了!作为法盲,麻烦看到提示一下。

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Android ijkplayer是一款强大的多媒体播放器库,可以用于在Android设备上播放各种音视频格式。其中,它也支持直播RTMP协议。 RTMP(Real-Time Messaging Protocol)是一种用于实时数据传输的协议,常用于音视频流的传输,尤其适用于直播场景。通过使用Android ijkplayer,我们可以实现在Android设备上直播RTMP流。 要使用ijkplayer进行RTMP直播,首先需要在Android项目中导入ijkplayer库,并在代码中进行相应设置。具体步骤如下: 1. 在项目的build.gradle文件中添加ijkplayer库的依赖: ```java implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8' ``` 2. 在布局文件中添加一个SurfaceView来展示播放器画面: ```xml <SurfaceView android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 在代码中初始化播放器并设置RTMP源: ```java IjkMediaPlayer ijkMediaPlayer = new IjkMediaPlayer(); ijkMediaPlayer.setDataSource("rtmp://your_rtmp_stream_url"); ijkMediaPlayer.setDisplay(surfaceView.getHolder()); ijkMediaPlayer.prepareAsync(); ``` 4. 监听播放器的准备完成事件,并开始播放: ```java ijkMediaPlayer.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() { @Override public void onPrepared(IMediaPlayer mp) { ijkMediaPlayer.start(); } }); ``` 这样,你就可以在Android设备上直播RTMP流了。ijkplayer提供了丰富的功能和接口,可以实现视频播放、暂停、重连以及全屏等操作。同时,它还支持自定义界面和样式,使得直播RTMP更加灵活和个性化。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值