मैं mux h264 और एएसी को मीडियाकोडेक के साथ FFMPEG का उपयोग करके बनाया गया है, और यूट्यूब भेजने के लिए एफएफएमपीईजी के आरटीएमपी समर्थन का भी उपयोग कर रहा हूं। मैंने दो पाइप बनाए हैं, और लिखने योग्यबाइट चैनलों के माध्यम से जावा (एंड्रॉइड) से लिख रहा हूं। मैं इस तरह एक पाइप ठीक (स्वीकार करने अशक्त ऑडियो) के लिए भेज सकते हैं:मैं कम इनपुट लाइन FFMPEG कैसे चला सकता हूं और पहले इनपुट पर अवरुद्ध किए बिना एकाधिक पाइप (वीडियो और ऑडियो) स्वीकार कर सकता हूं?
./ffmpeg -f lavfi -i aevalsrc=0 -i "files/camera-test.h264" -acodec aac -vcodec copy -bufsize 512k -f flv "rtmp://a.rtmp.youtube.com/live2/XXXX"
यूट्यूब स्ट्रीमिंग का पूरी तरह से काम करता है (लेकिन मैं कोई ऑडियो नहीं है)।
./ffmpeg \
-i "files/camera-test.h264" \
-i "files/audio-test.aac" \
-vcodec copy \
-acodec copy \
-map 0:v:0 -map 1:a:0 \
-f flv "rtmp://a.rtmp.youtube.com/live2/XXXX""
पाइप इस तरह mkfifo साथ बनाया है, और जावा से खोल रहे हैं:
pipeWriterVideo = Channels.newChannel(new FileOutputStream(outputFileVideo.toString()));
(अब के लिए अपने परीक्षण के चरण में) निष्पादन के आदेश रचना है दो पाइप का उपयोग करते हुए यह मेरा आदेश है फ़ाइलों का, ffmpeg (adb shell के माध्यम से) शुरू करना और फिर रिकॉर्डिंग शुरू करना जो चैनल खोलता है। ffmpeg तुरंत h264 स्ट्रीम खोल देगा और फिर प्रतीक्षा करें, क्योंकि यह पाइप से पढ़ रहा है क्योंकि पहला चैनल खुला है (वीडियो के लिए) सफलतापूर्वक चलाएगा। जब ऑडियो को उसी तरह खोलने की कोशिश की जाती है, तो यह विफल हो जाता है क्योंकि ffmpeg ने वास्तव में पाइप से पढ़ना शुरू नहीं किया है। मैं दूसरी टर्मिनल विंडो खोल सकता हूं और ऑडियो फाइल को बिल्ली डाल सकता हूं और मेरा ऐप थूकता है जो मुझे उम्मीद है कि एएसी एन्कोड किया गया है, लेकिन ffmpeg विफल रहता है, आमतौर पर वहां बस प्रतीक्षा कर बैठता है। यहाँ वर्बोज़ आउटपुट है:
ffmpeg version N-78385-g855d9d2 Copyright (c) 2000-2016 the FFmpeg
developers
built with gcc 4.8 (GCC)
configuration: --prefix=/home/dev/svn/android-ffmpeg-with-rtmp/src/ffmpeg/android/arm
--enable-shared --disable-static --disable-doc --disable-ffplay
--disable-ffprobe --disable-ffserver --disable-symver
--cross-prefix=/home/dev/dev/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
--target-os=linux --arch=arm --enable-cross-compile
--enable-librtmp --enable-pic --enable-decoder=h264
--sysroot=/home/dev/dev/android-ndk-r10e/platforms/android-19/arch-arm
--extra-cflags='-Os -fpic -marm'
--extra-ldflags='-L/home/dev/svn/android-ffmpeg-with-rtmp/src/openssl-android/libs/armeabi '
--extra-ldexeflags=-pie --pkg-config=/usr/bin/pkg-config
libavutil 55. 17.100/55. 17.100
libavcodec 57. 24.102/57. 24.102
libavformat 57. 25.100/57. 25.100
libavdevice 57. 0.101/57. 0.101
libavfilter 6. 31.100/6. 31.100
libswscale 4. 0.100/4. 0.100
libswresample 2. 0.101/2. 0.101
matched as AVOption 'debug' with argument 'verbose'.
Trailing options were found on the commandline.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option async (audio sync method) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input file files/camera-test.h264.
Successfully parsed a group of options.
Opening an input file: files/camera-test.h264.
[file @ 0xb503b100] Setting default whitelist 'file'
मुझे लगता है कि अगर मैं दोनों पाइप को सुन शुरू करने के लिए ffmpeg मिल सकता है, बाकी काम करेगा!
आपके समय के लिए धन्यवाद।
संपादित करें: मैंने ऑडियो पाइप कनेक्शन और एन्कोडिंग को डीकॉप्लिंग करके प्रगति की है, लेकिन जैसे ही वीडियो स्ट्रीम पारित हो गई है, यह ऑडियो पर त्रुटियों को पार कर गया है। मैंने ऑडियो के लिए WriteableByteChannel बनाने के लिए एक अलग थ्रेड शुरू किया और यह कभी भी FileOutputStream निर्माण को पारित नहीं करता है।
matched as AVOption 'debug' with argument 'verbose'.
Trailing options were found on the commandline.
Finished splitting the commandline.
Parsing a group of options: global .
Successfully parsed a group of options.
Parsing a group of options: input file files/camera-test.h264.
Successfully parsed a group of options.
Opening an input file: files/camera-test.h264.
[file @ 0xb503b100] Setting default whitelist 'file'
[h264 @ 0xb503c400] Format h264 probed with size=2048 and score=51
[h264 @ 0xb503c400] Before avformat_find_stream_info() pos: 0 bytes read:15719 seeks:0
[h264 @ 0xb5027400] Current profile doesn't provide more RBSP data in PPS, skipping
[h264 @ 0xb503c400] max_analyze_duration 5000000 reached at 5000000 microseconds st:0
[h264 @ 0xb503c400] After avformat_find_stream_info() pos: 545242 bytes read:546928 seeks:0 frames:127
Input #0, h264, from 'files/camera-test.h264':
Duration: N/A, bitrate: N/A
Stream #0:0, 127, 1/1200000: Video: h264 (Baseline), 1 reference frame, yuv420p(left), 854x480 (864x480), 1/50, 25 fps, 25 tbr, 1200k tbn, 50 tbc
Successfully opened the file.
Parsing a group of options: input file files/audio-test.aac.
Applying option vcodec (force video codec ('copy' to copy stream)) with argument copy.
Successfully parsed a group of options.
Opening an input file: files/audio-test.aac.
Unknown decoder 'copy'
[AVIOContext @ 0xb5054020] Statistics: 546928 bytes read, 0 seeks
यहां मैं ऑडियो पाइप खोलने का प्रयास करता हूं।
new Thread(){
public void run(){
Log.d("Audio", "pre thread");
FileOutputStream fs = null;
try {
fs = new FileOutputStream("/data/data/android.com.android.grafika/files/audio-test.aac");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Log.d("Audio", "made fileoutputstream"); //never hits here
mVideoEncoder.pipeWriterAudio = Channels.newChannel(fs);
Log.d("Audio", "made it past opening audio pipe");
}
}.start();
धन्यवाद।
क्या आपको '-acodec ... -i filename -vcodec -i filename' को जोड़ना होगा? । वर्बोज़ आउटपुट में, क्या आप प्रति '--option' कॉन्फ़िगरेशन लाइन को लपेट सकते हैं, पढ़ने के लिए बहुत मुश्किल है। सौभाग्य। – shellter
मुझे ऐसा नहीं लगता है, मैंने अंत में कोडेक झंडे के साथ कई उदाहरण देखे हैं। मैंने अभी कोशिश की और मुझे एक ही आउटपुट मिलता है। मुझे आश्चर्य है कि अगर मुझे ऑडियो और वीडियो चैनलों को पूरी तरह से स्वतंत्र रूप से स्ट्रीम करने की कोशिश करनी है (हो सकता है कि पहली पाइप पर एक सक्रिय वीडियो स्ट्रीम मौजूद है तो यह दूसरे पर आगे बढ़ेगी ??)। मैं इसके लिए अपना कोड अनुकूलित करने की कोशिश करूंगा। – Version135b
जैसा कि आपके पास कोई वास्तविक प्रतिक्रिया नहीं है, मैं उन वेबसाइटों की तलाश करूंगा जो ऑडियो प्रसंस्करण के लिए अधिक विशिष्ट हैं या यहां तक कि ffmpeg विशिष्ट भी हैं। मुझे पूरा यकीन है कि एक "आधिकारिक" ffmpeg मंच है जहां आपको एक निश्चित उत्तर मिल सकता है। संपादन के लिए धन्यवाद। सौभाग्य! – shellter