我正在创建一个工作非常简单的Android应用程序,它将URI插入系统视频播放器中,以便用户可以轻松地观看我们从Wowza服务器发送的RTSP流.
通常,我基本上只有一个播放按钮,该按钮会调用:
Uri myURI = Uri.parse("rtsp://ipaddress:1935/path/myStream"); Intent intent = new Intent(Intent.ACTION_VIEW, myURI);startActivity(intent);
但是我们不从此URI 24/7流式传输,我想在onCreate期间更改行为,以便它在绘制按钮之前先验证URI,这使我有机会向用户提供视觉反馈,即流式传输不是生活并保存我们不需要的支持电子邮件.
我查看了Uri和URI类,以查看是否存在可以调用以检查URI的方法,但似乎根本没有.其他与URI相关的问题似乎都指向本地文件,因此开发人员只能检查文件,但我认为这不适用于实时流.任何建议将不胜感激!
解决方法:
基本上,您想打开到RTSP服务器主机名/端口的普通客户端套接字连接,然后发布RTSP OPTIONS请求.
如果服务器响应“ RTSP / 1.0 200 OK”,则表示流服务已启动,否则已关闭.
我写了一个快速而肮脏的RTSP检查样本并对其进行了测试.随时根据您的需求进行调整:
更新处理UI *** 作
在活动类中,创建以下字段:
private static final int MESSAGE_RTSP_OK = 1;private static final int MESSAGE_RTSP_ERROR = -1;private Handler handler;
在您的onCreate方法中,添加:
handler = new Handler(){ @OverrIDe public voID handleMessage(Message msg) { switch (msg.what){ case MESSAGE_RTSP_OK: //show_player(); // implement ui operation here break; case MESSAGE_RTSP_ERROR: //show_error(); break; } } };
然后运行以下示例代码:
更新了rtsp检查代码
new Thread() { public voID run() { try { Socket clIEnt = new Socket("a1352.l1857053128.c18570.g.lq.akamaistream.net", 554); OutputStream os = clIEnt.getoutputStream(); os.write("OPTIONS * RTSP/1.0\n".getBytes()); os.write("CSeq: 1\n\n".getBytes()); os.flush(); //NOTE: it's very important to end any rtsp request with \n\n (two new lines). The server will ackNowledge that the request ends there and it's time to send the response back. BufferedReader br = new BufferedReader( new inputStreamReader( new BufferedinputStream(clIEnt.getinputStream()))); StringBuilder sb = new StringBuilder(); String responseline = null; while (null != (responseline = br.readline())) sb.append(responseline); String rtspResponse = sb.toString(); if(rtspResponse.startsWith("RTSP/1.0 200 OK")){ // RTSP SERVER IS UP!! handler.obtainMessage(MESSAGE_RTSP_OK).sendToTarget(); } else { // SOMETHING'S WRONG handler.obtainMessage(MESSAGE_RTSP_ERROR).sendToTarget(); } Log.d("RTSP reply" , rtspResponse); clIEnt.close(); } catch (IOException e) { // NETWORK ERROR such as Timeout e.printstacktrace(); handler.obtainMessage(MESSAGE_RTSP_ERROR).sendToTarget(); } } }.start();`
对于此测试,我选择了公共NASA电视rtsp服务器:rtsp://a1352.l1857053128.c18570.g.lq.akamaistream.net:554
该代码发送以下rtsp请求:
选项* RTSP / 1.0
CSeq:1
并收到以下响应:
RTSP / 1.0 200确定
服务器:QTSS-Akamai / 6.0.3(Build / 526.3; Platform / linux; Release / Darwin;)
序列号:1
公开:描述,设置,删除,播放,暂停,选项,公告,记录
如果您正在寻找更复杂的检查,请随时深入rtsp协议文档并根据自己的需要增强代码:https://www.ietf.org/rfc/rfc2326.txt
请让我知道是否需要更多信息.
总结以上是内存溢出为你收集整理的在Android中的onCreate期间检查RTSP URI全部内容,希望文章能够帮你解决在Android中的onCreate期间检查RTSP URI所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)