android流媒体初探索(一)----获取视频数据

本文详细介绍了如何使用Android手机作为前端视频采集入口,实现实时视频流的捕获、编码、传输和播放过程。重点涉及关键步骤如视频数据获取、编码方式选择、协议传输以及解码播放,并以spydroid开源项目为例进行深入剖析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做一个项目,简单说一下需求吧:

android手机做前端视频采集入口,能捕获实时的视频流并传到服务器并且分发到pc客户端实时的进行视频的观看。

就这个看似简单的需求,由于我之前对流媒体全无了解,也因为接入了XX平台进行数据中转,导致开发过程一再受阻。

但就目前已基本将该项目流程走通,所以必须在这里来作个小结。

在这里有几个关键点:

a、视频数据如何获取。

b、获取到的数据如何重新编码,以何种形式编码。

c、以什么协议进行传输。

d、视频最后的解码播放。

android充当摄像头,进行流媒体传输的开源项目有spydroid。这个项目是研究android流媒体处理目前来说最好的切入点。网上也有很多对该项目源码解析的文章,这里不再多说。我就上面提到的几个关键点简单说一下做法。

a获取视频数据

用android来实现还算是简单。毕竟有丰富的sdk封装。那么就会用到MediaRecorder。跟它相关的几个类还有Camera、SurfaceHolder。

MediaRecorder用于录像,相关设置如下:

 

if (mMediaRecorder == null) {
mMediaRecorder
= new MediaRecorder(); } else { mMediaRecorder.reset(); } camera = getCamera();
 

      camera.startPreview();
      camera.unlock();


    mMediaRecorder.setCamera(camera);

mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
<!--以上和以下顺序不能颠倒,否则出错>
mMediaRecorder.setVideoSize(reX, reY);
mMediaRecorder.setVideoFrameRate(fr);
mMediaRecorder.setMaxDuration(0);
mMediaRecorder.setMaxFileSize(Integer.MAX_VALUE);
mMediaRecorder.setVideoEncodingBitRate(bit * 1000);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mMediaRecorder.setOrientationHint(90);//竖屏播放,但貌似只有在android手机上播放有效,在pc上播放无效。
mMediaRecorder.setOutputFile(sender.getFileDescriptor());//设置输出为本地socket

然后就是Camera的获取和设置:

 1 public Camera getCamera(){
 2         if(camera==null){
 3             try{
 4                 camera = Camera.open();
 5                 Parameters paramters = camera.getParameters();
 6                 paramters.setPreviewSize(Integer.parseInt(getPreferences().resolution.split("×")[0]),Integer.parseInt(getPreferences().resolutio           n.split("×")[1]));
 7             }catch(Exception e){
 8                 e.printStackTrace();
 9                 try {
10                     if(camera!=null){
11                         camera.reconnect();
12                     }else{
13                         Toast.makeText(this, "连接摄像头服务失败!请重启手机后再试。", Toast.LENGTH_SHORT).show();
14                     }
15                 } catch (IOException e1) {
16                     e1.printStackTrace();
17                 }
18             }
19             if (camera!=null) {
20                 camera.setDisplayOrientation(90);
           camera.setPreviewDisplay(mSurfaceHolder);
21 } 22 } 23 return camera; 24 }

负责预览的SurfaceView和SurfaceHolder:

    /**
     * 初始化surfaceView
     */
    private void InitSurfaceView() {
        mSurfaceView = (SurfaceView) this.findViewById(R.id.surface_camera);
        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.setKeepScreenOn(true);
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//兼容低版本
    }

打开录像:

try {
            mMediaRecorder.prepare();
            mMediaRecorder.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
            releaseMediaRecorder();
        }

到这里,已经可以在本地socket中拿到摄像头获取的流了。当然根据我的参数设置,获得的流是系统MP4、h264编码后的码流。

 

 

 

 

转载于:https://www.cnblogs.com/changewu/p/3419772.html

酷抓6是在原网址抓取器5.0的基础上全新升级、强势推出的。提供嗅探下载条龙服务。可以在线抓取正在访问的所有网络资源并提供下载,比如图片、Flash、音乐、视频等。独有的完整HTTP请求包和响应包抓取分析功能,打造的就是超强的防盗链下载功能和精准的真实文件类型自动识别功能。独有的疑难网址下载功能,真正将所有网络资源网打尽。 完全支持所有flv视频网站的下载、所有DJ网站、铃声网站的铃声下载,包括QQ音乐,QQ空间背景音乐的下载。酷抓的口号是:只要你能看到的,你能听到的,我都可以下载下来。 支持Windows2000/XP局域网、拨号上网、无线上网等所有网络形式。 更新历史: 2010-06-14 酷抓6.8.193.0614 终结版 ----------------------------------------- +增加RTMP/RTMPE流录制功能 *全新的RTMP解析引擎 ----------------------------------------- +Add function of recording RTMP/RTMPE stream *New engine of RMTP analysis ----------------------------------------- 2010-05-29 刀锋下载5.0.322.0529 ----------------------------------------- *修正了下载某些RTMP流时出错的问题 ----------------------------------------- *Fix some tiny problems when downloading RTMP streams ----------------------------------------- 2010-05-23 ----------------------------------------- 酷抓6.5.175.0523 刀锋下载5.0.315.0523 +增加对RTMPE协议的抓取和下载 +增加对RTMP码率切换抓取的支持 +改进退出时保存提示的体验 *修正了某些HTTP完整请求头抓取格式错误的BUG ----------------------------------------- CooJah 6.5.175.0523 Blader 5.0.315.0523 +Support RTMPE sniffing and downloading +Support RTMP stream bitrates switching sniffing +Optimize exit prompting *Correct format errors for some HTTP headers ----------------------------------------- 2010-02-28 ----------------------------------------- 刀锋下载4.6.251.0228 +刀锋下载支持下载电视直播类型rtmp协议 ----------------------------------------- Blader 4.6.251.0228 +Blader supports live tv rtmp download ----------------------------------------- 2010-01-17 ----------------------------------------- 酷抓6.1.128.0116 刀锋下载4.5.241.0116 +刀锋下载增加最小化至系统托盘和悬浮窗功能 *更正软件中相关错误链接 ----------------------------------------- CooJah 6.1.128.0116 Blader 4.5.241.0116 +Tray icon support for Blader when minimizing and floating window to show downloading status *correct some dead links ----------------------------------------- 2010-01-04 ----------------------------------------- 酷抓6.1.124.0104 刀锋下载4.5.168.0104 *修复处酷抓对mmsh协议的网址分类错误的问题 +酷抓+刀锋配合支持mmsh下载 ----------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值