导航:首页 > 操作系统 > androidffmpegrtmp

androidffmpegrtmp

发布时间:2022-08-07 04:53:50

‘壹’ android如何播放RTMP协议视频流

Adboe的Red5流媒体服务器免费并且是开源的,与Flash搭配的时候可谓是天生一对,但使用java和Android作为客户端调用却可谓一波三折。

Adobe的Red5源代码里有一个RTMPClient的类,这个类在使用上其实不复杂,但却没办法成功调用。观察日志,发现是连接成功后在开始创建流的时候,服务端把连接断开了。我能想到的解释就是可能公司现在所使用的Red5服务器的版本与这个RTMPClient不兼容。

‘贰’ android ffmpeg 是啥意思

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
用来开发音视频的~!

‘叁’ 有没有ffmpeg 开发的android demo求一例

转载 首先:

是要编译libjnivideo.so和libjniaudio.so 这两个so因为不同的版本或者修改过的framework是不一样的,所以需要在android源码中 编译出自己的so。我的android 2.1源码是从官网下载回来的,没有经过修改。

下载链接中的native目录下的源码到framework/base目录下具体看他的目录结构。https://github:com/havlenapetr/android_frameworks_base编译主要有3个错误

1.

library 'libjnigraphics.so' not in prelink map

当前目录下的Android.mk 加上

LOCAL_PRELINK_MODULE := false2.

frameworks/base/native/video/jni/surface.cpp:17:36: error: surfaceflinger/Surface.h: No such file or directory

修改头文件

#include <android/surface.h>

#include <ui/Surface.h>

#include <utils/Log.h>

#include <SkBitmap.h>

#include <SkCanvas.h>3.

make: *** 没有规则可以创建“out/target/proct/generic/obj/SHARED_LIBRARIES/libjnivideo_intermediates/LINKED/libjnivideo.so”需要的目标“out/target/proct/generic/obj/lib/libsurfaceflinger_client.so”。 停止。

当前目录下的Android.mk

LOCAL_SHARED_LIBRARIES := /

libskia /

libui /

libutils /

liblog

到这里如果幸运的话可以编译出so。其次是编译libffmpeg_jni.so

需要修改的地方:

1.

jni/jni/Android.mkLOCAL_C_INCLUDES += /

$(LOCAL_PATH)/../libffmpeg /

$(LOCAL_PATH)/../libmediaplayer /

$(LOCAL_PATH)/../include /

$(LOCAL_PATH)/../include/androidifeq ($(IN_NDK),true)

LOCAL_LDLIBS := -llog

else

LOCAL_PRELINK_MODULE := false

LOCAL_LDLIBS := -llog

LOCAL_SHARED_LIBRARIES := liblog

endif

2.

Vector.h#include <new>

#include <stdint.h>

#include <sys/types.h>#include <cutils/log.h>

#include <utils/VectorImpl.h>

#include <utils/TypeHelpers.h>

#include <android/Errors.h>

3.

<utils/TypeHelpers.h>4

VectorImpl.h#include <assert.h>

#include <stdint.h>

#include <sys/types.h>

#include <android/Errors.h>5.

VectorImpl.cpp

#include <string.h>

#include <stdlib.h>

#include <stdio.h>#include <cutils/log.h>

#include <android/Errors.h>

#include <utils/SharedBuffer.h>

#include <utils/VectorImpl.h>

同时也要把刚才两个编译出来的so放到obj/local/armeabi目录下,之后就可以了编译出libffmpeg_jni.so.

最后也要把刚才两个so放到libs/armeabi目录下。要不然运行的时候找不到。

播放的时候太卡了,声音也没有同步。

‘肆’ 如何用Android NDK编译FFmpeg

