流媒体服务器有啥用,说具体点谢谢

流媒体服务器有啥用,说具体点谢谢,第1张

流媒体服务器就是把视频设备(如大锅信号、有线信号、DVD,VCD,摄像机,监控头等)的视频信号采集到服务器,供网络访问。能够像Web服务器发布HTML文件一样发布流媒体文件和从摄像机、视频采集卡等设备传来的实况流,从而用户可以使用视频播放器收看这些媒体文件。

具体参考流媒体服务器的应用场景

摄像头采集;

1、音视频编解码;

2、流媒体协议

3、音视频流推送到流媒体服务器;

4、流媒体网络分发;

5、用户播放器;

6、音视频同步;

7、网络延迟自适应;

8、需要录制,多种视频文件的格式和封装;

9、语言:C、C、html、php、mysql

10、开发环境:嵌入式,Linux,Windows,Web

还有就是视频播放解决方案(卡顿、延迟):

1、CDN加速;

2、自己架服务器;

3、用别人的云服务。

用CDN加速,可以尽量减少延迟。目前业内水准来看,视频延迟都在3-6秒之间。也就是在视频直播时,你看到的是几秒以前的画面。

自己架服务器,如果部署的数据中心不够多,那么遇上跨网、跨省的传输,还是得用CDN加速。那么为了尽可能降低延迟,你就需要在全国各省市都部署数据中心,来解决跨网、跨省的传输。用云服务的话,就是别人把服务器给你架好了,你只要傻瓜式的用就行了。当然,不管用哪种方式,综合权衡利弊,找到适合的方案就是最好的方案。

开发视频直播的流程有哪些:

1、采集;

2、前期处理;

3、编码;

4、传输;

5、解码;

6、渲染。

采集:iOS是比较简单的,Android则要做些机型适配工作。PC最麻烦各种奇葩摄像头驱动,出了问题特别不好处理,建议放弃PC只支持手机主播,目前几个新进的直播平台都是这样的。

前期处理:现在直播美颜已经是标配了,80%的主播没有美颜根本没法看。美颜算法需要懂图像处理算法的人,没有好的开源实现,要自己参考论文去研究。算法设计好了还要优化,无论你打算用CPU还是GPU优化,算法优化本身也需要专业知识支持。GPU虽然性能好,但是也是有功耗的。GPU占用太高会导致手机发烫,而手机发烫会导致摄像头采集掉帧。而这一切都是需要经验支撑。

编码:如果你要上720p,肯定要采用硬编码。软编码720p完全没希望,硬件编码不灵活。兼容性也有问题。如何适应纷繁复杂的网络和纷繁复杂的上下行设备?安卓和芯片的坑,开发过的人都知道。那有人问,要求不高,上软编码低分辨率360p行不行?就算上低分辨率,软编码还是会让CPU发烫,CPU过热烫到摄像头,长期发烫不仅直接反应是费电。既然是手机直播,插着电源和充电器实在说不过去吧。还有,CPU发烫会降频,怎么办?这还是只说性能方面。和前处理只影响图像质量和功耗不同,视频编解码技术还关联成本计算和网络对抗。考虑性能、功耗、成本、网络这四个之后你编码的码率、帧率、分辨率。软硬件开发该如何选择?

传输:自己做不现实,交给第三方服务商吧。

解码:如果你用硬解码,一定要做容错处理,一定要做适配。突然一个crash导致手机重启不好吧。安卓的硬解码,不说了。如果你加了网络目前手机的硬解码还不一定支撑用软解码,功耗发热的问题又来了。

渲染:为什么手机明明解码出好多帧数据。就是渲染不出来。为什么画面就是不同步。

以上是媒体模块,还有信令控制,登录、鉴权、权限管理、状态管理等等,各种应用服务,消息推送,聊天,礼物系统,支付系统,运营支持系统,统计系统等。后台还有数据库,缓存,分布式文件存储,消息队列,运维系统等。

以上技术要点的小结,确实能说明开发一个能用于生产环境的实时视频直播平台确非易事,跟IM里传统的实时音视频一样,这样的技术都是音视频编解码网络传输技术的综合应用体。

