基于ijkplayer的GSYVideoPlayer

  • rtmp协议播放器的简单应用
    • **添加依赖**
    • **Manifest配置**
    • **Layout布局**
      • activity_start.xml
      • activity_main2.xml
      • simple_spinner_item.xml
    • **Java代码**
      • StartActivity.java
      • Main2Activity.java
      • SpinnerHelper.java
    • **参数设置**
      • 链接1:[link](https://blog.csdn.net/u013241923/article/details/83544458)
      • 链接2:[link]( https://www.jianshu.com/p/496257563f69?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation)

rtmp协议播放器的简单应用

添加依赖

implementation ‘com.shuyu:gsyVideoPlayer-java:6.0.1’
//是否需要ExoPlayer模式
implementation ‘com.shuyu:GSYVideoPlayer-exo2:6.0.1’
//更多ijk的编码支持
implementation ‘com.shuyu:gsyVideoPlayer-ex_so:6.0.1’

Manifest配置

    <activity android:name=".StartActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".Main2Activity"android:configChanges="keyboardHidden|orientation|screenSize"android:screenOrientation="sensor"></activity>

Layout布局

activity_start.xml

<Spinnerandroid:id="@+id/spinner_url"android:layout_width="match_parent"android:layout_height="wrap_content"/>
<EditTextandroid:id="@+id/edit_text_url"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="50dp"/>
<Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dip"android:layout_marginTop="100dp"android:text="播放"android:layout_alignParentRight="true"/>

activity_main2.xml

<com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayerandroid:id="@+id/videoPlayer"android:layout_width="match_parent"android:layout_height="match_parent">
</com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer>

simple_spinner_item.xml

Java代码

StartActivity.java

private Button btn;
private EditText et;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_start);getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);et = (EditText) findViewById(R.id.edit_text_url);SparseArray<String> data = new SparseArray<>();data.put(data.size(), "rtmp://61.174.252.50:46948/live/home");data.put(data.size(), "rtmp://61.174.252.50:46908/live/home");SpinnerHelper.with(this).setData(data).setClickHandler(new SpinnerHelper.ClickHandler() {@Overridepublic void onSpinnerClicked(int index, int key, String value) {et.setText(value);}}).init(R.id.spinner_url);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {String rtmpUrl = et.getText().toString();if (TextUtils.isEmpty(rtmpUrl)) {Toast.makeText(StartActivity.this, "请输入播放地址", Toast.LENGTH_SHORT).show();} else {Intent intent = new Intent(StartActivity.this, Main2Activity.class);intent.putExtra("rtmp_url", rtmpUrl);startActivity(intent);}}});}

Main2Activity.java

public StandardGSYVideoPlayer videoPlayer;
OrientationUtils orientationUtils;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);//PlayerFactory.setPlayManager(IjkPlayerManager.class);init();
}private void init() {videoPlayer =  (StandardGSYVideoPlayer)findViewById(R.id.videoPlayer);/**此中内容:优化加载速度,降低延迟*/VideoOptionModel videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp");List<VideoOptionModel> list = new ArrayList<>();list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_flags", "prefer_tcp");list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "allowed_media_types", "video"); //根据媒体类型来配置list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "timeout", 20000);list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "buffer_size", 1316);list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "infbuf", 1);  // 无限读list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 1); //需要准备好后自动播放list.add(videoOptionModel);/**rtmp秒开*/videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT,"analyzemaxduration", 100);list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 10240);list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1);list.add(videoOptionModel);//关闭播放器缓冲,这个必须关闭,否则会出现播放一段时间后,一直卡主,控制台打印 FFP_MSG_BUFFERING_STARTvideoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0);list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);list.add(videoOptionModel);/**rtmp实时*/videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0);list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "http-detect-range-support", 0);list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);list.add(videoOptionModel);videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 8);list.add(videoOptionModel);GSYVideoManager.instance().setOptionModelList(list);String source1 = getIntent().getStringExtra("rtmp_url");videoPlayer.setUp(source1, true, "");videoPlayer.getTitleTextView().setVisibility(View.GONE);videoPlayer.getBackButton().setVisibility(View.GONE);videoPlayer.startPlayLogic();
}
@Override
protected void onPause() {super.onPause();videoPlayer.onVideoPause();
}@Override
protected void onResume() {super.onResume();videoPlayer.onVideoResume();
}@Override
protected void onDestroy() {super.onDestroy();videoPlayer.setVideoAllCallBack(null);GSYVideoManager.releaseAllVideos();if (orientationUtils != null)orientationUtils.releaseListener();
}@Override
public void onBackPressed() {//先返回正常状态if (orientationUtils != null && orientationUtils.getScreenType() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {videoPlayer.getFullscreenButton().performClick();return;}//释放所有videoPlayer.setVideoAllCallBack(null);super.onBackPressed();
}

SpinnerHelper.java

private Activity activity;
private SparseArray<String> data;
private ClickHandler clickHandler;
private int defaultKey;public interface ClickHandler{void onSpinnerClicked(int index, int key, String value);
}public SpinnerHelper(Activity activity) {this.activity = activity;
}public SpinnerHelper setDefault(int key){defaultKey = key;return this;
}public SpinnerHelper setData(SparseArray<String> data){this.data = data;return this;
}public SpinnerHelper setClickHandler(ClickHandler clickHandler){this.clickHandler = clickHandler;return this;
}public void init(int id){if (data == null){return;}Spinner spinner = (Spinner) activity.findViewById(id);ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, R.layout.simple_spinner_item);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);for (int i = 0; i < data.size(); i++){String value = data.valueAt(i);adapter.add(value);}spinner.setAdapter(adapter);int index = data.indexOfKey(defaultKey);index = index == -1 ? 0 : index;spinner.setSelection(index);spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {int key = data.keyAt(position);String value = data.valueAt(position);if (clickHandler != null){clickHandler.onSpinnerClicked(position,key,value);}}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});
}public static SpinnerHelper with(Activity activity){return new SpinnerHelper(activity);
}

