Android 4.0以上系统硬件解码RTMP流的一种方式

关于Android5.0开放的Native-codec测试一文中有提到4.0通过OpenMAX AL接口实现硬解码。可以先从分析native-media这个sample开始,可以在ndk目录中找到。

  1. 首先调用Java_com_example_nativemedia_NativeMedia_createEngine ?创建引擎和output mix 对象。
  2. Java_com_example_nativemedia_NativeMedia_setSurface 将java层的Surface对象转为NativeWindow对象用于视频显示
  3. Java_com_example_nativemedia_NativeMedia_createStreamingMediaPlayer ?初始化data source、?audio sink、image video sink、media player等对象 ,注册AndroidBufferQueueCallback?StreamChangeCallback两个回调,调用enqueueInitialBuffers预填充部分初始数据。
  4. enqueueInitialBuffers中通过读取ts文件获取足够量的buffer用于初始化
  5. AndroidBufferQueueCallback 的注释:?register the callback from which OpenMAX AL can retrieve the data to play,程序回调这里说明可以读buffer开始播放了

继续阅读“Android 4.0以上系统硬件解码RTMP流的一种方式”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: Android 4.0以上系统硬件解码RTMP流的一种方式

使用ffmpeg进行rtp串流h.264时关于sdp的一些分析

阅读ffmpeg串流的手册FFmpeg Streaming Guide
当进行点对点串流
如果视频编码为H.264时,payload type 为 96

此时会自动输出一段SDP的代码,这时候如果直接播放 继续阅读“使用ffmpeg进行rtp串流h.264时关于sdp的一些分析”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 使用ffmpeg进行rtp串流h.264时关于sdp的一些分析

支持H.264,Speex编码的Red5 Publisher

安装配置Red5 Server 1.0 RC1 (一)中提到过一个Publisher 工具,非常好用。但是Red5官方一直没更新,只能使用flv和nellymoser编码。而现在大多使用H.264和Speex了。
近期为了方便调试,修改了下源码,可以在https://github.com/illuspas/Red5-Publisher找到。
直接使用Flash builder 4.6导入项目即可。
也可以直接下载release.zip使用
直接打开:http://www.nodemedia.cn/uploads/files/Red5-Publisher.swf

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 支持H.264,Speex编码的Red5 Publisher

Android,IOS平台上x264编码实时视频参数设置与优化

移动设备上的H.264实时视频编码,需要考虑到cpu占用与带宽这2个限制因素,使用X264软编码,开启neon指令集优化,即使是在arm处理器下,依然可以通过优化配置达到满意的性能.
以下测试环境 一段352×288@15fps的视频,模拟摄像头采集到的数据。ipod touch4 和昨天编译出的X264:
Touch-future:~ root# ./x264 -o video_1.h264 video_1.y4m –profile baseline –preset ultrafast –fps 15

baseline
ultrafast
encoded 467 frames, 48.17 fps, 865.45 kb/s 3368054(压缩后的文件大小,单位字节) 继续阅读“Android,IOS平台上x264编码实时视频参数设置与优化”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: Android,IOS平台上x264编码实时视频参数设置与优化

开启neon编译iOS版X264

我的测试环境 Xcode 4.6 iPod Touch 4

设置环境变量

配置

编译 继续阅读“开启neon编译iOS版X264”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 开启neon编译iOS版X264

Android环境 多核CPU x264编码性能测试

根据上一篇交叉编译支持多线程的Android版X264库
编译出了armv7 neon指令优化并开启多线程的x264执行程序
结果怎么样呢
测试环境:
MT6589, 联发科的4核处理器,比红米手机 MT6589T在CPU频率上低一点,这款是1.2GHz的 继续阅读“Android环境 多核CPU x264编码性能测试”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: Android环境 多核CPU x264编码性能测试

交叉编译支持多线程的Android版X264库

第一步,制作独立交叉编译链,我使用ndkr9制作的, 使用API 9平台,gcc4.6
进入ndk目录,执行

第二部,修改x264的configure 继续阅读“交叉编译支持多线程的Android版X264库”

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 交叉编译支持多线程的Android版X264库

FFmpeg 生成.h264文件

今天编译了raspberry pi 的一个例子hello_video
可以解码.h264文件输出到显示器
使用ffmpeg生成这种无容器的 raw H.264格式

就是将mp4这类 length prefixed mode 转为 start code prefixed mode

另外,pi的硬解码性能确实不错,播放1080P的视频非常流畅,GPU加速,几乎不占CPU

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: FFmpeg 生成.h264文件

FFmpeg取回标准H.264流后播放的同时存为MP4文件

上篇使用pipe播放流后,观看的同时,如需保存成文件,使用ffmpeg也是很方便的.
既然已经是标准H264了,那就不需要再编码,直接copy流再muxer

代码原型请看这个这个回复,不过他的代码中,视频输出流的AVCodecContext

缺少了extradata,造成生成的MP4文件avcC没有SPS PPS信息而无法播放

添加如下代码

另外不需要两次打开输入流,完全是可以在播放开始后任意时间来控制开始保存文件.
使用mp4封装,在Android IOS上均可调用系统自带播放器播放

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: FFmpeg取回标准H.264流后播放的同时存为MP4文件

使用FFmpeg解码私有传输协议标准H264流

今天解决了一个需求,通过TCP拉取数据包后按一个私有协议解包封包后得到标准H264.
按以前的方法,在已知高宽的情况下手动注册AVCodecContext,填充AVFrame,解码。。。。 非常繁琐,如果连高宽都不确定的话 :< 但仔细想想这种没有封入容器的裸数据如果是一个文件,据依然可以通过file协议使用avformat_open_input打开并自动解析等。 那么这种场景完全可以用管道来代替,果然ffmpeg是支持pipe的。 我的试验环境是Android,ffmpeg版本1.0.6, NDK8d 流程如下 创建有名管道 继续阅读“使用FFmpeg解码私有传输协议标准H264流”