bilibili / ijkplayer

Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.
GNU General Public License v2.0
32.51k stars 8.12k forks source link

H264 sei_rotation 竖屏播放支持 #1270

Closed zhangyutv closed 8 years ago

zhangyutv commented 8 years ago

ijk是否支持根据sei_rotation 来确定渲染画面的方向

Android4MediaPlayer commented 8 years ago

支持的 用textureview做渲染就好了

zhangyutv commented 8 years ago

videoview 是不能支持旋转?我看C代码里面有处理旋转角度的。最终的原理是通知外层设置方向,而不是渲染的时候旋转?

zhangyutv commented 8 years ago

ffmpeg 能不能支持输出旋转之后的视频帧?

Android4MediaPlayer commented 8 years ago

可以,用filter功能

bbcallen commented 8 years ago

Yes, for ffmpeg. No, for ijkplayer with SurfaceView.

Android4MediaPlayer commented 8 years ago

只支持软解

zhangyutv commented 8 years ago

我看到源代码里定义了下面这个,是不是说目前是disable掉avfilter的?

define CONFIG_AVFILTER 0

bbcallen commented 8 years ago

Yes, it only works with avcodec. Not valuable enough for ijkplayer.

zhangyutv commented 8 years ago

But if I set CONFIG_AVFILTER to 1, I get compile error in iOS.

bbcallen commented 8 years ago

You need also modify config/module-lite.sh

zhangyutv commented 8 years ago

In config/module-lite.sh, I can see that "--enable-avcodec". And I also try to enable ffmpeg options. And I have re-compile the ffmpeg according the guidelines from the README. But still I get "libavfilter/avcodec.h not found" error.

bbcallen commented 8 years ago

--enable-avfilter

zhangyutv commented 8 years ago

--enable-avfilter is already there.

bbcallen commented 8 years ago

Can you show your full build steps and logs?

zhangyutv commented 8 years ago

when I run ./compile-ffmpeg all, I can see the config as below in which you can check that the avf ilter is already enabled.

config: --disable-gpl --disable-nonfree --enable-runtime-cpudetect --disable-gray --disable-swscale-alpha --disable-programs --enable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-avdevice --enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale --disable-postproc --enable-avfilter --disable-avresample --enable-network --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-encoders --disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=flv --enable-decoder=h263 --enable-decoder=h263i --enable-decoder=h263p --enable-decoder=h264 --enable-decoder=mp3* --enable-decoder=vp6 --enable-decoder=vp6a --enable-decoder=vp6f --disable-hwaccels --disable-muxers --enable-muxer=mp4 --disable-demuxers --enable-demuxer=aac --enable-demuxer=concat --enable-demuxer=data --enable-demuxer=flv --enable-demuxer=hls --enable-demuxer=live_flv --enable-demuxer=loas --enable-demuxer=m4v --enable-demuxer=mov --enable-demuxer=mp3 --enable-demuxer=mpegps --enable-demuxer=mpegts --enable-demuxer=mpegvideo --disable-parsers --enable-parser=aac --enable-parser=aac_latm --enable-parser=h263 --enable-parser=h264 --enable-bsfs --disable-bsf=mjpeg2jpeg --disable-bsf=mjpeg2jpeg --disable-bsf=mjpega_dump_header --disable-bsf=mov2textsub --disable-bsf=text2movsub --enable-protocols --disable-protocol=async --disable-protocol=bluray --disable-protocol=concat --disable-protocol=ffrtmpcrypt --enable-protocol=ffrtmphttp --disable-protocol=gopher --disable-protocol=icecast --disable-protocol=librtmp* --disable-protocol=libssh --disable-protocol=mmsh --disable-protocol=mmst --disable-protocol=rtmp* --enable-protocol=rtmp --enable-protocol=rtmpt --disable-protocol=rtp --disable-protocol=sctp --disable-protocol=srtp --disable-protocol=unix --disable-devices --enable-filters --disable-iconv --enable-cross-compile --disable-stripping --arch=armv7 --target-os=darwin --enable-static --disable-shared --enable-pic --enable-neon --enable-optimizations --enable-debug --enable-small --prefix=/Users/edward/Desktop/Gitbase/ijkplayer-ios/ios/build/ffmpeg-armv7/output xcrun -sdk iphoneos clang

But when I change "#define CONFIG_AVFILTER 0" to "#define CONFIG_AVFILTER 1" and build the IJKDemo using xcode, I got the previous error which says "libavfilter/avcodec.h not found"

zhangyutv commented 8 years ago

In ijkplayer/ff_ffplay.c, line 56, after I change libavfilter/avcodec.h to libavcodec/avcodec.h, I build it success. From the build log, I suppose that the avcodec.h is install into libavcodec not libavfilter. Is it a bug?

bbcallen commented 8 years ago

Yes, seems like a bug. Fixed on master. Thanks