如何使用ndk为ffmpeg编译rtmp+polarssl静态库?这个问题花了我整整一天时间。其中遇到很多小问题,这里记录一下,方便自己也方便其他人。1、编译polarssl,查看其Readme文件即可,不需要configure,只需要make时带上必要的参数即可,不过要记得在每一次执行make命令时都带上CC的参数(指向你的armgcc),因为我试过在makeinstall时没有带上CC的参数,虽然能编译出polarssl但是未能正确被rtmp引用到。2、因为前面我用的polarssl是当前最新(1.3.7)版本,而librtmp使用的好像是polarssl1.0.0以下版本的api,所以需要修改rtmp部分源码,让其调用新版polarssl的api,这里的修改可以参照《MigratingfromPolarSSL-1.2tothePolarSSL1.3branch》和《[rtmpmp]branchmasterupdated.a312ac7FixcompatwithPolarSSL>=1.1.0》。3、出现undefinedreferenceto`havege_random’错误,这里是因为polarssl默认关闭了havege模块,需要你手动开启,主要就是修改include/polarssl/config.h,去掉POLARSSL_HAVEGE_C前的注释,也就是要定义POLARSSL_HAVEGE_C,如下:#definePOLARSSL_HAVEGE_C4、在编译出上面两个库之后,可以开始编译ffmpeg(2.1.1版本)了,如果遇到下面的问题check_pkg_configlibrtmplibrtmp/rtmp.hRTMP_SocketERROR:librtmpnotfound这里有三种解决方法:第一种,因为是网络上传播最多的,算是比较简便的方法,就是修改ffmpeg的configure,将以下一行:enabledlibrtmp&&require_pkg_configlibrtmplibrtmp/rtmp.hRTMP_Socket改为:enabledlibrtmp&&requirelibrtmplibrtmp/rtmp.hRTMP_Socket-lrtmp-lpolarssl-lz或者直接注释掉&&***部分,然后再自己加上librtmp的库路径也行第二种,(比较推荐,因为解决了这个会顺带解决大部分找不到库的错误!)因为这里使用了pkg-config工具查找库,而这个工具ndk并没有附带提供,而出现check_pkg_config相关错误的话,只要稍加注意,会发现在使用configure配置ffmpeg的交叉编译时,已经有相应的pkg-config不存在的警告了。我对这个工具不熟悉,所以我只是简单地加上了一个软链接到系统的pkg-config,如下:ln-s/usr/bin/pkg-config/home/cidy0106/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-pkg-config这个时候重新configure的话可能会出现找不到polarssl库的错误提示,需要修改一下librtmp安装目录里的librtmp.pc,把以下内容:Libs:-L${libdir}-lrtmp-lz改为:Libs:-L${libdir}-lrtmp-lz-lpolarssl至此,就可以正确编译出ffmpeg了转载

‘伍’ android系统播放rtmp直播流

建议网络下ffmpeg这个,可以解决android下各种格式视频流播放

‘陆’ android rtmp推流怎么实现

就拿使用ZEGO即构的实时音视频产品举个例子,要想实现android rtmp推流操作,可以通过调用开始推流 startPublishingStream 的 API 接口,向远端用户发送本端的音视频流。如果不需要继续推流,可调用 stopPublishingStream 停止推流(开始推流前,建议开发者在开始推流前对推流参数、本地预览视图进行设置)。

‘柒’ 如何在Android用FFmpeg解码图像

在Android用FFmpeg解码图像
for(i=0;i<pFormatCtx->nb_streams;i++)if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO){videoStream=i;break;}if(videoStream==-1)return-1;//Didn'tfindavideostream//=pFormatCtx->streams[videoStream]->codec;//=avcodec_find_decoder(pCodecCtx->codec_id);if(pCodec==NULL){fprintf(stderr,"Unsupportedcodec! ");return-1;//Codecnotfound}//Opencodecif(avcodec_open2(pCodecCtx,pCodec,NULL)<0)pFrame=avcodec_alloc_frame();//_alloc(&picture,PIX_FMT_RGB24,pCodecCtx->width,pCodecCtx->height);//_convert_ctx=sws_getContext(pCodecCtx->width,pCodecCtx->height,pCodecCtx->pix_fmt,pCodecCtx->width,pCodecCtx->height,PIX_FMT_RGB24,SWS_BICUBIC,NULL,NULL,NULL);if(img_convert_ctx==NULL){fprintf(stderr,"! ");exit(1);}///*########################################[4]########################################*/i=0;dirtyRegion.set(android::Rect(0x3FFF,0x3FFF));while(av_read_frame(pFormatCtx,&packet)>=0){//?if(packet.stream_index==videoStream){//Decodevideoframeavcodec_decode_video2(pCodecCtx,pFrame,&frameFinished,&packet);//Didwegetavideoframe?if(frameFinished){//_scale(img_convert_ctx,pFrame->data,pFrame->linesize,0,pCodecCtx->height,picture.data,picture.linesize);}}//_read_frameav_free_packet(&packet);}pFrame为解码后的数据,将它显示在画布上,就完成了FFMEPG解码

‘捌’ ffmpeg里的ffserver怎么支持rtmp呢,没搞出来

ffmpeg本身实现了rtmp协议的解析,具体可以查看源代码,只是性能不如librtmp强,并且不支持rtmpt,rtmps等

‘玖’ FFMPEG推送rtmp源实例怎么解决

如果要单纯的以h.264的码流推送摄像头的视频到rtmp server(ip:127.0.0.1),可以这样: ffmpeg -f video4linux2 -vcodec libx264 -vpre default -s320x240 -i /dev/video0 -f flv rtmp://127.0.0.1:1935/app/stream

阅读全文

与androidffmpegrtmp相关的资料

热点内容
女程序员的转行方法 浏览:879
东风启辰车联网安装文件夹 浏览:520
华为怎么设置app时间锁 浏览:660
后宫app视频怎么下载 浏览:525
如何把图片转换从PDF格式 浏览:259
重写和重载的区别java 浏览:233
expressvpnandroid 浏览:84
储存卡被加密怎么解除 浏览:169
地球怎么压缩直径 浏览:780
金铲铲之战服务器爆满怎么进 浏览:160
同仁堂pdf 浏览:935
如何编译原理课程教材 浏览:730
单片机控制显示器 浏览:776
顶好花app下载怎么找不到 浏览:989
手机命令大全 浏览:808
怎么下邮政银行app 浏览:250
不背单词app单词怎么学习 浏览:481
程序员日常操作搞笑 浏览:382
android检查是否安装 浏览:375
苹果手机编辑pdf文件 浏览:460