androidred5
1. 哪位高手用过RED5在android实时播放视频
verride
public void onNetStatus(final INetStream source, final Map<String, Object> info){
Log.d("DEBUG", "Publisher#NetStream#onNetStatus: " + info);
final Object code = info.get("code");
if ("NetStream.Publish.Start".equals(code)) {
if (VideoActivity.aCamera != null) {
2. android上的socket通信的开源框架有哪些
请去360手机助手下载android学习手册里面有例子、源码和文档
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。目前正在使用 MINA 的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire 等等。
以上是从网上找到的mina框架简单介绍。
由于正在开发的项目中要求加入及时通信功能(游戏方面),所以在网上找了好几种框架,像openfire、tigase等都是基于Xmpp协议开发的优秀框架。但这些侧重于消息的推送,不适合游戏上的简单交互。所以后来找到了mina这个框架,顺手搭建起来。接下来就是这几天学习的总结了,文章里面没有涉及到逻辑层的方面,只是简单的实现即时通信功能。资源下载我会放在文章的最后面。
一、相关资源下载
(1)Apache官方网站:http://mina.apache.org/downloads.html
(2) Android用jar包(包括官网的资源,我会一律放在网络网盘下)
二、Mina简单配置
服务器端一共要用到四个jar包,包括一个日志包。将他们放在lib中,并加载进去
分别为mina-core-2.0.7.jar slf4j-log4j12-1.7.6.jar slf4j-api-1.7.6.jar log4j-1.2.14.jar(日志管理包)
如果要使用日志的jar包,则要在项目的src目录下新建一个log4j.properties,添加内容如下:
log4j.rootCategory=INFO, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
1log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.logger.com.neusoft=DEBUG
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
log4j.logger.org.displaytag=ERROR
log4j.logger.org.springframework=DEBUG
log4j.logger.com.ibatis.db=WARN
log4j.logger.org.apache.velocity=FATAL
log4j.logger.com.canoo.webtest=WARN
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
log4j.logger.org.hibernate=DEBUG
log4j.logger.org.logicalcobwebs=WARN
log4j.rootCategory=INFO, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
1log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.logger.com.neusoft=DEBUG
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
log4j.logger.org.displaytag=ERROR
log4j.logger.org.springframework=DEBUG
log4j.logger.com.ibatis.db=WARN
log4j.logger.org.apache.velocity=FATAL
log4j.logger.com.canoo.webtest=WARN
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
log4j.logger.org.hibernate=DEBUG
log4j.logger.org.logicalcobwebs=WARN
Android客户端要加入的jar包:mina-core-2.0.7.jar slf4j-android-1.6.1-RC1.jar两个jar包(可能直接使用上面的jar包也会行,我没试过~)
二、Mina服务端
我这边使用的是mina2.0版本,所以可能与mina1.0的版本有所不同。那么首先在服务器端创建开始
新建一个Demo1Server.class文件,里面包含着程序的入口,端口号,Acceptor连接.
1 public class Demo1Server {
2 //日志类的实现
3 private static Logger logger = Logger.getLogger(Demo1Server.class);
4 //端口号,要求客户端与服务器端一致
5 private static int PORT = 4444;
6
7 public static void main(String[] args){
8 IoAcceptor acceptor = null;
9 try{
10 //创建一个非阻塞的server端的Socket
11 acceptor = new NioSocketAcceptor();
12 //设置过滤器(使用mina提供的文本换行符编解码器)
13 acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));
14 //自定义的编解码器
15 //acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new CharsetCodecFactory()));
16 //设置读取数据的换从区大小
17 acceptor.getSessionConfig().setReadBufferSize(2048);
18 //读写通道10秒内无操作进入空闲状态
19 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
20 //为接收器设置管理服务
21 acceptor.setHandler(new Demo1ServerHandler());
22 //绑定端口
23 acceptor.bind(new InetSocketAddress(PORT));
24
25 logger.info("服务器启动成功... 端口号未:"+PORT);
26
27 }catch(Exception e){
28 logger.error("服务器启动异常...",e);
29 e.printStackTrace();
30 }
31 }
32
33 }
一个很简单的程序入口吧,简单的说就是在服务器上设置一个消息接收器,让它监听从端口传过来的消息并进行处理。那么接下来我们看看怎么进行消息处理。
新建一个消息处理类,或者说是是业务逻辑处理器——Demo1ServerHandler,它继承了IoHandlerAdapter类,它默认覆盖了七个方法,而我们主要使用messageReceived()。
public class Demo1ServerHandler extends IoHandlerAdapter {
public static Logger logger = Logger.getLogger(Demo1ServerHandler.class);
//从端口接受消息,会响应此方法来对消息进行处理
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String msg = message.toString();
if("exit".equals(msg)){
//如果客户端发来exit,则关闭该连接
session.close(true);
}
//向客户端发送消息
Date date = new Date();
session.write(date);
logger.info("服务器接受消息成功...");
super.messageReceived(session, message);
}
//向客服端发送消息后会调用此方法
@Override
public void messageSent(IoSession session, Object message) throws Exception {
logger.info("服务器发送消息成功...");
super.messageSent(session, message);
}
//关闭与客户端的连接时会调用此方法
@Override
public void sessionClosed(IoSession session) throws Exception {
logger.info("服务器与客户端断开连接...");
super.sessionClosed(session);
}
//服务器与客户端创建连接
@Override
public void sessionCreated(IoSession session) throws Exception {
logger.info("服务器与客户端创建连接...");
super.sessionCreated(session);
}
//服务器与客户端连接打开
@Override
public void sessionOpened(IoSession session) throws Exception {
logger.info("服务器与客户端连接打开...");
super.sessionOpened(session);
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
logger.info("服务器进入空闲状态...");
super.sessionIdle(session, status);
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
logger.info("服务器发送异常...");
super.exceptionCaught(session, cause);
}
}
很直白的一段程序,相当于将服务器分成了七个状态,而每个状态都有自己的一套逻辑处理方案。
至此,一个最简单的Mina服务器框架就搭好了,我们可以使用电脑上的telnet命令来测试一下服务器能否使用
cmd控制台—>telnet <ip地址> <端口号> 如我的服务器ip地为192.168.1.10 那我就写telnet 192.168.1.10 4444 .此时我们可以看到输出日志为
此时连接已经创建,我们在输入信息服务器就会对信息进行处理,并给出相应的应答。
(telnet的用法不知道的可以自行网络)
三、Mina客户端(Android端)
服务器简单搭建完毕,那么开始在Android端是配置服务器吧。同样的不要忘记加载jar包, 由于Android自带了Logout,所以就不使用Mina的日志包了。
由于接受消息会阻塞Android的进程,所以我把它开在子线程中(同时将其放在Service中,让其在后台运行)
1 public class MinaThread extends Thread {
2
3 private IoSession session = null;
4
5 @Override
6 public void run() {
7 // TODO Auto-generated method stub
8 Log.d("TEST","客户端链接开始...");
9 IoConnector connector = new NioSocketConnector();
10 //设置链接超时时间
11 connector.setConnectTimeoutMillis(30000);
12 //添加过滤器
13 //connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new CharsetCodecFactory()));
14 connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));
15 connector.setHandler(new MinaClientHandler(minaService));
16
17 try{
18 ConnectFuture future = connector.connect(new InetSocketAddress(ConstantUtil.WEB_MATCH_PATH,ConstantUtil.WEB_MATCH_PORT));//创建链接
19 future.awaitUninterruptibly();// 等待连接创建完成
20 session = future.getSession();//获得session
21 session.write("start");
22 }catch (Exception e){
23 Log.d("TEST","客户端链接异常...");
24 }
25 session.getCloseFuture().awaitUninterruptibly();//等待连接断开
26 Log.d("TEST","客户端断开...");
27 connector.dispose();
28 super.run();
29 }
30
31 }
不知道你们注意到了没,客户端的代码与服务器端的极其相似,不同的是服务器是创建NioSocketAcceptor对象,而客户端是创建NioSocketConnect对象。当然同样需要添加编码解码过滤器和业务逻辑过滤器。
业务逻辑过滤器代码:
1 public class MinaClientHandler extends IoHandlerAdapter{
2
3
4 @Override
5 public void exceptionCaught(IoSession session, Throwable cause)
6 throws Exception {
7 Log.d("TEST","客户端发生异常");
8 super.exceptionCaught(session, cause);
9 }
10
11 @Override
12 public void messageReceived(IoSession session, Object message)
13 throws Exception {
14 String msg = message.toString();
15 Log.d("TEST","客户端接收到的信息为:" + msg);
16 super.messageReceived(session, message);
17 }
18
19 @Override
20 public void messageSent(IoSession session, Object message) throws Exception {
21 // TODO Auto-generated method stub
22 super.messageSent(session, message);
23 }
24 }
方法功能与服务器端一样。测试这里就不做了。可以的话自己写个Demo效果更好
四、Mina的更多功能
拿到所有客户端Session
Collection<IoSession> sessions = session.getService().getManagedSessions().values();
自定义编码解码器,可以对消息进行预处理。要继承ProtocolEncoder和ProtocolDecode类。
数据对象的传递
这些功能不便放在这里讲了,可能我会以后再找机会另开一篇来讲述这些功能~,大家可以浏览结尾处的参考文章来加深对mina的理解。
在我认为,熟悉和快速使用一个新的的框架可以看出一个程序员的水平,同样及时总结和归纳自己学到的新知识也是一个好的程序员该具有的习惯。那么Mina的简单搭建就到这里为止了,希望对大家有所帮助
3. android如何播放RTMP协议视频流
Adboe的Red5流媒体服务器免费并且是开源的,与Flash搭配的时候可谓是天生一对,但使用Java和Android作为客户端调用却可谓一波三折。
Adobe的Red5源代码里有一个RTMPClient的类,这个类在使用上其实不复杂,但却没办法成功调用。观察日志,发现是连接成功后在开始创建流的时候,服务端把连接断开了。我能想到的解释就是可能公司现在所使用的Red5服务器的版本与这个RTMPClient不兼容。
4. 专业4k摄像机有哪些
2路HDMI超高清视频会议互动录播一体机
NK-HD302ERC-4K
概述:
派尼珂2路DVI(HDMI)输入3机位4K互动录播一体机,是一款高度集成超高清的显示,编码,存储的一体化设备,支持2路HDMI输入(兼容DVI),4K/60HZ,1080P/60/30HZ等输入高清信号,接入高清4K会议摄像机、机顶盒、电脑等信号,输出的图像达广播级画质。录像分辨率达4K 60HZ,1080P/60HZ。录像解码出来的图像和声音可做为本地第三机位进入编码、导播、存储及点播。支持4K H.265编码+解码+导播,延时≤150毫秒内。2路直播+录播+导播+网络,无线、平板、手机观看。导播画面支持多种画中画显示及自定义输出画面模式。设备内置rtmp server,本地及远端流可推流到本地进行直播。支持手机,触摸屏、电脑的rtsp/rtmp/ts流等协议推流软件推流过来。支持手机/Pad观看直播及点播。
应用场景:广泛用于学校精品教学、会议室、展览馆、产品发布会、户外活动、婚庆现场、医学示教、赛事直播、舞台节目表演、酒店直播、信息发布直播、广告发布、KTV直播等场景。
产品特点:
1、系统架构:一体嵌入式主机;
2、视频采集:纯硬件采集方式
3、视频输入接口:2路HDMI(兼容DVI/VGA/YPbPr/CVBS),菜单内可设手动选择或者自动侦测输入信号。
4、输入分辨率:支持自动侦测分辨率及帧率功能,HDMI 4k(3840x2160), 1920x1200,1920×1080P等;
5、录像文件支持4K 60HZ,1080P/60HZ录像。
6、音频输入接口:3.5mm立体声, 48khz采样,AAC编码;支持3.5模拟音频或hdmi/sdi数字音频;
7、输出接口:1路HDMI,支持4k(3840x2160)60、30HZ、1920x1200@60fps等。
8、网口:1个1000M RJ45网络接口,每个网口均支持直播收看,配置;
9、串口:1个RS232,支持网络透明串口模式,支持浏览器直接控制3路摄像机云台;也支持本地模式用于和中控配合,支持录制/停止/切换本地输出/导播等命令;
10、网络流煤体延时:<=1秒;
11、录制格式:MP4;
12、录播功能:同步录制/同步直播/在线点播/远程导播/本地导播;
13、录播模式:多流多画面(资源模式)/单流单画面(电影模式)/单流多画面(画中画);
14、支持一路rtsp/ts流解码,分辨率支持4k,解码流可进行导播后录制,直播及点播,支持解码流全屏显示及声音单独输出;
15、外观尺寸有2种可选,1U机架式全铝拉丝氧化机箱,整机功耗≤25w,节能环保;
16、前面板触摸屏支持控制回显模式/录制/系统配置/导播;
17、支持rtmp/http ts/udp ts/rtsp直播协议,内嵌rtmp server功能,不需要安装fms/red5等服务端软件直接实现网页直播;
18、支持浏览器直接观看直播并不用装插件,支持html5点播;
19、提供远程导播软件,可实时监控3画面并实时导播一路导播流,并实时录制,且同时支持网页按纽导播;支持本地鼠标操作、触摸屏操作(需另配)、支持本地导播画面输出及控制;
20、支持叠加4行字幕,每行字幕可设置开关,字体大小,色彩,坐标,并能支持中英文;
21、支持透明背景logo图片叠加,支持自动叠片头片尾;
22、每路录制文件及直播流均支持1080p60帧H.265 HP5.0编码,帧率提高一倍从而可使效果得到极大的提升,彻底消灭切帧现象;HDMI支持4k分辨率及4k分辨率直播,录制及点播;
23、支持开机就录,硬盘录满会自动循环覆盖时间最老文件,支持自动分段且分段时间可设置,彻底实现无人值守的全自动录播;支持ftp自动上传至指定帐号及密码的ftp服务器;
24、USB3.0接口:外接U盘、移动硬盘录像;Wifi网卡/4G网卡,实现无线网络直播。U盘/移动硬盘热拔插,适别到就会自动在本地硬盘和外置磁盘中同时录,由于采用预录技术,录制结束后即可马上拔出,不需要等待时间导出;
25、程序固化在内置芯片中,稳定高效,使用嵌入式Linux系统,不会中毒,可随时断电及长时间开机。用户可自行安装硬盘,彻底摆脱售后烦恼;
26、支持多级用户管理,分管理员用户和一般用户;
27、支持APP用于手机,Pad观看直播及点播,提供android及apple版本的APP,APP用户及密码由管理员设置,支持200+用户,APP支持实时观看直播及vod点播,端对端延时小于3秒,观看页面可直接切换任意通道观看;
28、控制操作方式:IE浏览、外接触控屏、面板按键
技术参数:
输入
视频输入
2路HDMI(4K),兼容DVIVGA,YPbPr,CVBS
分辨率
HDMI:4K60HZ/30/25(3840x2160)、2KP60(2840x1536)、1080P60、1080P50、1080P30、1080P25、1080I50、1080I60、720P60、720P50等
音频输入
1路,双声道Line In;内嵌1路SDI数字音频;1路HDMI数字音频
输出
视频输出
1路HDMI(4K 60/30HZ);
音频输出
1路3.5mm立体声音频Line Out;1*HDMI内嵌;
图像显示模式
2分割,画中画、单画面、自定义等多种模式
视音频编码参数
视频压缩标准
H265/H.264
视频编码分辨率
4K/2K/1920*1080/1600*1200/1680*1050/1280*1024/
1280*720/1024*768/704*576
自动侦测
支持
视频码率
32Kbps-40Mbps可自定义
视频帧率
1—60帧/秒 可自定义
音频压缩标准
AAC
音频码率
16kbps-256kbps
硬盘接口
SATA接口
1个,支持2.5寸2T以上,最大6T
录播
录播模式
多流多画面(资源模式)
单流单画面(电影模式)
单流多画面(画中画)
远程导播
支持
管理
开始录制/停止/状态查询
自动分段录制
支持
循环覆盖
支持
云台
1路,网页控制
手机,Pad观看直播及点播
提供苹果,安卓版本APP
录制文件
格式
MP4
录像分辨率
4K 60HZ/30HZ,1080P/60HZ/30HZ等
管理
浏览器直接管理/ftp客户端均支持
存储空间
2.5寸硬盘,2-6T选配
外部接口
USB3.0
1个USB 3.0
串行接口
1个标准RS-232串行接口(网络透明/本地控制可配置)
网络接口
1个RJ45,1000M
前面板
3个按键Record/Stream/Source,显示屏显示信息
网络参数
网络协议
支持TCP/IP、UDP、IPv4、IPv6;
支持UDP TS/HTTP TS/RTMP推流/RTMP server/RTSP/TCP裸流;
支持HTTP、FTP、NTP;
其他
电源
AC220V
系统
嵌入式Linux
内置硬盘
无(选配)
功耗
≤12W
工作温度
-18℃--+55℃
工作湿度
10%~90%,无冷凝
尺寸
1U机箱:440mm(L) ×210mm(W) ×44mm(H)
重量
0.8Kg
5. android 直播怎么实现的
Adboe的Red5流媒体服务器免费并且是开源的,与Flash搭配的时候可谓是天生一对,但使用Java和Android作为客户端调用却可谓一波三折。
Adobe的Red5源代码里有一个RTMPClient的类,这个类在使用上其实不复杂,但却没办法成功调用。观察日志,发现是连接成功后在开始创建流的时候,服务端把连接断开了。我能想到的解释就是可能公司现在所使用的Red5服务器的版本与这个RTMPClient不兼容。
6. 求流媒体服务器的搭建方案,能支持网页和安卓端。我想了一天也没相处好方案,求大神指点!
不知道FMS你是否了解,FMS是比较不错的流媒体服务器,RED5没听过,孤陋寡闻了,用APACHE的话可以考虑使用Nginx可以承受更多的连接
7. 谁介绍一下wowza
Wowza 作为一个Media Delivery System,它要起很重要的作用。
一直在摸索如何保证文件不会被下载。RTMP协议肯定是不行的,NetTransport, Orbit, Replay Media Catcher都可以下载这种协议的文件。然后我就把目光放到了RTMP协议的众多变体上。
首先是RTMPT协议,用HTTP协议封装的RTMP协议。不知道怎么回事,服务器似乎不能很好的接受RTMPT协议,不知道是设置问题还是别的什么。而且在Wowza官方论坛上,Wowza的开发者也不建议使用RTMPT协议,因为它需要500ms轮询一次,而且服务器的CPU开销(协议封装需要消耗CPU)和带宽开销(封装成HTTP协议时需要额外内容)都比较大,唯一的优点就只有可以突破带有协议扫描的防火墙。
然后就是RTMPS和RTMPE。前者是用SSL协议加密的,后者是Adobe自己的128位加密算法。Wowza和Adobe都推荐后者,因为使用简单无需设置。而RTMPS需要设置证书等比较复杂的设置,而且安全性据说也不比RTMPE协议高。
最后就是RTMPTS和RTMPTE协议,看名字也知道是怎么回事了。
最后我选择了RTMPE协议,简单就是美。
接下来的问题是如何屏蔽RTMP协议。不像Red5和Adobe Flash Media Server那样可以通过修改端口来简单的屏蔽,Wowza的RTMP,RTMPE,RTMPT协议是捆绑在一个端口上的。因为这个问题我甚至一度放弃了Wowza而改用Adobe Flash Media Interactive Server,不过怎么都读取不到内容。
仔细研究了一下Wowza的论坛,发现原来官方发布过一个源码可以只使用RTMPE,RTMPS,RTMPTS这一类加密的协议。
然后自然就是下载Wowza IDE,建了个工程,把代码粘贴进去,保存后再把自动生成的jar文件复制到服务器上。然后把application.xml文件修改一下,大功告成!
这样设置后如果尝试使用RTMP协议,会提示拒绝连接,要求加密。而且现有的所有下载工具都不能下载RTMPE协议。连网址变换都可以不用做了。
不得不赞叹一下Wowza的接口,确实很强大,而且是Java的。虽然FMIS也有接口,不过ActionScript语言毕竟是门冷门语言。
最后附上代码:
package com.wowza.wms.plugin.forcertmpe;
import com.wowza.wms.amf.*;
import com.wowza.wms.client.*;
import com.wowza.wms.mole.*;
import com.wowza.wms.request.*;
public class RequireSecure extends MoleBase {
public void onConnect(IClient client, RequestFunction function,
AMFDataList params) {
if (!client.isEncrypted())
{
client.rejectConnection("Secure connection required.");
getLogger().info("MoleRequireSecureConnection.onConnect: rejectConnection: clientId:"+client.getClientId());
}
}
}
8. Android如何使用juv-rtmp-client.jar向Red5服务器发布实时视频数据
在PC上的话 我了解一些,一般是flex客户端连接red5后,会有控件之类的调用PC本地的视频、音频设备
9. 求教如何在android端播放red5实时视频流
如果用wifi接收数据的话,是不是要约定每次传输用帧的格式,你那边有没有类似的demo,麻烦共享一下,谢谢!