android上,视频/音频流直播是极少有人关注的一部分。每当我们讨论流媒体,RTMP(Real Time Messaging Protocol)是不可或缺的。RTMP是一个基本的视频/音频直播流协议,但是不幸的是Android标准的VideoView不支持RTMP的播放。因此,如果想在android上播放RTMP直播流,你必须使用支持RTMP协议的库。在本教程中我们将讨论如何通过使用安卓的 [Vitamio] 库播放由 RTMP 协议传输的流媒体。

Android Vitamio 库

Vitamio是一个android和ios上基于FFmpeg的开源项目。Vitamio为我们提供了一个清洁、简单、全面、真实的硬件加速解码器和渲染器API,Vitamio是一个支持多种音视频格式 如 FLV, TS/TP, WMV, DivX, Xvid等多种标准格式的非常强大的库。所不同的是,它也支持类似mkv和srt嵌入和外挂字幕播放。但是它带有一个许可证,因此在使用它之前请先获得认证。在这个android RTMP例子中,我们不仅讨论RTMP直播流,而且也会讨论m3u8流(HLS),RTSP流和 MMS (Microsoft Media Stream)。首先让在我们的项目中引用Vitamio库。

在Android Studio中引用Vitamio库的步骤如下:

1下载Vitamio bundle

2解压并且在Android Studio上File->Import Module

3指定到VitamioBundle路径,选择vitamio文件夹 点击完成

4在buildgradle(Module: app)依赖部分添加依赖项目(‘:vitamio’)

5打开buildgradle (Module: vitamio) – 改变最小sdk版本为7

6不要忘记在manifestxml中添加internet权限

7完成!

Android RTMP流

在讲述如何使用之前,让我们先了解下RTMP。Real Time Messaging Protocol (RTMP)是一个Adobe Systems所拥有的一个协议。该协议是Adobe公司拥有的开发音视频流的flash player。后来该协议的部分被公开,供公众使用。更多请查看这里这个协议大多用于IPTV和实时视频点播流,但它也用于其他领用。

在android上,标准的VideoView不支持RTMP播放。但WebView可以播放RTMP流。这解决了播放RTMP流的问题,但是我认为web apps 不能提供一个很好的界面和体验。因此这这个android RTMP例子中我们将运用第三方库-Vitamio 直播RTMP流的流媒体。在工程中引用Vitamio之后,请在你的layout文件添加Vitamio的VideoView:

activity_mainxml

<xml version="10" encoding="utf-8">

<LinearLayout xmlns:android="http://schemasandroidcom/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<iovovvitamiowidgetVideoView android:id="@+id/vitamio_videoView"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>123456789101112

另外请编写你的activity如下:

MainActivityjava

package comtruitonrtmpplayer; import androidnetUri; import androidosBundle; import androidsupportv7appActionBarActivity; import javautilHashMap; import iovovvitamioLibsChecker; import iovovvitamioMediaPlayer; import iovovvitamiowidgetMediaController; import iovovvitamiowidgetVideoView; public class MainActivity extends ActionBarActivity {

private static final String TAG = "MainActivity"; private String path; //private HashMap<String, String> options;

private VideoView mVideoView; @Override

protected void onCreate(Bundle savedInstanceState) { superonCreate(savedInstanceState); if (!LibsCheckercheckVitamioLibs(this)) return;

setContentView(Rlayoutactivity_main);

mVideoView = (VideoView) findViewById(Ridvitamio_videoView);

path = "rtmp://rrbalancerbroadcasttnegde:1935/pw/ruk/ruk"; /options = new HashMap<>();

optionsput("rtmp_playpath", "");

optionsput("rtmp_swfurl", "");

optionsput("rtmp_live", "1");

optionsput("rtmp_pageurl", "");/

mVideoViewsetVideoPath(path); //mVideoViewsetVideoURI(Uriparse(path), options);

mVideoViewsetMediaController(new MediaController(this));

mVideoViewrequestFocus();

mVideoViewsetOnPreparedListener(new MediaPlayerOnPreparedListener() { @Override

public void onPrepared(MediaPlayer mediaPlayer) {

mediaPlayersetPlaybackSpeed(10f);

}

});

}

}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

