在做视频播放的时候使用MediaPlayer,并设置setDataSource("rtsp://.....")播放网络上的一个视频流,这没有问题,但是我现在需要录制所播放的视频, android的api给了MediaPlayer类,但是本人在使用时候发现这个类的方法setVideoSource(int)的参数我们只有两个选择MediaRecorder.VideoSource.DEFAULT和MediaRecorder.VideoSource.CAMERA,我现在不管传入的参数是MediaRecorder.VideoSource.DEFAULT还是MediaRecorder.VideoSource.CAMERA,录制的结果都是通过本手机的摄像头所取的画面,该如何才能实现不通过摄像头取景,而是录制一个url所指定的视频流呢?android提供这样的api了吗?要是没有现成的api那么该如何解决这个问题呢?期待高手的解答,谢谢! 

解决方案 »

  1.   


    LZ用MediaPlayer可以播放rtsp的视频流吗?貌似不行吧...
      

  2.   

    android的媒体框架中并没有给我直接对流的操作,所以要想实现复杂的功能很困难,我在想能不能通过修改android底层的多媒体框架的c++代码,然后重新编译,使编译后的代码,对上层提供一个接口方法可以取得当前播放媒体的流,要是能够得到媒体流的话,就可以实现我们自己想实现的任何操作!
      

  3.   

    修改底层代码是不可取的,这样会导致你的应用不通用,不过是否可以通过NDK的方式,编写你自己的so打包到apk里面,实现这样的功能。
      

  4.   

    楼上的能说详细点吗?我对c++不熟,android的多媒体框架源码我也看来,但是没怎么看懂,我现在就是想得到播放的媒体的数据流!提供个方法工java程序调用(返回InputStream)!
      

  5.   

    我觉得你说的录制功能不属于MediaRecorder的范畴。
    如果你想把网络上的视频录制,如果是rtsp视频流你只能自己去写原生代码。
    如果是android支持的媒体文件,你可以边下载边播放,前提是文件要支持passive下载。
      

  6.   

    自己去写原生代码,那么编码和解码也用自己写吗?用java编解码?
      

  7.   

    理论上是可行的,opencore的播放和录制是采用同一套机制。
      

  8.   

    java编解码该怎么实现呢?有具体的例子和教程吗?这样的话就相当于自己写了个播放器而不是用android内置的播放器是不是这样?
      

  9.   

    不要自己写播放器。
    首先澄清一个问题:MediaRecorder并不能实现你的目的,这个东西只是录制本地内容。你要录制网络视频流,首先要把网络流接收到本地,然后解码,转成Android可以识别的格式存储或者播放。当然,如果网络视频流在android中能直接播放的话,理论上可以在MediaPlayer中获得视频中的内容,
    这里也有机会进行处理。
      

  10.   

    android是可以处理网络流,关键是android封装的太很了,没有办法得到当前播放的流
      

  11.   

    请问楼主如何用MediaPlayer播放rtsp的网络视频流呢?我是新手,麻烦指教一下 谢谢
      

  12.   

    可以加我的qq交流下Android技术:304075296