没有其他的。希望从事流媒体开发案例。还承诺提供朋友博客。上个星期。制定出最后一点机会。

在这里,与大家分享。

首先要明白的概念:什么是流媒体?转载请注明出处http://blog.csdn.net/gaoshouxiaodi/article/details/41259351

流媒体:所谓流媒体是指採用流式传输的方式在Internet播放的媒体格式。

流媒体又叫流式媒体,它是指商家用一个视频传送server把节目当成数据包发出,传送到网络上。用户通过解压设备对这些数据进行解压后,节目就会像发送前那样显示出来。

常见的流媒体的格式:mov .asf .3gp .viv .swf .rt .rp .ra .rm。每一种格式都有各自的优缺点。大家能够依据实际情况须要来决定。

通俗上讲,通常实现流媒体的方法大致有三种。

一。讲音视频文件拆分成若干多个小文件。在播放时。逐个下载。然后播放。也叫伪流媒体。

二,将视频通过转换软件,在server端转换成流媒体格式文件。然后client进行播放。

三。在本地录制视频的过程中。

直接编解码为流媒体格式文件。(兴许的博客中我会单独讲这里)

而实际上,流媒体的实现原理,也就跟第一点类似,仅仅只是能够理解为,拆分的包很多其它,更小。而仍然是一个总体。它的网络传输,相同是若干多得包单通道或者多通道下发的。

我们熟知的安卓手机支持的视频格式并不多,3GP。mp4等。可针对广大需求来讲,这点支持确实少的可怜。那假设想在Android手机上播放其它格式的怎么办。这就涉及到视频的编解码。

视频解码,分为软解码和硬解码。可惜两种我都不会。

临时也不想会。

还好。有那么一批人,他们无私奉献,在他们的字典里,他们的时间就是我们的时间。他们的金钱就是我们的金钱,他们的媳妇。。。哼。。

他们叫做开源。

我在网上找到了一个非常好的开源项目,vitamio 。这么好的东西,我之前居然不知道。于是我開始下载他们的sdk。Demo,开发文档等实用的东东。。

可惜,,没看懂。。给我的感觉是他们提供的东西杂乱无章,可又确实是好东西,怎么办,耐着性子,搞!

https://www.vitamio.org/docs/Tutorial/2014/0210/29.html粘上他们的介绍链接。

感兴趣的朋友能够看一下。

据不全然统计。vitamio框架支持不下百种视频格式。

以下介绍下简单播放实现:

首先是界面:

<p></p>
<pre name="code" class="html"><?

xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <io.vov.vitamio.widget.CenterLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <io.vov.vitamio.widget.VideoView android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </io.vov.vitamio.widget.CenterLayout> </LinearLayout>

非常easy的一个现形布局界面,

io.vov.vitamio.widget.VideoView

是它的自己定义视频展示控件。

然后是activity的实现:

