Luc*_*lla 7 c++ java video android h.264
我知道exoplayer对RTSP的支持,但我需要C++是从大量的操作系统的播放器代码工作,所以我需要传递给exoplayer之前,在解析C++到NAL单元的RTP包
我找到了一种使用live555解码RTP数据包并提取其NAL单元的方法.根据ExoPlayer的文档:
所有ExoPlayer实现的通用组件是:
MediaSource,用于定义要播放的媒体,加载媒体,以及从中读取加载的媒体.
在播放开始时通过ExoPlayer.prepare注入MediaSource....
所以我需要一个MediaSource可以从我的C++代码中提取NAL单元的自定义.
在MediaSource的类引用中,我们可以看到已经有一些MediaSource可用.我虽然也许SmoothStreaming MediaSource可以工作但是没有描述它究竟做什么,并且在它的构造函数中我必须提供一个Uri或一个SsManifest(什么).
我可以看到这个库中存在一个NAL单元实用程序,所以可能已经完成了一半
那么如何构建或使用已有的MediaSource读取NAL单元以供ExoPlayer播放?
作为附加组件,您如何将NAL单元从C++传递到Java?在代码中我发现它只是将它们存储在C++缓冲区中.我应该以某种方式用Java读取这个缓冲区吗?
更新:
我一直在研究这个图书馆是如何运作的.这一切都始于一个MediaSource,它有像Extractor和DataSource这样的对象.似乎ExtractorMediaSource是MediaSource您可以提供自己的Extractor和DataSource.
据我所知,DataSource是一个从任何可能的地方获取原始字节的类,无论是文件读取还是网络数据包.基于Extractor库上的可用类,Mp4Extractor和Mp3Extractor,Extractor可以解释从中读取的数据DataSource.Extractor界面的两个主要方法是:
void init(ExtractorOutput output)
int read(ExtractorInput input, PositionHolder seekPosition)
Run Code Online (Sandbox Code Playgroud)
我不知道什么是ExtractorInput与ExtractorInput对,但它们看起来很重要.
所以以某种方式Extractor读取DataSource,解析它并以通用格式发送给Renderer?
我需要知道这种常见格式是如何解析我从自定义中读取的NAL单元DataSource.
您无法使用 ExoPlayer 播放 NAL 单元或原始 H.264 流。
图片数据必须存在于受支持的容器/格式中。
目前还不清楚你的神秘 C++ 代码在做什么,它是NDK设置吗?它在Android解码中的作用是什么?您是说您无法将[从 C++ 函数]数据数组作为函数参数传递到某些 Android 函数中吗?是不是类似于Java 到 C++的设置?目前尚不清楚你真正的问题是什么......
如果您坚持使用 Exoplayer,我可以告诉您 FLV(在容器列表中)可能是最好的选择,因为它可以实时构建(重新混合)。首先创建一个包含数据的 FLV 标头SPS,PPS然后是关键帧(从第一个 NAL 中提取的 H264 数据)。您必须熟悉 FLV 字节结构,但每个帧头大约有 13 个字节,后面跟着 NAL 数据,对每个帧重复直到结束。这将是实时转码。
作为第二个选项,对于 Android,您可以只使用MediaCodec解码从 NAL 单元提取的 H264。这是一个有用的示例源。只需用作:
MediaCodec.createDecoderByType("video/avc"); //then later give NAL units
Run Code Online (Sandbox Code Playgroud)
还可以研究此其他来源的功能,了解其如何通过 Android 自己的解码器工作的想法。
其他出发点:
| 归档时间: |
|
| 查看次数: |
587 次 |
| 最近记录: |