参数设置

链接1:link

链接2:link

GSYVideoPlayer(基于ijkplayer)之rtmp协议播放器的简单应用相关推荐

  1. android 基于ijkplayer项目进行的播放器

    jjdxm_ijkplayer 项目地址:jjdxm_ijkplayer 简介:基于 ijkplayer 简单的 UI 界面 当前项目是基于 ijkplayer 项目进行的播放器界面 UI 封装. 是 ...

  2. 基于IJK打造自己的播放器(一) 简单集成使用ijkPlayer播放hls视频

    一 前言 ijk播放器的背景我就不多说了.随便一搜就有,我想说的是,这篇文章只是教大家适合使用ijkplayer. 这里适合新手.简单说一下我们常用的播放视频.一般来说,播放视频分成视频显示控件.视频 ...

  3. 基于嵌入式Linux的MP3播放器的设计与实现

    摘要:本文详细介绍了嵌入式系统的特点以及嵌入式系统开发的流程,分析基于嵌入式Linux的MP3播放器的关键技术,设计和实现了一种基于嵌入式系统的 MP3 播放器.该播放器利用 QT 技术和开源的音频解 ...

  4. linux 嵌入式 播放器,基于Linux的嵌入式媒体播放器研究

    摘要: 计算机多媒体技术和嵌入式技术的高速发展,各种集计算机.通信.消费电子产品等特征于一体的电子产品得以广泛应用,嵌入式媒体播放器已经成为此类产品中主要的应用软件.同时,随着Linux系统在各种嵌入 ...

  5. 基于FPGA设计的音乐播放器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 基于FPGA设计的音乐播放器 一.生成PCM音频格式的音乐文件 1.PCM音频文件格式 2.Matlab读取WAV文件 二. ...

  6. 【基于Qt的在线音乐播放器】

    基于Qt的在线音乐播放器 项目功能: 本在线音乐播放器的功能在于创建一个音乐播放器页面,可以实现搜索功能通过HTTP协议获取网络中数据并解析出来,播放搜索到的歌曲并展示相关信息.效果如图: 相关类及功 ...

  7. android 直播流服务器,视频-Android上的实时流RTMP / RTSP播放器,无需使用webview(WOWZA服务器)...

    视频-Android上的实时流RTMP / RTSP播放器,无需使用webview(WOWZA服务器) 我正在开发一个Android应用程序,我想在其中发布和播放视频... 我想要的是: 我的应用记录 ...

  8. 基于智能手机Android平台音乐播放器全程开发实战

    基于android开发的智能手机平台的应用越来越多,目前也是一块比较热门的技术,本项目为基于android系统的音乐播放器项目,学习本项目的目的是为了让学员尽快掌握android领域的小应用的开发.项 ...

  9. Android、iOS平台RTMP/RTSP播放器实现实时音量调节

    介绍移动端RTMP.RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对 ...

最新文章

  1. VS2019安装Image Watch与失败解决方法
  2. matlab读取txt
  3. eplan导出部件汇总表_干货分享:西门子产品数据表导入到博途和EPLAN应用举例...
  4. JoshChen防止前台恶意修改数据
  5. vc++出现warningC4819的处理方法
  6. solaris下用户不能正常登录CDE界面的解决办法
  7. 1.1 版本控管与Git
  8. 基于Laravel+VueJS实战开发WebAPP
  9. C语言数据结构——用链表实现一个简单的电话号码簿
  10. 虚拟税务ukey托管服务器,税务Ukey托管来啦,给它一个家!企业开票更方便
  11. Drools教程(基础篇)——Eclipse下Drools运行时安装
  12. 阿里云服务器Discuz论坛程序安装
  13. 酱爆如花四眼仔,周星驰金牌配角不止吴孟达,他们名字都没人知道
  14. 如何使用css3做简单的动画效果?
  15. Android compileSdkVersion27+ was not granted this permission: android.permission.WRITE_SETTINGS.
  16. 软件分类(自由软件、开放源代码软件、公共软件......)
  17. 重装Windows系统 (以联想Y700重装Win10专业版为例)
  18. 软考高级之系统架构设计师系列【1】软考介绍
  19. 北京公交一卡通刷卡详情查询的网址及查询方法
  20. Natura Co在收购雅芳的2019年,旗下三大品牌俱实现增长

热门文章

  1. 千年服务器武功修改,千年私服如何添加武功
  2. 浪漫纯白记录爱的轨迹 西部数据移动存储“七夕”献礼
  3. 关于WIN10创建系统映像时D盘为系统盘的解决方案
  4. 如何在Win7安装U盘中加入USB3.0的支持
  5. http请求415错误Unsupported Media Type
  6. 【DaVinci Developer工具实战】03 -导入xml文件
  7. QNX----QNX内核移植到ZYNQ7010 (黑金开发板)
  8. Java调用大数据接口,学习Hadoop第二十八课(java通过调用接口来操作HBase)
  9. 2020电工(高级)考试题及电工(高级)作业考试题库
  10. 读易[17]·成功不需要一定当老板(坤卦)