public class VideoViewDemo extends Activity {/*** TODO: Set the path variable to a streaming video URL or a local media file* path.*///视频路径private String path = "";private VideoView mVideoView;@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);//对vitamio框架进行初始化。

返回值用来做相关操作。通常没有要作的事情。初始化一定要在显示界面之前。 if (!LibsChecker.checkVitamioLibs(this)) return; //显示界面 setContentView(R.layout.videoview); //初始化组件 mVideoView = (VideoView) findViewById(R.id.surface_view); //设置的两个网络流媒体地址,大家能够直接进行測试。 // path = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"; path = "http://www.modrails.com/videos/passenger_nginx.mov"; if (path == "") { // Tell the user to provide a media file URL/path. Toast.makeText(VideoViewDemo.this, "Please edit VideoViewDemo Activity, and set path" + " variable to your media file URL/path", Toast.LENGTH_LONG).show(); return; } else { /* * 也能够用这种方法来播放流媒体 * mVideoView.setVideoURI(Uri.parse(URLstring)); */ //设置videoview播放的路径 mVideoView.setVideoPath(path); //创建视频播放时的控制器,这个控制器能够自己定义。此处是默认的实现 mVideoView.setMediaController(new MediaController(this)); //请求焦点 mVideoView.requestFocus(); //设置播放监听 mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { // optional need Vitamio 4.0 //设置重放速度 mediaPlayer.setPlaybackSpeed(1.0f); } }); //载入结束后開始播放,这行代码能够控制视频的播放。 mVideoView.start(); } } }

在使用之前。须要看一下VideoView类里的方法:

类概述

public class VideoView extends SurfaceView implements MediaController.MediaPlayerControl
用于播放视频文件。VideoView能够载入各种来源的图像(如资源或ContentProvider),注意计算视频尺寸。以便在随意布局管理器中使用,它还提供了诸如缩放等显示选项。
VideoView也提供封装了很多MediaPlayer的方法,比如getVideoWidth、setSubShown。

常量

public static final int VIDEO_LAYOUT_ORIGIN
缩放參数。原始画面大小。
常量值:0

public static final int VIDEO_LAYOUT_SCALE
缩放參数。画面全屏。
常量值:1

public static final int VIDEO_LAYOUT_STRETCH
缩放參数。画面拉伸。

常量值:2

public static final int VIDEO_LAYOUT_ZOOM
缩放參数,画面裁剪。
常量值:3

公共方法

public void setVideoLayout(int layout, float aspectRatio)
获取扫描视频的Uri。
參数
layout 缩放參数
aspectRation 宽高比,为0将自己主动检測。

public boolean isValid()
Surface是否有效。 參见Surface的isValid方法。

public void setVideoPath(String path)
设置视频路径。

public void setVideoURI(Uri uri)
设置视频URI。(能够是网络视频地址)

public void stopPlayback()
停止视频播放。并释放资源。

public void setMediaController(MediaController controller)
设置媒体控制器。
參数
controller 媒体控制器。注意是io.vov.vitamio.widget.MediaController。

public void setOnPreparedListener(OnPreparedListener l)
注冊一个回调函数,在视频预处理完毕后调用。

在视频预处理完毕后被调用。此时视频的宽度、高度、宽高比信息已经获取到,此时可调用seekTo让视频从指定位置開始播放。

public void setOnCompletionListener(OnCompletionListener l)
注冊一个回调函数,视频播放完毕后调用。

public void setOnErrorListener(OnErrorListener l)
注冊一个回调函数,在异步操作调用过程中错误发生时调用。

比如视频打开失败。

public void setOnBufferingUpdateListener(OnBufferingUpdateListener l)
注冊一个回调函数。在网络视频流缓冲变化时调用。

public void setOnSeekCompleteListener(OnSeekCompleteListener l)
注冊一个回调函数。在seek操作完毕后调用。

public void setOnSubtitleUpdateListener(OnSubtitleUpdateListener l)
注冊一个回调函数,在字幕须要显示时调用。

public void setOnInfoListener(OnInfoListener l)
注冊一个回调函数,在有警告或错误信息时调用。比如:開始缓冲、缓冲结束、下载速度变化。

public boolean onTouchEvent(MotionEvent ev)
处理显示/隐藏MediaController。

public void start()
開始播放。

public void pause()
暂停播放。

public void suspend()
挂起(临时没有实现功能)

public void resume()
恢复播放。

public long getDuration()
获取视频播放时长。

public long getCurrentPosition()
获取当前播放位置。

public void seekTo(long msec)
设置播放位置。
參数
msec 位置

public boolean isPlaying()
是否正在播放。

public int getBufferPercentage()
获取缓冲百分比。

public void setVolume(float leftVolume, float rightVolume)
设置音量。
參数
leftVolume 左声道
rightVolume 右声道

public int getVideoWidth()
获取视频宽度。

public int getVideoHeight()
获取视频高度。

public float getVideoAspectRatio()
设置视频宽高比例。

没有视频或者宽高不对返回0。

public void setVideoQuality(int quality)
设置视频质量。
參数
quality 參见MediaPlayer的常量:VIDEOQUALITY_LOW(流畅)、VIDEOQUALITY_MEDIUM(普通)、VIDEOQUALITY_HIGH(高质)。

public void setBufferSize(int bufSize)
设置视频缓冲大小(默认1024KB)单位Byte。

public boolean isBuffering()
检測是否缓冲完成。

public void setMetaEncoding(String encoding)
设置元数据编码。

比如:UTF-8

public String getMetaEncoding()
获取元数据编码。

public HashMap getAudioTrackMap(String encoding)
获取视频中嵌入的音轨。比如:English

public int getAudioTrack()
设置播放音轨编号。

public void setAudioTrack(int audioIndex)
设置音轨编号,必须使用getAudioTrackMap的返回值。

public void setSubShown(boolean shown)
设置是否显示字幕。

參数
shown true表示显示字幕

public void setSubEncoding(String encoding)
设置字幕编码。

參数
encoding 字幕编码。假设为null将自己主动检測。

public int getSubLocation()
获取字幕位置类型。0为内嵌字幕,1为外挂字幕。

public void setSubPath(String subPath)
设置外挂字幕路径。必须是本地文件路径。

public String getSubPath()
获取外挂字幕路径。

public void setSubTrack(int trackId)
设置字幕编号。必须是getSubTrackMap的返回值。

public int getSubTrack()
获取字幕编号。

public HashMap getSubTrackMap(String encoding)
获取视频内嵌字幕集合。
參数
encoding 格式化字符串编码。假设为null将自己主动检測。
返回值
返回字幕名称和字幕编号组成的Map。

public boolean canPause()
是否可暂停。(临时没有实现功能)

public boolean canSeekBackward()
(临时没有实现功能)

public boolean canSeekForward()
(临时没有实现功能)

受保护方法

protected boolean isInPlaybackState()
是否处于正在播放的状态。

实时证明。开源才是人类社会进步的阶梯。转载请注明出处。

vitamio库下载地址

对于流媒体编解码器。ffmpeg等待,下一次说起。

转载于:https://www.cnblogs.com/lcchuguo/p/5047195.html

Android 之流媒体播放器,广播侧下方这么简单。相关推荐

