【问题标题】:Video streaming in android by parcelFileDescriptor通过 parcelFileDescriptor 在 android 中流式传输视频
【发布时间】:2011-12-02 18:42:11
【问题描述】:

我成功通过 SD 卡上的 Mediarecorder 录制视频 但我想将此视频发送到服务器而不写入 SD 卡。 我搜索它,我发现 parcelFileDescriptor 是发送的方式 视频到 TCP 套接字 但我不知道如何在服务器端接收它,请解释一下。 这是我的客户端代码

socket = new Socket("hostname", portnumber);
ParcelFileDescriptor  pfd =ParcelFileDescriptor.fromSocket(socket);
            recorder = new MediaRecorder();
            recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            recorder.setOutputFile(pfd.getFileDescriptor());
            recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
            mPreview = new Preview(VideoRecorder.this,recorder);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            setContentView(mPreview);

我想在服务器端接收它并播放它以创建实时视频传输器。

知道 “MediaRecorder 以 3GPP 或 MP4 格式记录。这种文件格式由原子组成,其中每个原子以其大小开始。文件中有不同种类的原子,mdat 原子存储编码视频和音频的实际原始帧. 在 Cupcake 版本中,Android 开始用编码帧写出一个 mdat atom,但它必须将 atom 的大小留空,原因很明显。当写入可搜索的文件描述符时,它可以在记录后简单地填充空白,但当然套接字文件描述符是不可搜索的。所以接收到的流必须在录制完成后修复,或者必须由服务器处理原始视频/音频帧。

我想要一个服务器端代码(可能是 Android 手机或 PC)。 如果有其他方法请帮助我......

谢谢

【问题讨论】:

    标签: java android video-streaming filestream


    【解决方案1】:

    为了从 android 或 pc 流式传输,您需要实现传输流的协议和服务器。其中有几个,例如 HSL、RTPS 等(更多 http://en.wikipedia.org/wiki/Streaming_media)。这不是一个小问题,Android成功的流媒体服务很少。

    你可以在这里查看如何在android上实现和steam服务:https://github.com/fyhertz/libstreaming

    该库在 Android 5 上已损坏,但适用于 4.4.x

    【讨论】:

    • 该库的一位作者写道,他发现了一个技巧,可以让它在 Android 5 中运行。
    • 你能给个链接吗?我查看了 GitHub,只有一条关于尝试支持 Lolipop 的评论。不清楚它是否正常工作。
    • 来自该 GitHub 的链接 (stackoverflow.com/questions/26990816/…)。据说:“出于安全原因,使用 LocalSocket 的 Android Lollipop 不再可能。但是使用 ParcelFileDescriptor 就可以了。文件 MediaStream.java 中的更多详细信息”。
    猜你喜欢
    • 2018-02-10
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多