虽然上面代码很清晰明了,但需要指出的是请修改你播放RTMP流的路径。在android上,有时可能使用带报头路径来播放RTMP流。幸运的是,Vitamio RTMP播放器也支持这种方式。因此,所有类型的RTMP流可以使用Vitamio库。上面的例子会是这个样子:

Android Vitamio 直播视频播放功能的实现

Android RTSP流媒体

实时流协议(RTSP)通过多媒体服务器传输内容,例如YouTube使用RTSP流发布内容。关于RTSP流比较容易的部分是,它可以通过android标准的VideoView来完成,想了解更多,请参考我的VideoView例子。

但是如果你使用Vitamio库,可以更好的播放RTSP流。事实上Vitamio也支持RTSP流的回播。和上面过程是一样的,包括Vitamio的VideoView在布局文件,并使用路径变量指定的RTSP url

mVideoView = (VideoView) findViewById(Ridvitamio_videoView);

path = "rtsp://wowzaec2demostreamlocknet/vod/mp4:BigBuckBunny_115kmov";

mVideoViewsetVideoPath(path);

mVideoViewsetMediaController(new MediaController(this));

mVideoViewrequestFocus();

mVideoViewsetOnPreparedListener(new MediaPlayerOnPreparedListener() { @Override

public void onPrepared(MediaPlayer mediaPlayer) {

mediaPlayersetPlaybackSpeed(10f);

}

});12345678910111213

Android m3u8 流媒体

“如何在android上播放m3u8视频”是android开发者最常见的问题之一。通过Http 协议进行视频流直播最简单的办法就是使用标准的 VideoView 但只能在android30以上的设备上播放m3u8流。因为在Android 30引入HTTP/ HTTPS直播和HTTP/ HTTPS渐进式流媒体协议,在android31完全支持HTTPS。

如果你希望在早期的版本上实现支持android m3u8流的HTTP实时流媒体 (HLS)。应该考虑使用Vitamio库,这个库支持在android API7以上播放m3u8。使用方式,同样的在布局文件中使用Vitamio的VideoView,并指定的HTTP实时流媒体URL。

mVideoView = (VideoView) findViewById(Ridvitamio_videoView);

path = "http://93184221133/00573D/236/236-0m3u8";

mVideoViewsetVideoPath(path);

mVideoViewsetMediaController(new MediaController(this));

mVideoViewrequestFocus();

mVideoViewsetOnPreparedListener(new MediaPlayerOnPreparedListener() { @Override

public void onPrepared(MediaPlayer mediaPlayer) {

mediaPlayersetPlaybackSpeed(10f);

}

});12345678910111213

Playing m3u8 stream on Android with Vitamio would look something like this:

在androi上使用Vitamio播放m3u8流效果如下:

Android Vitamio 直播视频播放功能的实现

Android MMS 流

Vitamio库是一个强大的库,还支持Microsoft媒体服务器(MMS)流中的播放。 MMS是网络流媒体协议,主要用于网络广播和电台直播。使用Vitamio用于在anroid的MMS流和其他协议没有什么不同。所有你需要做的只是更换路径变量指向一个MMS url:

mVideoView = (VideoView) findViewById(Ridvitamio_videoView);

path = "mms://beotelmediabeotelnet/studiob";

mVideoViewsetVideoPath(path);

mVideoViewsetMediaController(new MediaController(this));

mVideoViewrequestFocus();

mVideoViewsetOnPreparedListener(new MediaPlayerOnPreparedListener() { @Override

public void onPrepared(MediaPlayer mediaPlayer) {

mediaPlayersetPlaybackSpeed(10f);

}

});123456789101112

结论

通过上面的讨论,可以确定地说,Vitamio是一个强大的多平台库(ios and android)。通过使用Vitamio库 能播放多种类型的视频格式和协议如RTMP, RTSP, HTTP Live, and HTTP渐进式流协议。另外一个很好的功能是,vitamio支持字幕和多音轨的播放。Vitamio的唯一的缺点是,它不是完全的开源。

阅读全文

楼主其实你这个可以用ViewAnimator来实现的,它是继承FrameLayout的,你可以现将videoview(surfaceview也可以)和imageview控件加入到ViewAnimator里面,自己用mediafile类来检测下一个要播放的是视频还是,再将对应的控件显示到最上面进行

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 流媒体服务器有啥用,说具体点谢谢

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情