  1. Android复习12【广播接收者-BroadcastReceiver(简单案例-发送广播、静态注册、动态注册、本地广播、代码示例(别处登陆踢用户下线)、常用系统广播总结、音乐播放器)】

    2020-04-28[11周-周二] 音乐播放器Android代码下载:https://wws.lanzous.com/ifqzihaxvij 目   录 简单案例-发送广播 2)动态注册实例(监听网 ...

  2. android+jiaozi播放器,android视频播放-饺子播放器

    饺子播放器是android主流播放器中之一,使用简单,功能全面. 不要按照github文档来,api有变动. 1.依赖 这个地方也要添加glide的依赖,因为视频默认图需要glide加载. imple ...

  3. 基于Android平台的流媒体播放器的设计

    from: 基于Android平台的流媒体播放器的设计 1引 言 随着移动通信技术和多媒体技术的迅速发展,融合手机.网络.多媒体技术为一体的视频监控技术也有了长足的进步,通过移动通信网络提供流媒体服务 ...

  4. android H264(3): 流媒体播放器设计方案

    如果说一个人的力量有限,那么网络的力量就是无穷的.研究H264的目的就是自己定制一个流媒体播放器,实时播放视频. 好在网上牛人颇多,站在巨人的肩上,压力会小很多. 播放器整体设计方案 一般播放器整体设 ...

  5. android 内存播放视频播放器,视频流媒体播放器EasyPlayer-RTSP安卓版在RK3399上运行APP崩溃问题...

