GSYVideoPlayer(基于ijkplayer)之rtmp协议播放器的简单应用
基于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协议播放器的简单应用相关推荐
- android 基于ijkplayer项目进行的播放器
jjdxm_ijkplayer 项目地址:jjdxm_ijkplayer 简介:基于 ijkplayer 简单的 UI 界面 当前项目是基于 ijkplayer 项目进行的播放器界面 UI 封装. 是 ...
- 基于IJK打造自己的播放器(一) 简单集成使用ijkPlayer播放hls视频
一 前言 ijk播放器的背景我就不多说了.随便一搜就有,我想说的是,这篇文章只是教大家适合使用ijkplayer. 这里适合新手.简单说一下我们常用的播放视频.一般来说,播放视频分成视频显示控件.视频 ...
- 基于嵌入式Linux的MP3播放器的设计与实现
摘要:本文详细介绍了嵌入式系统的特点以及嵌入式系统开发的流程,分析基于嵌入式Linux的MP3播放器的关键技术,设计和实现了一种基于嵌入式系统的 MP3 播放器.该播放器利用 QT 技术和开源的音频解 ...
- linux 嵌入式 播放器,基于Linux的嵌入式媒体播放器研究
摘要: 计算机多媒体技术和嵌入式技术的高速发展,各种集计算机.通信.消费电子产品等特征于一体的电子产品得以广泛应用,嵌入式媒体播放器已经成为此类产品中主要的应用软件.同时,随着Linux系统在各种嵌入 ...
- 基于FPGA设计的音乐播放器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 基于FPGA设计的音乐播放器 一.生成PCM音频格式的音乐文件 1.PCM音频文件格式 2.Matlab读取WAV文件 二. ...
- 【基于Qt的在线音乐播放器】
基于Qt的在线音乐播放器 项目功能: 本在线音乐播放器的功能在于创建一个音乐播放器页面,可以实现搜索功能通过HTTP协议获取网络中数据并解析出来,播放搜索到的歌曲并展示相关信息.效果如图: 相关类及功 ...
- android 直播流服务器,视频-Android上的实时流RTMP / RTSP播放器,无需使用webview(WOWZA服务器)...
视频-Android上的实时流RTMP / RTSP播放器,无需使用webview(WOWZA服务器) 我正在开发一个Android应用程序,我想在其中发布和播放视频... 我想要的是: 我的应用记录 ...
- 基于智能手机Android平台音乐播放器全程开发实战
基于android开发的智能手机平台的应用越来越多,目前也是一块比较热门的技术,本项目为基于android系统的音乐播放器项目,学习本项目的目的是为了让学员尽快掌握android领域的小应用的开发.项 ...
- Android、iOS平台RTMP/RTSP播放器实现实时音量调节
介绍移动端RTMP.RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对 ...
最新文章
- VS2019安装Image Watch与失败解决方法
- matlab读取txt
- eplan导出部件汇总表_干货分享:西门子产品数据表导入到博途和EPLAN应用举例...
- JoshChen防止前台恶意修改数据
- vc++出现warningC4819的处理方法
- solaris下用户不能正常登录CDE界面的解决办法
- 1.1 版本控管与Git
- 基于Laravel+VueJS实战开发WebAPP
- C语言数据结构——用链表实现一个简单的电话号码簿
- 虚拟税务ukey托管服务器,税务Ukey托管来啦,给它一个家!企业开票更方便
- Drools教程(基础篇)——Eclipse下Drools运行时安装
- 阿里云服务器Discuz论坛程序安装
- 酱爆如花四眼仔,周星驰金牌配角不止吴孟达,他们名字都没人知道
- 如何使用css3做简单的动画效果?
- Android compileSdkVersion27+ was not granted this permission: android.permission.WRITE_SETTINGS.
- 软件分类(自由软件、开放源代码软件、公共软件......)
- 重装Windows系统 (以联想Y700重装Win10专业版为例)
- 软考高级之系统架构设计师系列【1】软考介绍
- 北京公交一卡通刷卡详情查询的网址及查询方法
- Natura Co在收购雅芳的2019年,旗下三大品牌俱实现增长
热门文章
- 千年服务器武功修改,千年私服如何添加武功
- 浪漫纯白记录爱的轨迹 西部数据移动存储“七夕”献礼
- 关于WIN10创建系统映像时D盘为系统盘的解决方案
- 如何在Win7安装U盘中加入USB3.0的支持
- http请求415错误Unsupported Media Type
- 【DaVinci Developer工具实战】03 -导入xml文件
- QNX----QNX内核移植到ZYNQ7010 (黑金开发板)
- Java调用大数据接口,学习Hadoop第二十八课(java通过调用接口来操作HBase)
- 2020电工(高级)考试题及电工(高级)作业考试题库
- 读易[17]·成功不需要一定当老板(坤卦)