    原标题:视频流媒体播放器EasyPlayer-RTSP安卓版在RK3399上运行APP崩溃问题 我们的流媒体服务器现在都已经支持H.265编码视频的播放,流媒体播放器EasyPlayer就是目前比较稳 ...

  6. android 流播放器开发,GitHub - youcoding98/FastVideo: 基于Android平台的移动流媒体播放器的开发...

    基于Android平台的移动流媒体播放器的开发 主页界面如下 第一部分 课题相关介绍 与普通播放器相比,流媒体播放器最主要的不同点在于其能够实现实时的视频播放,用户可以实现边加载边播放,不需要一次全下 ...

  7. [转]MMS流媒体播放器让你实现边上网边听广播

    MMS流媒体播放器让你实现边上网边听广播 (2008-11-12 13:46:18) <script> var $tag='mms,流媒体播放,广播,网上收听,在线,secon'; var ...

  8. android ffmpeg p2p,Android平台下流媒体播放器的设计与应用

    摘要: 随着流媒体技术.移动通信技术和嵌入式技术的迅速发展,已经客观上改变了人们的生活和工作方式.传统的基于PC的流媒体交互方式已不能满足人们多元化的需求方式;基于IP流媒体技术的嵌入式流媒体智能终端 ...

  9. android hdmi拔插广播,拒绝频繁拔插:绿联 HDMI切换器 晒单

    拒绝频繁拔插:绿联 HDMI切换器 晒单 2019-05-16 13:37:38 5点赞 16收藏 10评论 购买理由 买这个小东西是因为书房的显示器配上电视盒子被爸爸当成电视看了,我晚上回家有时想用 ...

最新文章

  1. POJ2774 Long Long Message
  2. 文献阅读6-Entity-Relation Extraction as Multi-turn Question Answering(实体关系联合抽取,层次标签依赖关系,multi-turn QA)
  3. 【Liunx】Linux 文件与目录管理
  4. 数据结构(三)插入排序
  5. JavaScript---DOM事件
  6. 元素“Button”不是已知元素。原因可能是网站中存在编译错误,或者缺少web.config文件...
  7. go语言导入git包_使用go module导入本地包的方法教程详解
  8. k3刷梅林5g信号不稳定_刷了好几个K3的 OpenWrt包,总感觉网络不正常,终于找到原... - 一与博客...
  9. C#网络编程技术FastSocket实战项目演练
  10. Python读写修改Shapefile
  11. 安装mysql中error nr.1045_win10系统安装mysql提示error Nr.1045如何解决
  12. Apache网页与安全优化
  13. 累了、倦了、撑不下去了,静下心来看一看
  14. 【译】前端开发者的基本要求
  15. 全志T7 Display驱动简介
  16. 最长回文 HDU - 3068 马拉车算法
  17. Python加载图片并显示
  18. 2022-12-01:从不订购的客户。找出所有从不订购任何东西的客户,以下数据的答案输出是Henry和Max,sql语句如何写? DROP TABLE IF EXISTS `customers`; C
  19. 支付革新带来诸多便捷改变人们生活方式
  20. 南宁第四中学2021年高考成绩查询,广西南宁初中排名一览,2021年南宁重点中学名单及排名...

热门文章

  1. 第一章 计算机基础知识 试题,第一章计算机基础知识试题.doc
  2. 工业质检如何以“智”取胜?15分钟上手工业零部件检测全流程方案
  3. 通过对比 5 月补丁分析 win32k 空指针解引用漏洞
  4. FOTA/OTA简介
  5. 哪些行业的物联网前景比较好?
  6. 什么是GNSS模块,有哪些特点
  7. fbx格式转gif_传奇战法道 角色人物武器3D模型动作 FBX unity格式
  8. labview、veristand与simulink联合仿真遇到的问题
  9. “杀毒软件评测事件”显露360厚颜无耻的一面
  10. mac笔记本时间不对